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.
This commit is contained in:
Chi Cao Minh 2020-10-04 00:06:07 -07:00 committed by GitHub
parent 65c0d64676
commit 1c77491da6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 40 additions and 15 deletions

View File

@ -16,7 +16,6 @@
* limitations under the License.
*/
import axios from 'axios';
import path from 'path';
import * as playwright from 'playwright-chromium';
@ -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(

View File

@ -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.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();
}
}