mirror of
https://github.com/elastic/kibana.git
synced 2025-04-25 02:09:32 -04:00
[Index Management] Test LogsDb Index Template Modifications (#206548)
Part of https://github.com/elastic/kibana/issues/203716
## Summary
This PR introduces a new test case for LogsDB in both Stateful and
Serverless:
> Verify that users can override LogsDB index settings including:
ignore_above, ignore_malformed, ignore_dynamic_beyond_limit, subobjects
and timestamp format.
For modify `subobjects` and `timestamp` format it must be done from the
mappings tab. For `ignore_above`, `ignore_malformed`,
`ignore_dynamic_beyond_limit` the configuration is done in the Settings
tab.
It also introduces a test case only for Stateful
(enableMappingsSourceFieldSection [is
disabled](9c6de6aabc/config/serverless.yml (L112)
)
for serverless)
> Verify that users cannot disable synthetic source for a LogsDB index.
This commit is contained in:
parent
2067c84eb6
commit
75e1866915
3 changed files with 296 additions and 47 deletions
|
@ -387,6 +387,7 @@ export const StepReview: React.FunctionComponent<Props> = React.memo(
|
|||
defaultMessage: 'Request',
|
||||
}),
|
||||
content: <RequestTab />,
|
||||
'data-test-subj': 'stepReviewRequestTab',
|
||||
},
|
||||
];
|
||||
|
||||
|
@ -397,6 +398,7 @@ export const StepReview: React.FunctionComponent<Props> = React.memo(
|
|||
defaultMessage: 'Preview',
|
||||
}),
|
||||
content: <PreviewTab template={template} />,
|
||||
'data-test-subj': 'stepReviewPreviewTab',
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
|
|||
const testSubjects = getService('testSubjects');
|
||||
const es = getService('es');
|
||||
|
||||
const INDEX_TEMPLATE_NAME = `test-index-template-name`;
|
||||
const INDEX_TEMPLATE_NAME = 'index-template-test-name';
|
||||
|
||||
describe('Index template tab', function () {
|
||||
before(async () => {
|
||||
|
@ -25,8 +25,6 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
|
|||
// Navigate to the templates tab
|
||||
await pageObjects.indexManagement.changeTabs('templatesTab');
|
||||
await pageObjects.header.waitUntilLoadingHasFinished();
|
||||
// Click create template button
|
||||
await testSubjects.click('createTemplateButton');
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
|
@ -36,10 +34,23 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
|
|||
await testSubjects.click('reloadButton');
|
||||
});
|
||||
|
||||
it('can create an index template with data retention', async () => {
|
||||
describe('index template creation', () => {
|
||||
beforeEach(async () => {
|
||||
// Click create template button
|
||||
await testSubjects.click('createTemplateButton');
|
||||
// Complete required fields from step 1
|
||||
await testSubjects.setValue('nameField', INDEX_TEMPLATE_NAME);
|
||||
await testSubjects.setValue('indexPatternsField', 'test-1');
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
// Click Create template
|
||||
await pageObjects.indexManagement.clickNextButton();
|
||||
// Close detail tab
|
||||
await testSubjects.click('closeDetailsButton');
|
||||
});
|
||||
|
||||
it('can create an index template with data retention', async () => {
|
||||
// Enable data retention
|
||||
await testSubjects.click('dataRetentionToggle > input');
|
||||
// Set the retention to 7 hours
|
||||
|
@ -51,19 +62,10 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
|
|||
await pageObjects.header.waitUntilLoadingHasFinished();
|
||||
|
||||
expect(await testSubjects.getVisibleText('lifecycleValue')).to.be('7 hours');
|
||||
|
||||
// Click Create template
|
||||
await pageObjects.indexManagement.clickNextButton();
|
||||
// Close detail tab
|
||||
await testSubjects.click('closeDetailsButton');
|
||||
});
|
||||
|
||||
it('can create an index template with logsdb index mode', async () => {
|
||||
await testSubjects.click('createTemplateButton');
|
||||
// Fill out required fields
|
||||
await testSubjects.setValue('nameField', INDEX_TEMPLATE_NAME);
|
||||
await testSubjects.setValue('indexPatternsField', 'logsdb-test-index-pattern');
|
||||
|
||||
// Modify index mode
|
||||
await testSubjects.click('indexModeField');
|
||||
await testSubjects.click('index_mode_logsdb');
|
||||
|
||||
|
@ -73,11 +75,151 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
|
|||
|
||||
expect(await testSubjects.exists('indexModeTitle')).to.be(true);
|
||||
expect(await testSubjects.getVisibleText('indexModeValue')).to.be('LogsDB');
|
||||
});
|
||||
});
|
||||
|
||||
describe('index template modification', () => {
|
||||
beforeEach(async () => {
|
||||
await es.indices.putIndexTemplate({
|
||||
name: INDEX_TEMPLATE_NAME,
|
||||
index_patterns: ['logsdb-test-index-pattern'],
|
||||
data_stream: {},
|
||||
template: {
|
||||
settings: {
|
||||
index: {
|
||||
mode: 'logsdb',
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await testSubjects.click('reloadButton');
|
||||
await pageObjects.indexManagement.clickIndexTemplateNameLink(INDEX_TEMPLATE_NAME);
|
||||
await testSubjects.click('manageTemplateButton');
|
||||
await testSubjects.click('editIndexTemplateButton');
|
||||
await pageObjects.header.waitUntilLoadingHasFinished();
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
if (await testSubjects.exists('closeDetailsButton')) {
|
||||
// Close Flyout to return to templates tab
|
||||
await testSubjects.click('closeDetailsButton');
|
||||
} else {
|
||||
// Comeback to templates tab
|
||||
await pageObjects.common.navigateToApp('indexManagement');
|
||||
await pageObjects.indexManagement.changeTabs('templatesTab');
|
||||
}
|
||||
});
|
||||
|
||||
it('can modify ignore_above, ignore_malformed, ignore_dynamic_beyond_limit, subobjects and timestamp format in an index template with logsdb index mode', async () => {
|
||||
// Navigate to Index Settings
|
||||
await testSubjects.click('formWizardStep-2');
|
||||
await pageObjects.header.waitUntilLoadingHasFinished();
|
||||
|
||||
// Modify Index settings
|
||||
await testSubjects.setValue(
|
||||
'kibanaCodeEditor',
|
||||
JSON.stringify({
|
||||
index: {
|
||||
mapping: {
|
||||
ignore_above: '20',
|
||||
total_fields: {
|
||||
ignore_dynamic_beyond_limit: 'true',
|
||||
},
|
||||
ignore_malformed: 'true',
|
||||
},
|
||||
},
|
||||
}),
|
||||
{
|
||||
clearWithKeyboard: true,
|
||||
}
|
||||
);
|
||||
|
||||
// Navigate to Mappings
|
||||
await testSubjects.click('formWizardStep-3');
|
||||
await pageObjects.header.waitUntilLoadingHasFinished();
|
||||
const mappingTabs = await testSubjects.findAll('formTab');
|
||||
await mappingTabs[3].click();
|
||||
|
||||
// Modify timestamp format
|
||||
await testSubjects.click('comboBoxClearButton');
|
||||
await testSubjects.setValue('comboBoxInput', 'basic_date');
|
||||
await testSubjects.pressEnter('comboBoxInput');
|
||||
|
||||
// Modify subobjects
|
||||
await testSubjects.click('subobjectsToggle');
|
||||
|
||||
// Navigate to the last step of the wizard
|
||||
await testSubjects.click('formWizardStep-5');
|
||||
await pageObjects.header.waitUntilLoadingHasFinished();
|
||||
|
||||
// Click Create template
|
||||
await pageObjects.indexManagement.clickNextButton();
|
||||
// Close detail tab
|
||||
await testSubjects.click('closeDetailsButton');
|
||||
await pageObjects.header.waitUntilLoadingHasFinished();
|
||||
|
||||
const flyoutTabs = await testSubjects.findAll('tab');
|
||||
|
||||
// Verify Index Settings
|
||||
await flyoutTabs[1].click();
|
||||
await pageObjects.header.waitUntilLoadingHasFinished();
|
||||
expect(await testSubjects.exists('settingsTabContent')).to.be(true);
|
||||
const settingsTabContent = await testSubjects.getVisibleText('settingsTabContent');
|
||||
expect(JSON.parse(settingsTabContent)).to.eql({
|
||||
index: {
|
||||
mode: 'logsdb',
|
||||
mapping: {
|
||||
ignore_above: '20',
|
||||
total_fields: {
|
||||
ignore_dynamic_beyond_limit: 'true',
|
||||
},
|
||||
ignore_malformed: 'true',
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
// Verify Mappings
|
||||
await flyoutTabs[2].click();
|
||||
await pageObjects.header.waitUntilLoadingHasFinished();
|
||||
expect(await testSubjects.exists('mappingsTabContent')).to.be(true);
|
||||
const mappingsTabContent = await testSubjects.getVisibleText('mappingsTabContent');
|
||||
expect(JSON.parse(mappingsTabContent)).to.eql({
|
||||
dynamic_date_formats: ['basic_date'],
|
||||
_source: {
|
||||
mode: 'synthetic',
|
||||
},
|
||||
subobjects: false,
|
||||
});
|
||||
});
|
||||
describe('syntethic source', () => {
|
||||
it('can not disable syntethic source in an index template with logsdb index mode', async () => {
|
||||
// Navigate to Mappings
|
||||
await testSubjects.click('formWizardStep-3');
|
||||
await pageObjects.header.waitUntilLoadingHasFinished();
|
||||
const mappingTabs = await testSubjects.findAll('formTab');
|
||||
await mappingTabs[3].click();
|
||||
|
||||
// Modify source
|
||||
await testSubjects.click('sourceValueField');
|
||||
await testSubjects.click('disabledSourceFieldOption');
|
||||
|
||||
// Navigate to the last step of the wizard
|
||||
await testSubjects.click('formWizardStep-5');
|
||||
await pageObjects.header.waitUntilLoadingHasFinished();
|
||||
|
||||
// Click Create template
|
||||
await pageObjects.indexManagement.clickNextButton();
|
||||
await pageObjects.header.waitUntilLoadingHasFinished();
|
||||
|
||||
expect(await testSubjects.exists('saveTemplateError')).to.be(true);
|
||||
|
||||
await testSubjects.click('stepReviewPreviewTab');
|
||||
await pageObjects.header.waitUntilLoadingHasFinished();
|
||||
expect(await testSubjects.exists('simulateTemplatePreview')).to.be(true);
|
||||
expect(await testSubjects.getVisibleText('simulateTemplatePreview')).to.contain(
|
||||
'_source can not be disabled in index using [logsdb] index mode'
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
|
|
|
@ -86,16 +86,18 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
|
|||
describe('Create index template', () => {
|
||||
const TEST_TEMPLATE_NAME = `test_template_${Date.now()}`;
|
||||
|
||||
beforeEach(async () => {
|
||||
await testSubjects.click('createTemplateButton');
|
||||
|
||||
await testSubjects.setValue('nameField', TEST_TEMPLATE_NAME);
|
||||
await testSubjects.setValue('indexPatternsField', INDEX_PATTERN);
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
await es.indices.deleteIndexTemplate({ name: TEST_TEMPLATE_NAME }, { ignore: [404] });
|
||||
});
|
||||
|
||||
it('Creates index template', async () => {
|
||||
await testSubjects.click('createTemplateButton');
|
||||
|
||||
await testSubjects.setValue('nameField', TEST_TEMPLATE_NAME);
|
||||
await testSubjects.setValue('indexPatternsField', INDEX_PATTERN);
|
||||
|
||||
// Click form summary step and then the submit button
|
||||
await testSubjects.click('formWizardStep-5');
|
||||
await testSubjects.click('nextButton');
|
||||
|
@ -107,11 +109,6 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
|
|||
});
|
||||
|
||||
it('can create an index template with logsdb index mode', async () => {
|
||||
await testSubjects.click('createTemplateButton');
|
||||
// Fill out required fields
|
||||
await testSubjects.setValue('nameField', TEST_TEMPLATE_NAME);
|
||||
await testSubjects.setValue('indexPatternsField', INDEX_PATTERN);
|
||||
|
||||
await testSubjects.click('indexModeField');
|
||||
await testSubjects.click('index_mode_logsdb');
|
||||
|
||||
|
@ -129,5 +126,113 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
|
|||
await testSubjects.click('closeDetailsButton');
|
||||
});
|
||||
});
|
||||
|
||||
describe('Modify index template', () => {
|
||||
const INDEX_TEMPLATE_NAME = 'index-template-test-name';
|
||||
|
||||
before(async () => {
|
||||
await es.indices.putIndexTemplate({
|
||||
name: INDEX_TEMPLATE_NAME,
|
||||
index_patterns: ['logsdb-test-index-pattern'],
|
||||
data_stream: {},
|
||||
template: {
|
||||
settings: {
|
||||
mode: 'logsdb',
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
await testSubjects.click('reloadButton');
|
||||
});
|
||||
|
||||
after(async () => {
|
||||
await es.indices.deleteIndexTemplate({ name: INDEX_TEMPLATE_NAME }, { ignore: [404] });
|
||||
});
|
||||
|
||||
it('can modify ignore_above, ignore_malformed, ignore_dynamic_beyond_limit, subobjects and timestamp format in an index template with logsdb index mode', async () => {
|
||||
await pageObjects.indexManagement.clickIndexTemplateNameLink(INDEX_TEMPLATE_NAME);
|
||||
await testSubjects.click('manageTemplateButton');
|
||||
await testSubjects.click('editIndexTemplateButton');
|
||||
await pageObjects.header.waitUntilLoadingHasFinished();
|
||||
|
||||
// Navigate to Index Settings
|
||||
await testSubjects.click('formWizardStep-2');
|
||||
await pageObjects.header.waitUntilLoadingHasFinished();
|
||||
|
||||
// Modify Index settings
|
||||
await testSubjects.setValue(
|
||||
'kibanaCodeEditor',
|
||||
JSON.stringify({
|
||||
index: {
|
||||
mapping: {
|
||||
ignore_above: '20',
|
||||
total_fields: {
|
||||
ignore_dynamic_beyond_limit: 'true',
|
||||
},
|
||||
ignore_malformed: 'true',
|
||||
},
|
||||
},
|
||||
}),
|
||||
{
|
||||
clearWithKeyboard: true,
|
||||
}
|
||||
);
|
||||
|
||||
// Navigate to Mappings
|
||||
await testSubjects.click('formWizardStep-3');
|
||||
await pageObjects.header.waitUntilLoadingHasFinished();
|
||||
const mappingTabs = await testSubjects.findAll('formTab');
|
||||
await mappingTabs[3].click();
|
||||
|
||||
// Modify timestamp format
|
||||
await testSubjects.click('comboBoxClearButton');
|
||||
await testSubjects.setValue('comboBoxInput', 'basic_date');
|
||||
await testSubjects.pressEnter('comboBoxInput');
|
||||
|
||||
// Modify subobjects
|
||||
await testSubjects.click('subobjectsToggle');
|
||||
|
||||
// Navigate to the last step of the wizard
|
||||
await testSubjects.click('formWizardStep-5');
|
||||
await pageObjects.header.waitUntilLoadingHasFinished();
|
||||
|
||||
// Click Create template
|
||||
await pageObjects.indexManagement.clickNextButton();
|
||||
await pageObjects.header.waitUntilLoadingHasFinished();
|
||||
|
||||
const flyoutTabs = await testSubjects.findAll('tab');
|
||||
|
||||
// Verify Index Settings
|
||||
await flyoutTabs[1].click();
|
||||
await pageObjects.header.waitUntilLoadingHasFinished();
|
||||
expect(await testSubjects.exists('settingsTabContent')).to.be(true);
|
||||
const settingsTabContent = await testSubjects.getVisibleText('settingsTabContent');
|
||||
expect(JSON.parse(settingsTabContent)).to.eql({
|
||||
index: {
|
||||
mode: 'logsdb',
|
||||
mapping: {
|
||||
ignore_above: '20',
|
||||
total_fields: {
|
||||
ignore_dynamic_beyond_limit: 'true',
|
||||
},
|
||||
ignore_malformed: 'true',
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
// Verify Mappings
|
||||
await flyoutTabs[2].click();
|
||||
await pageObjects.header.waitUntilLoadingHasFinished();
|
||||
expect(await testSubjects.exists('mappingsTabContent')).to.be(true);
|
||||
const mappingsTabContent = await testSubjects.getVisibleText('mappingsTabContent');
|
||||
expect(JSON.parse(mappingsTabContent)).to.eql({
|
||||
dynamic_date_formats: ['basic_date'],
|
||||
subobjects: false,
|
||||
});
|
||||
|
||||
// Close detail tab
|
||||
await testSubjects.click('closeDetailsButton');
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue