mirror of https://github.com/apache/druid.git
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:
parent
65c0d64676
commit
1c77491da6
|
@ -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(
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue