mirror of
https://github.com/openobserve/openobserve.git
synced 2026-11-04 16:09:05 +00:00
test: join automation updated (#5416)
<!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Added a quick mode toggle button on the Logs Page. - Introduced new methods for validating log displays and error messages. - New test cases to verify the functionality of toggling quick mode and interacting with interesting fields. - **Bug Fixes** - Enhanced test scenarios to ensure correct display of streams and count queries during log searches. - Improved verification of results after executing queries. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
@@ -42,6 +42,7 @@ export class LogsPage {
|
||||
this.streamDropdown = '[data-test="log-search-index-list-select-stream"]';
|
||||
this.queryButton = "[data-test='logs-search-bar-refresh-btn']";
|
||||
this.queryEditor = '[data-test="logs-search-bar-query-editor"]';
|
||||
this.quickModeToggle = '[data-test="logs-search-bar-quick-mode-toggle-btn"]';
|
||||
|
||||
this.profileButton = page.locator('[data-test="header-my-account-profile-icon"]');
|
||||
this.signOutButton = page.getByText('Sign Out');
|
||||
@@ -59,7 +60,7 @@ export class LogsPage {
|
||||
await this.page.locator(this.homeButton).hover();
|
||||
await this.logsMenuItem.click();
|
||||
await this.page.waitForTimeout(3000);
|
||||
// await expect(this.page.locator('[data-test="logs-search-no-stream-selected-text"]')).toContainText('info Select a stream and press \'Run query\' to continue. Additionally, you can apply additional filters and adjust the date range to enhance search.');
|
||||
// await expect(this.page.locator('[data-test="logs-search-no-stream-selected-text"]')).toContainText('info Select a stream and press \'Run query\' to continue. Additionally, you can apply additional filters and adjust the date range to enhance search.');
|
||||
}
|
||||
|
||||
async validateLogsPage() {
|
||||
@@ -71,16 +72,16 @@ export class LogsPage {
|
||||
await this.page.locator('[data-test="navbar-organizations-select"]').getByText('arrow_drop_down').click();
|
||||
await this.page.waitForTimeout(2000);
|
||||
await this.page.getByRole('option', { name: 'defaulttestmulti' }).locator('div').nth(2).click();
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
async logsPageURLValidation() {
|
||||
}
|
||||
|
||||
async logsPageURLValidation() {
|
||||
|
||||
await expect(this.page).toHaveURL(/defaulttestmulti/);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
async selectIndexAndStream() {
|
||||
// Select index and stream
|
||||
@@ -91,10 +92,6 @@ async logsPageURLValidation() {
|
||||
}
|
||||
|
||||
async selectIndexAndStreamJoin() {
|
||||
// Select index and stream
|
||||
//await this.page.locator('[data-test="logs-search-field-list-collapse-btn"]').click();
|
||||
//await this.page.locator('[data-test="logs-search-field-list-collapse-btn"]').click();
|
||||
|
||||
await this.page.locator('[data-test="logs-search-index-list"]').getByText('arrow_drop_down').click();
|
||||
await this.page.waitForTimeout(3000);
|
||||
await this.page.locator('[data-test="log-search-index-list-stream-toggle-default"] div').first().click();
|
||||
@@ -214,7 +211,19 @@ async logsPageURLValidation() {
|
||||
const search = this.page.waitForResponse("**/api/default/_search**");
|
||||
await this.page.waitForTimeout(3000);
|
||||
await this.page.locator(this.queryButton).click({ force: true });
|
||||
await expect.poll(async () => (await search).status()).toBe(200);
|
||||
try {
|
||||
const response = await search;
|
||||
await expect.poll(async () => response.status()).toBe(200);
|
||||
} catch (error) {
|
||||
throw new Error(`Failed to get response: ${error.message}`);
|
||||
}
|
||||
}
|
||||
|
||||
async applyQueryButton(expectedUrl) {
|
||||
const searchResponse = this.page.waitForResponse(expectedUrl);
|
||||
await this.page.waitForTimeout(3000);
|
||||
await this.page.locator(this.queryButton).click({ force: true });
|
||||
await expect.poll(async () => (await searchResponse).status()).toBe(200);
|
||||
}
|
||||
|
||||
async clearAndRunQuery() {
|
||||
@@ -235,60 +244,132 @@ async logsPageURLValidation() {
|
||||
await this.page.locator('[data-test="logs-search-subfield-add-kubernetes_container_name-ziox"] [data-test="log-search-subfield-list-equal-kubernetes_container_name-field-btn"]').click();
|
||||
|
||||
}
|
||||
|
||||
|
||||
async kubernetesContainerNameJoin() {
|
||||
await this.page
|
||||
.locator('[data-test="logs-search-bar-query-editor"]')
|
||||
.getByLabel("Editor content;Press Alt+F1")
|
||||
.fill('SELECT a.kubernetes_container_name , b.kubernetes_container_name FROM "default" as a join "e2e_automate" as b on a.kubernetes_container_name = b.kubernetes_container_name');
|
||||
.locator('[data-test="logs-search-bar-query-editor"]')
|
||||
.getByLabel("Editor content;Press Alt+F1")
|
||||
.fill('SELECT a.kubernetes_container_name , b.kubernetes_container_name FROM "default" as a join "e2e_automate" as b on a.kubernetes_container_name = b.kubernetes_container_name');
|
||||
await this.page.waitForTimeout(5000);
|
||||
}
|
||||
|
||||
async kubernetesContainerNameJoinLimit() {
|
||||
await this.page
|
||||
.locator('[data-test="logs-search-bar-query-editor"]')
|
||||
.getByLabel("Editor content;Press Alt+F1")
|
||||
.fill('SELECT a.kubernetes_container_name , b.kubernetes_container_name FROM "default" as a join "e2e_automate" as b on a.kubernetes_container_name = b.kubernetes_container_name LIMIT 10');
|
||||
.locator('[data-test="logs-search-bar-query-editor"]')
|
||||
.getByLabel("Editor content;Press Alt+F1")
|
||||
.fill('SELECT a.kubernetes_container_name , b.kubernetes_container_name FROM "default" as a join "e2e_automate" as b on a.kubernetes_container_name = b.kubernetes_container_name LIMIT 10');
|
||||
await this.page.waitForTimeout(5000);
|
||||
}
|
||||
|
||||
|
||||
async kubernetesContainerNameJoinLike() {
|
||||
await this.page
|
||||
.locator('[data-test="logs-search-bar-query-editor"]')
|
||||
.getByLabel("Editor content;Press Alt+F1")
|
||||
.fill('SELECT a.kubernetes_container_name , b.kubernetes_container_name FROM "default" as a join "e2e_automate" as b on a.kubernetes_container_name = b.kubernetes_container_name WHERE a.kubernetes_container_name LIKE "%ziox%"');
|
||||
.locator('[data-test="logs-search-bar-query-editor"]')
|
||||
.getByLabel("Editor content;Press Alt+F1")
|
||||
.fill('SELECT a.kubernetes_container_name , b.kubernetes_container_name FROM "default" as a join "e2e_automate" as b on a.kubernetes_container_name = b.kubernetes_container_name WHERE a.kubernetes_container_name LIKE "%ziox%"');
|
||||
await this.page.waitForTimeout(5000);
|
||||
}
|
||||
|
||||
async kubernetesContainerNameLeftJoin() {
|
||||
await this.page
|
||||
.locator('[data-test="logs-search-bar-query-editor"]')
|
||||
.getByLabel("Editor content;Press Alt+F1")
|
||||
.fill('SELECT a.kubernetes_container_name , b.kubernetes_container_name FROM "default" as a LEFT JOIN "e2e_automate" as b on a.kubernetes_container_name = b.kubernetes_container_name');
|
||||
.locator('[data-test="logs-search-bar-query-editor"]')
|
||||
.getByLabel("Editor content;Press Alt+F1")
|
||||
.fill('SELECT a.kubernetes_container_name , b.kubernetes_container_name FROM "default" as a LEFT JOIN "e2e_automate" as b on a.kubernetes_container_name = b.kubernetes_container_name');
|
||||
await this.page.waitForTimeout(5000);
|
||||
}
|
||||
|
||||
async kubernetesContainerNameRightJoin() {
|
||||
await this.page
|
||||
.locator('[data-test="logs-search-bar-query-editor"]')
|
||||
.getByLabel("Editor content;Press Alt+F1")
|
||||
.fill('SELECT a.kubernetes_container_name , b.kubernetes_container_name FROM "default" as a RIGHT JOIN "e2e_automate" as b on a.kubernetes_container_name = b.kubernetes_container_name');
|
||||
.locator('[data-test="logs-search-bar-query-editor"]')
|
||||
.getByLabel("Editor content;Press Alt+F1")
|
||||
.fill('SELECT a.kubernetes_container_name , b.kubernetes_container_name FROM "default" as a RIGHT JOIN "e2e_automate" as b on a.kubernetes_container_name = b.kubernetes_container_name');
|
||||
await this.page.waitForTimeout(5000);
|
||||
}
|
||||
|
||||
async kubernetesContainerNameFullJoin() {
|
||||
await this.page
|
||||
.locator('[data-test="logs-search-bar-query-editor"]')
|
||||
.getByLabel("Editor content;Press Alt+F1")
|
||||
.fill('SELECT a.kubernetes_container_name , b.kubernetes_container_name FROM "default" as a FULL JOIN "e2e_automate" as b on a.kubernetes_container_name = b.kubernetes_container_name');
|
||||
.locator('[data-test="logs-search-bar-query-editor"]')
|
||||
.getByLabel("Editor content;Press Alt+F1")
|
||||
.fill('SELECT a.kubernetes_container_name , b.kubernetes_container_name FROM "default" as a FULL JOIN "e2e_automate" as b on a.kubernetes_container_name = b.kubernetes_container_name');
|
||||
await this.page.waitForTimeout(5000);
|
||||
}
|
||||
|
||||
async displayCountQuery() {
|
||||
await this.page.waitForTimeout(4000);
|
||||
await expect(this.page.getByRole('heading', { name: 'Error while fetching' })).not.toBeVisible();
|
||||
}
|
||||
|
||||
async validateResult() {
|
||||
await this.page.waitForTimeout(10000);
|
||||
await expect(this.page.locator('[data-test="logs-search-search-result"]')).toBeVisible();
|
||||
await this.page.locator('td[data-test="log-table-column-0-source"]').nth(0).click();
|
||||
await expect(this.page.locator('[data-test="log-expand-detail-key-kubernetes_container_name-text"]')).toBeVisible();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
async signOut() {
|
||||
await this.profileButton.click();
|
||||
await this.signOutButton.click();
|
||||
}
|
||||
|
||||
async displayTwoStreams() {
|
||||
await expect(this.page.locator('[data-test="logs-search-index-list"]')).toContainText('default, e2e_automate');
|
||||
}
|
||||
|
||||
async verifyQuickModeToggle() {
|
||||
await expect(this.page.locator(this.quickModeToggle)).toBeVisible();
|
||||
}
|
||||
|
||||
async clickQuickModeToggle() {
|
||||
|
||||
await this.page.waitForSelector('[data-test="logs-search-bar-quick-mode-toggle-btn"]');
|
||||
// Get the toggle button element
|
||||
const toggleButton = await this.page.$('[data-test="logs-search-bar-quick-mode-toggle-btn"] > .q-toggle__inner');
|
||||
// Evaluate the class attribute to determine if the toggle is in the off state
|
||||
const isSwitchedOff = await toggleButton.evaluate(node => node.classList.contains('q-toggle__inner--falsy'));
|
||||
// If the toggle is switched off, click on it to switch it on
|
||||
if (isSwitchedOff) {
|
||||
await toggleButton.click();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
async clickInterestingFields() {
|
||||
|
||||
await this.page.locator('[data-cy="index-field-search-input"]').fill("kubernetes_container_name");
|
||||
await this.page.waitForTimeout(2000);
|
||||
await this.page.locator('[data-test="log-search-index-list-interesting-kubernetes_container_name-field-btn"]').first().click();
|
||||
await this.page.waitForTimeout(2000);
|
||||
}
|
||||
|
||||
async validateInterestingFields() {
|
||||
await expect(this.page.locator('[data-test="logs-search-bar-query-editor"]').getByText(/kubernetes_container_name/).first()).toBeVisible();
|
||||
}
|
||||
|
||||
async validateInterestingFieldsQuery() {
|
||||
await this.page.waitForSelector('[data-test="logs-search-bar-query-editor"]');
|
||||
await expect(this.page.locator('[data-test="logs-search-bar-query-editor"]').locator('text=kubernetes_container_name FROM "default"')
|
||||
).toBeVisible();
|
||||
}
|
||||
|
||||
async addRemoveInteresting() {
|
||||
|
||||
await this.page.locator('[data-cy="index-field-search-input"]').clear();
|
||||
await this.page.locator('[data-cy="index-field-search-input"]').fill("job");
|
||||
await this.page.waitForTimeout(2000);
|
||||
await this.page.locator('[data-test="log-search-index-list-interesting-job-field-btn"]').last().click({force: true,});
|
||||
await this.page.locator('[data-cy="search-bar-refresh-button"] > .q-btn__content').click({force: true,});
|
||||
await this.page.locator('[data-test="log-search-index-list-interesting-job-field-btn"]').last().click({force: true, });
|
||||
await expect(this.page.locator('[data-test="logs-search-bar-query-editor"]')).not.toHaveText(/job/);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ import { LoginPage } from '../pages/loginPage';
|
||||
import { LogsPage } from '../pages/logsPage.js';
|
||||
import { IngestionPage } from '../pages/ingestionPage';
|
||||
|
||||
test.describe.configure({ mode: 'parallel' });
|
||||
|
||||
test.describe("Join for logs", () => {
|
||||
let loginPage, logsPage, ingestionPage;
|
||||
@@ -12,6 +13,7 @@ test.describe("Join for logs", () => {
|
||||
ingestionPage = new IngestionPage(page);
|
||||
logsPage = new LogsPage(page);
|
||||
await loginPage.gotoLoginPage();
|
||||
// await loginPage.loginAsInternalUser();
|
||||
await loginPage.login(); // Login as root user
|
||||
await ingestionPage.ingestion();
|
||||
await ingestionPage.ingestionJoin();
|
||||
@@ -21,8 +23,9 @@ test.describe("Join for logs", () => {
|
||||
|
||||
await logsPage.navigateToLogs();
|
||||
await logsPage.selectIndexAndStreamJoin();
|
||||
await logsPage.displayTwoStreams();
|
||||
await logsPage.selectRunQuery();
|
||||
await logsPage.signOut();
|
||||
|
||||
|
||||
});
|
||||
|
||||
@@ -32,7 +35,8 @@ test.describe("Join for logs", () => {
|
||||
await logsPage.selectIndexAndStreamJoin();
|
||||
await logsPage.enableSQLMode();
|
||||
await logsPage.selectRunQuery();
|
||||
await logsPage.signOut();
|
||||
await logsPage.displayTwoStreams();
|
||||
|
||||
|
||||
});
|
||||
|
||||
@@ -43,7 +47,8 @@ test.describe("Join for logs", () => {
|
||||
await logsPage.kubernetesContainerName();
|
||||
await logsPage.enableSQLMode();
|
||||
await logsPage.selectRunQuery();
|
||||
await logsPage.signOut();
|
||||
await logsPage.validateResult();
|
||||
|
||||
|
||||
});
|
||||
|
||||
@@ -54,7 +59,9 @@ test.describe("Join for logs", () => {
|
||||
await logsPage.kubernetesContainerNameJoin();
|
||||
await logsPage.enableSQLMode();
|
||||
await logsPage.selectRunQuery();
|
||||
await logsPage.signOut();
|
||||
await logsPage.displayCountQuery();
|
||||
await logsPage.validateResult();
|
||||
|
||||
|
||||
});
|
||||
|
||||
@@ -65,7 +72,8 @@ test.describe("Join for logs", () => {
|
||||
await logsPage.kubernetesContainerNameJoinLimit();
|
||||
await logsPage.enableSQLMode();
|
||||
await logsPage.selectRunQuery();
|
||||
await logsPage.signOut();
|
||||
await logsPage.validateResult();
|
||||
|
||||
|
||||
});
|
||||
|
||||
@@ -76,7 +84,8 @@ test.describe("Join for logs", () => {
|
||||
await logsPage.kubernetesContainerNameJoinLike();
|
||||
await logsPage.enableSQLMode();
|
||||
await logsPage.selectRunQuery();
|
||||
await logsPage.signOut();
|
||||
|
||||
|
||||
|
||||
});
|
||||
|
||||
@@ -87,7 +96,8 @@ test.describe("Join for logs", () => {
|
||||
await logsPage.kubernetesContainerNameLeftJoin();
|
||||
await logsPage.enableSQLMode();
|
||||
await logsPage.selectRunQuery();
|
||||
await logsPage.signOut();
|
||||
await logsPage.validateResult();
|
||||
|
||||
|
||||
});
|
||||
|
||||
@@ -98,7 +108,8 @@ test.describe("Join for logs", () => {
|
||||
await logsPage.kubernetesContainerNameRightJoin();
|
||||
await logsPage.enableSQLMode();
|
||||
await logsPage.selectRunQuery();
|
||||
await logsPage.signOut();
|
||||
await logsPage.validateResult();
|
||||
|
||||
|
||||
});
|
||||
|
||||
@@ -109,7 +120,42 @@ test.describe("Join for logs", () => {
|
||||
await logsPage.kubernetesContainerNameFullJoin();
|
||||
await logsPage.enableSQLMode();
|
||||
await logsPage.selectRunQuery();
|
||||
await logsPage.signOut();
|
||||
await logsPage.validateResult();
|
||||
|
||||
|
||||
});
|
||||
|
||||
test("Click on interesting field icon and display field in editor", async ({ page }) => {
|
||||
|
||||
await logsPage.navigateToLogs();
|
||||
await logsPage.selectIndexAndStreamJoin();
|
||||
await logsPage.enableSQLMode();
|
||||
await logsPage.clickQuickModeToggle();
|
||||
await logsPage.selectRunQuery();
|
||||
await logsPage.clickInterestingFields();
|
||||
await logsPage.validateInterestingFields();
|
||||
});
|
||||
|
||||
test("Click on interesting field icon and display query in editor", async ({ page }) => {
|
||||
|
||||
await logsPage.navigateToLogs();
|
||||
await logsPage.selectIndexAndStreamJoin();
|
||||
await logsPage.enableSQLMode();
|
||||
await logsPage.clickQuickModeToggle();
|
||||
await logsPage.selectRunQuery();
|
||||
await logsPage.clickInterestingFields();
|
||||
await logsPage.validateInterestingFieldsQuery();
|
||||
});
|
||||
|
||||
test("Add/remove interesting field removes it from editor and results too", async ({ page }) => {
|
||||
|
||||
await logsPage.navigateToLogs();
|
||||
await logsPage.selectIndexAndStreamJoin();
|
||||
await logsPage.enableSQLMode();
|
||||
await logsPage.clickQuickModeToggle();
|
||||
await logsPage.selectRunQuery();
|
||||
await logsPage.clickInterestingFields();
|
||||
await logsPage.addRemoveInteresting();
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user