You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@druid.apache.org by ji...@apache.org on 2021/03/23 22:50:33 UTC
[druid] 02/02: Test UI to trigger auto compaction (#10469)
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 <ch...@imply.io>
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: commits-unsubscribe@druid.apache.org
For additional commands, e-mail: commits-help@druid.apache.org