This is an automated email from the ASF dual-hosted git repository. jihoonson pushed a commit to branch 0.20.2 in repository https://gitbox.apache.org/repos/asf/druid.git
commit 2016b52abbff68c5e7f4583640a02dc9fb7cb054 Author: Chi Cao Minh <[email protected]> AuthorDate: Sun Oct 4 00:06:07 2020 -0700 Test UI to trigger auto compaction (#10469) In the web console E2E tests, Use the new UI to trigger auto compaction instead of calling the REST API directly so that the UI is covered by tests. --- web-console/e2e-tests/auto-compaction.spec.ts | 21 +++++++------ .../e2e-tests/component/datasources/overview.ts | 36 ++++++++++++++++++---- 2 files changed, 41 insertions(+), 16 deletions(-) diff --git a/web-console/e2e-tests/auto-compaction.spec.ts b/web-console/e2e-tests/auto-compaction.spec.ts index 68cd00b..496e56a 100644 --- a/web-console/e2e-tests/auto-compaction.spec.ts +++ b/web-console/e2e-tests/auto-compaction.spec.ts @@ -16,7 +16,6 @@ * limitations under the License. */ -import axios from 'axios'; import path from 'path'; import * as playwright from 'playwright-core'; @@ -25,7 +24,6 @@ import { Datasource } from './component/datasources/datasource'; import { DatasourcesOverview } from './component/datasources/overview'; import { HashedPartitionsSpec } from './component/load-data/config/partition'; import { saveScreenshotIfError } from './util/debug'; -import { COORDINATOR_URL } from './util/druid'; import { DRUID_EXAMPLES_QUICKSTART_TUTORIAL_DIR } from './util/druid'; import { UNIFIED_CONSOLE_URL } from './util/druid'; import { runIndexTask } from './util/druid'; @@ -77,7 +75,7 @@ describe('Auto-compaction', () => { // need several iterations if several time chunks need compaction let currNumSegment = uncompactedNumSegment; await retryIfJestAssertionError(async () => { - await triggerCompaction(); + await triggerCompaction(page); currNumSegment = await waitForCompaction(page, datasourceName, currNumSegment); const compactedNumSegment = 2; @@ -127,15 +125,18 @@ async function configureCompaction( const datasourcesOverview = new DatasourcesOverview(page, UNIFIED_CONSOLE_URL); await datasourcesOverview.setCompactionConfiguration(datasourceName, compactionConfig); - const savedCompactionConfig = await datasourcesOverview.getCompactionConfiguration( - datasourceName, - ); - expect(savedCompactionConfig).toEqual(compactionConfig); + // Saving the compaction config is not instantaneous + await retryIfJestAssertionError(async () => { + const savedCompactionConfig = await datasourcesOverview.getCompactionConfiguration( + datasourceName, + ); + expect(savedCompactionConfig).toEqual(compactionConfig); + }); } -async function triggerCompaction() { - const res = await axios.post(`${COORDINATOR_URL}/druid/coordinator/v1/compaction/compact`); - expect(res.status).toBe(200); +async function triggerCompaction(page: playwright.Page) { + const datasourcesOverview = new DatasourcesOverview(page, UNIFIED_CONSOLE_URL); + await datasourcesOverview.triggerCompaction(); } async function waitForCompaction( diff --git a/web-console/e2e-tests/component/datasources/overview.ts b/web-console/e2e-tests/component/datasources/overview.ts index 11f44b4..397f514 100644 --- a/web-console/e2e-tests/component/datasources/overview.ts +++ b/web-console/e2e-tests/component/datasources/overview.ts @@ -44,7 +44,6 @@ enum DatasourceColumn { ACTIONS, } -const EDIT_COMPACTION_CONFIGURATION = 'Edit compaction configuration'; const SKIP_OFFSET_FROM_LATEST = 'Skip offset from latest'; /** @@ -83,9 +82,8 @@ export class DatasourcesOverview { datasourceName: string, compactionConfig: CompactionConfig, ): Promise<void> { - await this.openEditActions(datasourceName); + await this.openCompactionConfigurationDialog(datasourceName); - await this.page.click(`"${EDIT_COMPACTION_CONFIGURATION}"`); await setLabeledInput( this.page, SKIP_OFFSET_FROM_LATEST, @@ -96,10 +94,20 @@ export class DatasourcesOverview { await clickButton(this.page, 'Submit'); } - async getCompactionConfiguration(datasourceName: string): Promise<CompactionConfig> { + private async openCompactionConfigurationDialog(datasourceName: string): Promise<void> { await this.openEditActions(datasourceName); + await this.clickMenuItem('Edit compaction configuration'); + await this.page.waitForSelector('div.compaction-dialog'); + } + + private async clickMenuItem(text: string): Promise<void> { + const menuItemSelector = `//a[*[contains(text(),"${text}")]]`; + await this.page.click(menuItemSelector); + } + + async getCompactionConfiguration(datasourceName: string): Promise<CompactionConfig> { + await this.openCompactionConfigurationDialog(datasourceName); - await this.page.click(`"${EDIT_COMPACTION_CONFIGURATION}"`); const skipOffsetFromLatest = await getLabeledInput(this.page, SKIP_OFFSET_FROM_LATEST); const partitionsSpec = await readPartitionSpec(this.page); @@ -116,6 +124,22 @@ export class DatasourcesOverview { const editActions = await this.page.$$('span[icon=wrench]'); editActions[index].click(); - await this.page.waitFor('ul.bp3-menu'); + await this.waitForPopupMenu(); + } + + private async waitForPopupMenu(): Promise<void> { + await this.page.waitForSelector('ul.bp3-menu'); + } + + async triggerCompaction(): Promise<void> { + await this.page.goto(this.baseUrl); + await this.clickMoreButton({ modifiers: ['Alt'] }); + await this.clickMenuItem('Force compaction run'); + await clickButton(this.page, 'Force compaction run'); + } + + private async clickMoreButton(options: any): Promise<void> { + await this.page.click('//button[span[@icon="more"]]', options); + await this.waitForPopupMenu(); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
