mirror of
https://github.com/openobserve/openobserve.git
synced 2026-11-04 16:09:05 +00:00
### **PR Type** Tests ___ ### **Description** - Add Playwright pagination streaming tests - match_all, count, limit queries - various join types - Validate interesting fields toggles and queries - Test histogram toggle behaviors and no-data cases ___ ### **Changes walkthrough** 📝 <table><thead><tr><th></th><th align="left">Relevant files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><table> <tr> <td> <details> <summary><strong>pagination.spec.js</strong><dd><code>Add streaming pagination and behavior tests</code> </dd></summary> <hr> tests/ui-testing/playwright-tests/pagination.spec.js <li>Imported base fixtures and page objects<br> <li> Setup login, ingestion, management before tests<br> <li> Added tests for streaming pagination queries<br> <li> Added join, interesting-fields, histogram behavior tests </details> </td> <td><a href="https://github.com/openobserve/openobserve/pull/7268/files#diff-5e44451149ef320c6c78668ff2a42a152fdc7b0565838c8d7f7385f5d4809cb5">+199/-0</a> </td> </tr> </table></td></tr></tr></tbody></table> ___ > <details> <summary> Need help?</summary><li>Type <code>/help how to ...</code> in the comments thread for any questions about PR-Agent usage.</li><li>Check out the <a href="https://qodo-merge-docs.qodo.ai/usage-guide/">documentation</a> for more information.</li></details>
224 lines
8.3 KiB
JavaScript
224 lines
8.3 KiB
JavaScript
import { test, expect } from "./baseFixtures";
|
|
import { LoginPage } from '../pages/loginPage';
|
|
import { LogsPage } from '../pages/logsPage.js';
|
|
import { IngestionPage } from '../pages/ingestionPage';
|
|
import { ManagementPage } from '../pages/managementPage';
|
|
|
|
|
|
|
|
test.describe.configure({ mode: 'parallel' });
|
|
|
|
test.describe("Websocket for logs", () => {
|
|
let loginPage, logsPage, ingestionPage, managementPage;
|
|
|
|
test.beforeEach(async ({ page }) => {
|
|
loginPage = new LoginPage(page);
|
|
ingestionPage = new IngestionPage(page);
|
|
logsPage = new LogsPage(page);
|
|
managementPage = new ManagementPage(page);
|
|
await loginPage.gotoLoginPage();
|
|
await loginPage.loginAsInternalUser();
|
|
await loginPage.login(); // Login as root user
|
|
await ingestionPage.ingestion();
|
|
await ingestionPage.ingestionJoin();
|
|
await managementPage.goToManagement();
|
|
await page.waitForTimeout(5000);
|
|
await managementPage.checkAndEnableWebSocket();
|
|
});
|
|
|
|
test.skip("Run query after selecting two streams after enabling websocket", async ({ page }) => {
|
|
|
|
// If using CommonJS
|
|
// const managementPage = require('../pages/managementPage');
|
|
|
|
|
|
await logsPage.navigateToLogs();
|
|
await logsPage.selectIndexAndStreamJoin();
|
|
await logsPage.displayTwoStreams();
|
|
await logsPage.selectRunQuery();
|
|
|
|
|
|
});
|
|
|
|
test.skip("Enable Websocket for running query after selecting two streams and SQL Mode On", async ({ page }) => {
|
|
|
|
await logsPage.navigateToLogs();
|
|
await logsPage.selectIndexAndStreamJoin();
|
|
await logsPage.enableSQLMode();
|
|
await logsPage.selectRunQuery();
|
|
await logsPage.displayTwoStreams();
|
|
|
|
|
|
});
|
|
|
|
test.skip("Enable Websocket for running query after selecting two streams, selecting field and SQL Mode On", async ({ page }) => {
|
|
|
|
await logsPage.navigateToLogs();
|
|
await logsPage.selectIndexAndStreamJoin();
|
|
await logsPage.kubernetesContainerName();
|
|
await logsPage.enableSQLMode();
|
|
await logsPage.selectRunQuery();
|
|
await logsPage.validateResult();
|
|
|
|
|
|
});
|
|
|
|
test.skip("Enable Websocket for running query after selecting two streams, SQL Mode On and entering join queries", async ({ page }) => {
|
|
|
|
await logsPage.navigateToLogs();
|
|
await logsPage.selectIndexAndStreamJoin();
|
|
await logsPage.kubernetesContainerNameJoin();
|
|
await logsPage.enableSQLMode();
|
|
await logsPage.selectRunQuery();
|
|
await logsPage.displayCountQuery();
|
|
await logsPage.validateResult();
|
|
|
|
|
|
});
|
|
|
|
test.skip("Enable Websocket for running query after selecting two streams, SQL Mode On and entering join limit", async ({ page }) => {
|
|
|
|
await logsPage.navigateToLogs();
|
|
await logsPage.selectIndexAndStreamJoin();
|
|
await logsPage.kubernetesContainerNameJoinLimit();
|
|
await logsPage.enableSQLMode();
|
|
await logsPage.selectRunQuery();
|
|
await logsPage.validateResult();
|
|
|
|
|
|
});
|
|
|
|
test.skip("Enable Websocket for running query after selecting two streams, SQL Mode On and entering join like", async ({ page }) => {
|
|
|
|
await logsPage.navigateToLogs();
|
|
await logsPage.selectIndexAndStreamJoin();
|
|
await logsPage.kubernetesContainerNameJoinLike();
|
|
await logsPage.enableSQLMode();
|
|
await logsPage.selectRunQuery();
|
|
|
|
|
|
|
|
});
|
|
|
|
test.skip("Enable Websocket for running query after selecting two streams, SQL Mode On and entering Left join queries", async ({ page }) => {
|
|
|
|
await logsPage.navigateToLogs();
|
|
await logsPage.selectIndexAndStreamJoin();
|
|
await logsPage.kubernetesContainerNameLeftJoin();
|
|
await logsPage.enableSQLMode();
|
|
await logsPage.selectRunQuery();
|
|
await logsPage.validateResult();
|
|
|
|
|
|
});
|
|
|
|
test.skip("Enable Websocket for running query after selecting two streams, SQL Mode On and entering Right join queries", async ({ page }) => {
|
|
|
|
await logsPage.navigateToLogs();
|
|
await logsPage.selectIndexAndStreamJoin();
|
|
await logsPage.kubernetesContainerNameRightJoin();
|
|
await logsPage.enableSQLMode();
|
|
await logsPage.selectRunQuery();
|
|
await logsPage.validateResult();
|
|
|
|
|
|
});
|
|
|
|
test.skip("Enable Websocket for running query after selecting two streams, SQL Mode On and entering Full join queries", async ({ page }) => {
|
|
|
|
await logsPage.navigateToLogs();
|
|
await logsPage.selectIndexAndStreamJoin();
|
|
await logsPage.kubernetesContainerNameFullJoin();
|
|
await logsPage.enableSQLMode();
|
|
await logsPage.selectRunQuery();
|
|
await logsPage.validateResult();
|
|
|
|
|
|
});
|
|
|
|
test.skip("Enable Websocket for clicking 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.skip("Enable Websocket for clicking 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.skip("Enable Websocket for Adding or removing 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();
|
|
});
|
|
|
|
test.skip("Websocket enabled histogram is disabled and run query, results appear and then user switches on Historgram, getting error", async ({ page }) => {
|
|
|
|
await logsPage.navigateToLogs();
|
|
await logsPage.selectIndexStreamDefault();
|
|
await logsPage.selectRunQuery();
|
|
await logsPage.toggleHistogram();
|
|
await logsPage.selectRunQuery();
|
|
|
|
await logsPage.toggleHistogram();
|
|
|
|
// Check that the error message is not visible
|
|
const errorHeading = page.getByRole('heading', { name: 'Error while fetching' });
|
|
await expect(errorHeading).not.toBeVisible();
|
|
|
|
// Ensure that the error details button is also not visible or disabled
|
|
const errorDetailsButton = page.locator('[data-test="logs-page-histogram-error-details-btn"]');
|
|
await expect(errorDetailsButton).not.toBeVisible();
|
|
|
|
|
|
});
|
|
|
|
test.skip("No Histogram should be displayed if Data is not available", async ({ page }) => {
|
|
|
|
await logsPage.navigateToLogs();
|
|
await logsPage.selectIndexStreamDefault();
|
|
await logsPage.enableSQLMode();
|
|
await logsPage.clearAndFillQueryEditor('SELECT count(_timestamp) FROM "default" where code = 201');
|
|
await page.waitForTimeout(1000);
|
|
await logsPage.selectRunQuery();
|
|
await logsPage.waitForSearchResultAndCheckText('warning No data found for histogram.');
|
|
|
|
});
|
|
|
|
test.skip("Histogram should be displayed if it is enabled again and data is available", async ({ page }) => {
|
|
|
|
await logsPage.navigateToLogs();
|
|
await logsPage.selectIndexStreamDefault();
|
|
await logsPage.enableSQLMode();
|
|
await logsPage.clearAndFillQueryEditor('SELECT count(_timestamp) FROM "default" where code = 200');
|
|
await page.waitForTimeout(1000);
|
|
await logsPage.selectRunQuery();
|
|
await expect(page.locator('[data-test="logs-search-result-bar-chart"] canvas')).toBeVisible();
|
|
await logsPage.toggleHistogram();
|
|
await logsPage.selectRunQuery();
|
|
await expect(page.locator('[data-test="logs-search-result-bar-chart"] canvas')).not.toBeVisible();
|
|
await logsPage.toggleHistogram();
|
|
await logsPage.selectRunQuery();
|
|
await expect(page.locator('[data-test="logs-search-result-bar-chart"] canvas')).toBeVisible();
|
|
|
|
});
|
|
|
|
});
|