From 0078e7553068a415734b6af67f1bbec0dc106de9 Mon Sep 17 00:00:00 2001 From: Walter Rafelsberger Date: Tue, 25 Apr 2023 14:22:22 +0200 Subject: [PATCH 1/4] empty the search bar input before adding new content --- x-pack/test/functional/apps/aiops/explain_log_rate_spikes.ts | 2 +- .../services/aiops/explain_log_rate_spikes_page.ts | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/x-pack/test/functional/apps/aiops/explain_log_rate_spikes.ts b/x-pack/test/functional/apps/aiops/explain_log_rate_spikes.ts index 7731eea1d9d7a..867dc7e62f2fa 100644 --- a/x-pack/test/functional/apps/aiops/explain_log_rate_spikes.ts +++ b/x-pack/test/functional/apps/aiops/explain_log_rate_spikes.ts @@ -234,7 +234,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { } // FLAKY: https://github.com/elastic/kibana/issues/155222 - describe.skip('explain log rate spikes', async function () { + describe('explain log rate spikes', async function () { for (const testData of explainLogRateSpikesTestData) { describe(`with '${testData.sourceIndexOrSavedSearch}'`, function () { before(async () => { diff --git a/x-pack/test/functional/services/aiops/explain_log_rate_spikes_page.ts b/x-pack/test/functional/services/aiops/explain_log_rate_spikes_page.ts index 736437a1d3976..420c6c505f300 100644 --- a/x-pack/test/functional/services/aiops/explain_log_rate_spikes_page.ts +++ b/x-pack/test/functional/services/aiops/explain_log_rate_spikes_page.ts @@ -47,6 +47,11 @@ export function ExplainLogRateSpikesPageProvider({ async setQueryInput(query: string) { const aiopsQueryInput = await testSubjects.find('aiopsQueryInput'); + + await aiopsQueryInput.clearValueWithKeyboard(); + const queryBarEmpty = await aiopsQueryInput.getVisibleText(); + expect(queryBarEmpty).to.eql('', `Expected query bar to be emptied, got '${queryBarEmpty}'`); + await aiopsQueryInput.type(query); await aiopsQueryInput.pressKeys(browser.keys.ENTER); await header.waitUntilLoadingHasFinished(); From f8febed16cabbecf1b277409bf96ce14e2d28253 Mon Sep 17 00:00:00 2001 From: Walter Rafelsberger Date: Tue, 25 Apr 2023 15:03:09 +0200 Subject: [PATCH 2/4] adds retry to set query input --- .../aiops/explain_log_rate_spikes_page.ts | 33 +++++++++++-------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/x-pack/test/functional/services/aiops/explain_log_rate_spikes_page.ts b/x-pack/test/functional/services/aiops/explain_log_rate_spikes_page.ts index 420c6c505f300..99538441be7cb 100644 --- a/x-pack/test/functional/services/aiops/explain_log_rate_spikes_page.ts +++ b/x-pack/test/functional/services/aiops/explain_log_rate_spikes_page.ts @@ -46,20 +46,25 @@ export function ExplainLogRateSpikesPageProvider({ }, async setQueryInput(query: string) { - const aiopsQueryInput = await testSubjects.find('aiopsQueryInput'); - - await aiopsQueryInput.clearValueWithKeyboard(); - const queryBarEmpty = await aiopsQueryInput.getVisibleText(); - expect(queryBarEmpty).to.eql('', `Expected query bar to be emptied, got '${queryBarEmpty}'`); - - await aiopsQueryInput.type(query); - await aiopsQueryInput.pressKeys(browser.keys.ENTER); - await header.waitUntilLoadingHasFinished(); - const queryBarText = await aiopsQueryInput.getVisibleText(); - expect(queryBarText).to.eql( - query, - `Expected query bar text to be '${query}' (got '${queryBarText}')` - ); + await retry.tryForTime(30 * 1000, async () => { + const aiopsQueryInput = await testSubjects.find('aiopsQueryInput'); + + await aiopsQueryInput.clearValueWithKeyboard(); + const queryBarEmpty = await aiopsQueryInput.getVisibleText(); + expect(queryBarEmpty).to.eql( + '', + `Expected query bar to be emptied, got '${queryBarEmpty}'` + ); + + await aiopsQueryInput.type(query); + await aiopsQueryInput.pressKeys(browser.keys.ENTER); + await header.waitUntilLoadingHasFinished(); + const queryBarText = await aiopsQueryInput.getVisibleText(); + expect(queryBarText).to.eql( + query, + `Expected query bar text to be '${query}' (got '${queryBarText}')` + ); + }); }, async assertSamplingProbabilityMissing() { From 9af0759d4111a61e1152aafce8d4d3787d4e2c08 Mon Sep 17 00:00:00 2001 From: Walter Rafelsberger Date: Tue, 25 Apr 2023 16:13:22 +0200 Subject: [PATCH 3/4] test grouping only when sampling is not used. --- .../apps/aiops/explain_log_rate_spikes.ts | 114 +++++++++--------- 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/x-pack/test/functional/apps/aiops/explain_log_rate_spikes.ts b/x-pack/test/functional/apps/aiops/explain_log_rate_spikes.ts index 867dc7e62f2fa..b395608863fd2 100644 --- a/x-pack/test/functional/apps/aiops/explain_log_rate_spikes.ts +++ b/x-pack/test/functional/apps/aiops/explain_log_rate_spikes.ts @@ -155,80 +155,80 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { // The group switch should be disabled by default await aiops.explainLogRateSpikesPage.assertSpikeAnalysisGroupSwitchExists(false); - // Enabled grouping - await aiops.explainLogRateSpikesPage.clickSpikeAnalysisGroupSwitch(false); + if (!isTestDataExpectedWithSampleProbability(testData.expected)) { + // Enabled grouping + await aiops.explainLogRateSpikesPage.clickSpikeAnalysisGroupSwitch(false); - await aiops.explainLogRateSpikesAnalysisGroupsTable.assertSpikeAnalysisTableExists(); + await aiops.explainLogRateSpikesAnalysisGroupsTable.assertSpikeAnalysisTableExists(); - if (!isTestDataExpectedWithSampleProbability(testData.expected)) { const analysisGroupsTable = await aiops.explainLogRateSpikesAnalysisGroupsTable.parseAnalysisTable(); expect(orderBy(analysisGroupsTable, 'group')).to.be.eql( orderBy(testData.expected.analysisGroupsTable, 'group') ); - } - - await ml.testExecution.logTestStep('expand table row'); - await aiops.explainLogRateSpikesAnalysisGroupsTable.assertExpandRowButtonExists(); - await aiops.explainLogRateSpikesAnalysisGroupsTable.expandRow(); - - if (!isTestDataExpectedWithSampleProbability(testData.expected)) { - const analysisTable = await aiops.explainLogRateSpikesAnalysisTable.parseAnalysisTable(); - expect(orderBy(analysisTable, ['fieldName', 'fieldValue'])).to.be.eql( - orderBy(testData.expected.analysisTable, ['fieldName', 'fieldValue']) - ); - } - - await ml.testExecution.logTestStep('open the field filter'); - await aiops.explainLogRateSpikesPage.assertFieldFilterPopoverButtonExists(false); - await aiops.explainLogRateSpikesPage.clickFieldFilterPopoverButton(true); - await aiops.explainLogRateSpikesPage.assertFieldSelectorFieldNameList( - testData.expected.fieldSelectorPopover - ); - await ml.testExecution.logTestStep('filter fields'); - await aiops.explainLogRateSpikesPage.setFieldSelectorSearch(testData.fieldSelectorSearch); - await aiops.explainLogRateSpikesPage.assertFieldSelectorFieldNameList([ - testData.fieldSelectorSearch, - ]); - await aiops.explainLogRateSpikesPage.clickFieldSelectorDisableAllSelectedButton(); - await aiops.explainLogRateSpikesPage.assertFieldFilterApplyButtonExists( - !testData.fieldSelectorApplyAvailable - ); - - if (testData.fieldSelectorApplyAvailable) { - await ml.testExecution.logTestStep('regroup results'); - await aiops.explainLogRateSpikesPage.clickFieldFilterApplyButton(); + await ml.testExecution.logTestStep('expand table row'); + await aiops.explainLogRateSpikesAnalysisGroupsTable.assertExpandRowButtonExists(); + await aiops.explainLogRateSpikesAnalysisGroupsTable.expandRow(); if (!isTestDataExpectedWithSampleProbability(testData.expected)) { - const filteredAnalysisGroupsTable = - await aiops.explainLogRateSpikesAnalysisGroupsTable.parseAnalysisTable(); - expect(orderBy(filteredAnalysisGroupsTable, 'group')).to.be.eql( - orderBy(testData.expected.filteredAnalysisGroupsTable, 'group') + const analysisTable = await aiops.explainLogRateSpikesAnalysisTable.parseAnalysisTable(); + expect(orderBy(analysisTable, ['fieldName', 'fieldValue'])).to.be.eql( + orderBy(testData.expected.analysisTable, ['fieldName', 'fieldValue']) ); } - } - if (testData.action !== undefined) { - await ml.testExecution.logTestStep('check all table row actions are present'); - await aiops.explainLogRateSpikesAnalysisGroupsTable.assertRowActions( - testData.action.tableRowId + await ml.testExecution.logTestStep('open the field filter'); + await aiops.explainLogRateSpikesPage.assertFieldFilterPopoverButtonExists(false); + await aiops.explainLogRateSpikesPage.clickFieldFilterPopoverButton(true); + await aiops.explainLogRateSpikesPage.assertFieldSelectorFieldNameList( + testData.expected.fieldSelectorPopover ); - await ml.testExecution.logTestStep('click log pattern analysis action'); - await aiops.explainLogRateSpikesAnalysisGroupsTable.clickRowAction( - testData.action.tableRowId, - testData.action.type + await ml.testExecution.logTestStep('filter fields'); + await aiops.explainLogRateSpikesPage.setFieldSelectorSearch(testData.fieldSelectorSearch); + await aiops.explainLogRateSpikesPage.assertFieldSelectorFieldNameList([ + testData.fieldSelectorSearch, + ]); + await aiops.explainLogRateSpikesPage.clickFieldSelectorDisableAllSelectedButton(); + await aiops.explainLogRateSpikesPage.assertFieldFilterApplyButtonExists( + !testData.fieldSelectorApplyAvailable ); - await ml.testExecution.logTestStep('check log pattern analysis page loaded correctly'); - await aiops.logPatternAnalysisPageProvider.assertLogCategorizationPageExists(); - await aiops.logPatternAnalysisPageProvider.assertTotalDocumentCount( - testData.action.expected.totalDocCount - ); - await aiops.logPatternAnalysisPageProvider.assertQueryInput( - testData.action.expected.queryBar - ); + if (testData.fieldSelectorApplyAvailable) { + await ml.testExecution.logTestStep('regroup results'); + await aiops.explainLogRateSpikesPage.clickFieldFilterApplyButton(); + + if (!isTestDataExpectedWithSampleProbability(testData.expected)) { + const filteredAnalysisGroupsTable = + await aiops.explainLogRateSpikesAnalysisGroupsTable.parseAnalysisTable(); + expect(orderBy(filteredAnalysisGroupsTable, 'group')).to.be.eql( + orderBy(testData.expected.filteredAnalysisGroupsTable, 'group') + ); + } + } + + if (testData.action !== undefined) { + await ml.testExecution.logTestStep('check all table row actions are present'); + await aiops.explainLogRateSpikesAnalysisGroupsTable.assertRowActions( + testData.action.tableRowId + ); + + await ml.testExecution.logTestStep('click log pattern analysis action'); + await aiops.explainLogRateSpikesAnalysisGroupsTable.clickRowAction( + testData.action.tableRowId, + testData.action.type + ); + + await ml.testExecution.logTestStep('check log pattern analysis page loaded correctly'); + await aiops.logPatternAnalysisPageProvider.assertLogCategorizationPageExists(); + await aiops.logPatternAnalysisPageProvider.assertTotalDocumentCount( + testData.action.expected.totalDocCount + ); + await aiops.logPatternAnalysisPageProvider.assertQueryInput( + testData.action.expected.queryBar + ); + } } }); } From 2a4b75abdf0b36b94e79277d0e8ae4f719e6bc43 Mon Sep 17 00:00:00 2001 From: Walter Rafelsberger Date: Wed, 26 Apr 2023 09:06:46 +0200 Subject: [PATCH 4/4] Remove comment about flakyness. --- x-pack/test/functional/apps/aiops/explain_log_rate_spikes.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/x-pack/test/functional/apps/aiops/explain_log_rate_spikes.ts b/x-pack/test/functional/apps/aiops/explain_log_rate_spikes.ts index b395608863fd2..52985cc799597 100644 --- a/x-pack/test/functional/apps/aiops/explain_log_rate_spikes.ts +++ b/x-pack/test/functional/apps/aiops/explain_log_rate_spikes.ts @@ -233,7 +233,6 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); } - // FLAKY: https://github.com/elastic/kibana/issues/155222 describe('explain log rate spikes', async function () { for (const testData of explainLogRateSpikesTestData) { describe(`with '${testData.sourceIndexOrSavedSearch}'`, function () {