Commit Graph
9 Commits
Author SHA1 Message Date
Vamsi Karthik RandClaude Opus 4.8 fddf2cf264 test(e2e): stabilize alpha1 SDR, GeneralTests & Metrics shards (stream/pattern-readiness + langTranslation OOM + Reka-table & editor races) (#13259)
## What

Stabilizes the **SDR**, **GeneralTests** and **Metrics** shards of the
alpha1 cloud
E2E suite (`playwright_alpha1.yml`) to green — the last three shards
remaining after
the rest of the suite was greened. Rebased on `main`.

The original failing run had, across these shards: **SDR** 1 hard fail +
1 flake,
**GeneralTests** 21 fails + 2 flakes, **Metrics** a load-sensitive
query-persistence
flake. Root causes were cloud data/UI-readiness races (freshly-created
streams &
regex patterns lagging their list/table; browser OOM under parallelism;
revamped Reka
UI re-rendering mid-interaction), all fixed with deterministic waits on
real signals.

**No `waitForTimeout` as a fix, no `force:true`, no `.first()`/`.nth()`
band-aids, no
retry-count bumps to hide failures, no weakened assertions. No
worker-count,
parallelism, playwright-config or CI/yml changes** — test code only.

## Root cause & fixes

**SDR**

1. **`scrollIntoViewIfNeeded` 45s timeout** (`multipleSDRPatterns`,
`queryTimeDrop`).
The revamped Reka streams/schema table re-renders rows mid-animation, so
the
scroll's stability polling spun to the 45s action timeout even though
the element
was visible. Guard with `expect(el).toBeVisible()` + an instant native
`scrollIntoView`; removed the trailing sleeps.
(`streamAssociationPage.js`)

2. **Stream Detail `click()` 45s timeout.** One-shot JS-then-Playwright
click raced the
re-rendering row. Replaced with a `toPass` retry that re-resolves the
button fresh,
   fires a native DOM click, and verifies the detail sidebar opened.

3. **Regex-pattern create→list eventual consistency** (6 combined tests:
`ingestionTime*`,
`queryTime*`). Create is accepted (`verifyPatternCreatedSuccess` passes)
before it
   propagates to the list read-replica, so the UI text-count check threw
"not found in list". Gate on the backend source of truth:
`waitForPatternCreated`
   polls `GET /re_patterns` until present then confirms the UI rendered;
`waitForPatternDeleted` fixes the symmetric "Unable to delete … Reason:
unknown"
   delete race. (`sdrPatternsPage.js`)

4. **Freshly-ingested stream lags the `/streams` table**
(`multipleSDRPatterns` @slow).
`openStreamDetail` reloads + re-searches until the stream's row appears
(bounded),
instead of a one-shot 5s wait. (Local-caught gotcha:
`isVisible({timeout})` does
   **not** auto-wait — switched to `waitFor({state:'visible'})`.)

5. Transient cloud-gateway **connection timeouts** on `page.request`
pattern calls wrapped
   in a connection-error-only retry.

**GeneralTests**

6. **cipherKeys ×6 — tab never visible.** Cipher Keys shares the exact
`visible: isEnt`
gate as Regex Patterns (`settings/index.vue`), and SDR's regex
management passes on
this same cloud env — so the tab **does** render; the test was clicking
the Settings
menu, which lands on the SectionHub where per-tab data-tests aren't
rendered. Fixed
by a **direct `goto('/web/settings/cipher_keys')`**, mirroring the
working regex page.
   (Not skipped — that would have masked a real, fixable nav bug.)

7. **enrichment ×7 — `pipeline-section-tab-enrichmentTables` 45s
force-click.** The tab
only mounts after the pipelines page header renders; the
flyout→pipelines→section-tab
nav is fragile under load. Replaced with direct SPA nav to the
enrichment-tables route
+ `goto` fallback + a `toPass` settle-retry Add-button click.
(`pipelinesPage.js`)

8. **languageTranslation ×8 + landingPage ×1 — browser OOM cascade**
("Target page/context/
browser has been closed"). 10 exhaustive ~27-page full-app crawls ran
`mode:parallel`
under `--workers=5`; a worker's browser was OOM-killed and every test
after it
cascaded. **Kept parallel** (serializing overran the shard timeout) —
the crawl now
navigates `waitUntil:'domcontentloaded'` + a bounded settle instead of
waiting up to
10–30s for `networkidle` on chart/websocket-heavy pages, cutting each
heavy page's
peak-memory dwell ~10s→~3s (so 5 concurrent crawls no longer spike
together) and making
each crawl ~3–4× faster. Added fail-fast on a closed page/context so any
residual crash
   surfaces at its true origin instead of being swallowed/retried.

9. **schema ×2 — `selectStream` can't find just-created
`test1`/`test3`.** Local reproduction
proved the root cause: the **fixed** stream names hit `400 "stream is
being deleted"`
(a prior run's cleanup still finishing) → the stream got no data → never
listed. Fixed
with **unique per-invocation stream names**; also hardened the ingestion
helper
(status-check + transient retry) and added a streams-API readiness gate
before
   `selectStream`. (`schema.spec.js`)

10. **enrichment `@upload` ×2 — `_search` `waitForResponse` timeout.**
The 30s search wait
was armed **before** the up-to-120s `selectStream`, so it expired
mid-selection. Re-armed
it (200-gated) immediately before `applyQuery`, plus a streams-API
readiness gate for
`e2e_automate`. `schemaload` gated on the `streams?type=logs` response
before reload.

**Metrics**

11. Replaced `waitForTimeout`s in `metricsPage.js` with real signals
(`data-selected="true"`,
`data-state="on"`) and fixed a reka `OToggleGroupItem` state-detection
bug (active state
    is `data-state="on"`, not a `selected` class).

12. **`metrics-promql-query-persistence` load-sensitive flake.**
`selectFirstStream` returned
before the async auto-populate finished, and persistence tests read the
query editor
before Monaco re-rendered after tab switches. Added editor-readiness
gates on real
    signals (auto-populated query present; Monaco mounted + laid out) in
    `metricsQueryEditorPage.js`; assertions unchanged.

## Validation

- **CI — SDR / GeneralTests / Metrics green (alpha cloud):**
  https://github.com/openobserve/o2-enterprise/actions/runs/29633444186
- **Original failing run:**
https://github.com/openobserve/o2-enterprise/actions/runs/29481437880
- **Local (alpha cloud, CI conditions, single-worker):** each
previously-failing test re-run
  to green — `schema.spec.js` 3/3, `multipleSDRPatterns.spec.js` 2/2.

## Notes

- 21 test files change (8 page objects + 13 specs). No shared
cleanup/setup, config, or
  workflow files touched.
- RegressionSet was unaffected by this branch — a transient hang in the
workflow's
"pre-test cleanup" step (before any test runs), unrelated to these
changes.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-20 05:45:02 +00:00
Shrinath RaoandClaude Opus 4.8 c178de4013 fix(test): SDR combined-field verification via search API (definitive fix for e2e/SDR flakes) (#12896)
## Problem

The 7 `@combined` SDR specs (`queryTime{Redaction,Drop,Hash}`,
`ingestionTime{Redaction,Hash,Drop}`, `multipleSDRPatterns`) fail
deterministically on `e2e / SDR` (ENT [run
28216495512](https://github.com/openobserve/o2-enterprise/actions/runs/28216495512))
with `Field <name> should be visible but was not found`, even after the
content-gate retry in #12893.

## Root cause (a logic bug, not timing)

Verification scraped the virtualized logs results table. Two structural
defects:

1. **Row-indexed selector misused as a count.**
`[data-test="log-table-column-0-source"]` — `TenstackTable.vue` renders
`log-table-column-{rowIndex}-source`, so it only ever matches **row 0**
(1 element). The combined path's `count >= 4` gate can never be met by
the reliable source locator.
2. **Dead fallback selector.** `.logs-result-table tbody tr[role="row"]`
references a class that **does not exist** in `web/src` → always 0.

So the fetch collapsed to whole-page `tbody tr` scraping whose text
never matched the field keys → the flat *"4 entries found but fields not
yet indexed"* across every retry. #12893's retry couldn't help because
the scraped data was structurally wrong, not late. Single-field tests
passed only because they read row 0 directly.

## Fix

Verify against the **Search API** — the actual source of truth for SDR.
Query-time redaction is applied server-side in `apply_regex_to_response`
(`ApplyPolicy::AtSearch`); the web only displays API output, so
`[REDACTED]` / `[REDACTED:<hash>]` / dropped-field semantics are all
present in the API hits.

- Each ingest tags records with a unique `sdr_test_id` marker and
returns it.
- Verification queries `_search` with `WHERE sdr_test_id = '<marker>'`,
polls only until the **known** record count is searchable, then asserts
on the JSON hits.
- Markers threaded through all 7 specs: query-time reuses one marker
(visible → transformed); ingestion-time uses distinct per-batch markers;
`multipleSDRPatterns` threads one per sequential ingest.

Net **−80 lines** — removes all brittle DOM scraping from SDR
verification.

## Validation

`node --check` passes on all changed files; every verify call confirmed
to thread a marker; root-cause selectors + server-side redaction path
confirmed against source. Live `e2e / SDR` run validated via a
matching-name ENT branch (CI tree-merge picks up this OSS branch).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 06:40:30 +00:00
+5 ae22a74e62 feat: ux improvement main (#11838)
#11720

Design at:

https://github.com/openobserve/designs/blob/main/dashboards/ux-improvement-dialog/design.md

---------

---------

Co-authored-by: ktx-vaidehi <134508096+ktx-vaidehi@users.noreply.github.com>
Co-authored-by: Abhay Padamani <141122205+ktx-abhay@users.noreply.github.com>
Co-authored-by: Sai Nikhil <nikhil@openobserve.ai>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: ktx-akshay <akshay.patil@kiara.tech>
Co-authored-by: Bhargav <BJP232004@GMAIL.COM>
Co-authored-by: ktx-mihir <mihir.patel@kiara.tech>
Co-authored-by: ktx-riya <riya.kukadiya@kiara.tech>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Omkar Kesarkhane <127078473+omkarK06@users.noreply.github.com>
Co-authored-by: omkark06 <omkar@zinclabs.io>
Co-authored-by: ktx-vaidehi <vaidehi.akhani@kiara.tech>
Co-authored-by: ktx-abhay <abhay.padamani@kiara.tech>
Co-authored-by: Shrinath Rao <shnath@openobserve.ai>
2026-05-28 11:00:49 +00:00
Shrinath Rao b5d3fec969 test(sdr): migrate multipleSDRPatterns for alpha1 cloud (Set7) (#10868)
## Summary
- Migrate `multipleSDRPatterns.spec.js` for alpha1 cloud auth
compatibility
- Use `getAuthHeaders()`/`getOrgIdentifier()` from `cloud-auth.js`
instead of hardcoded Basic Auth
- Convert `beforeAll` to setup test using `page.request.post()` (sends
browser cookies for cloud management APIs)
- Remove dead code: `fetchWithRetry()`, `afterAll` cleanup, unused
`allTestPatterns` variable, unused `expect` import
- 8 other SDR spec files required no changes (already cloud-compatible)

## Test plan
- [x] All 20 SDR tests passed locally against alpha1 cloud (9 spec
files)
- [x] `multipleSDRPatterns.spec.js` — 2/2 passed (setup + 10-step
sequential flow)
- [x] Sentinel audit: 10/10 checks passed
2026-03-12 13:50:14 +05:30
Shrinath RaoandClaude Opus 4.6 d573d01a62 fix(test): eliminate bare networkidle timeouts across entire test suite (#10494)
## Summary

- Replaced every bare `waitForLoadState('networkidle')` with `{ timeout:
10000 }.catch(() => {})` across **56 files** (35 spec files, 21 page
objects)
- OpenObserve pages maintain persistent RUM/replay/WebSocket connections
that prevent `networkidle` from ever resolving, causing 90s timeout
crashes
- Added `fetchWithRetry` helper for transient 502/proxy errors in SDR
multi-pattern `beforeAll`
- Bumped SDR multi-pattern test timeout from 300s to 420s for CI

## Files changed

**Page objects (21 files):** alertsPage, alertManagement,
alertCreationWizard, alertTemplatesPage, alertBulkOperations, logsPage,
streamsPage, streamAssociationPage, sdrPatternsPage,
sdrVerificationPage, dashboardPage, functionsPage, pipelinesPage,
enrichmentPage, sanityPage, schemaPage, loginPage, commonActions, and
more

**Spec files (35 files):** All SDR specs, all Traces specs, all Logs
specs, all RegressionSet specs, Alerts specs, Pipelines specs,
Dashboards specs, Functions specs, GeneralTests specs, wait-helpers
utility

## Test plan

- [x] Verify zero bare `networkidle` calls remain in `tests/ui-testing/`
- [ ] CI passes for SDR, Streams, Logs Regression, and other test suites

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 14:42:32 +05:30
Shrinath Rao 9dbe7076d4 fix(test): resolve SDR multi-pattern timing failure and enforce POM compliance (#10476)
### **User description**
## Summary
- Fix CI timing failure in `multipleSDRPatterns.spec.js` where `Field
multi_data not found in log` occurred due to slow indexing
- Add retry loop with incremental backoff (5 retries) and Loading...
indicator wait to `SDRVerificationPage`
- Replace all `throw new Error()` with proper Playwright `expect()`
assertions
- Remove raw selectors from spec file — all UI interactions now go
through `SDRVerificationPage` page object

## Test plan
- [x] All 3 tests pass locally (setup, 10-step sequential verification,
cleanup)
- [ ] CI run passes on this branch

## Related
- Fixes flaky failure in:
https://github.com/openobserve/o2-enterprise/actions/runs/21890212046/job/63196712500


___

### **PR Type**
Tests, Bug fix


___

### **Description**
- Add retry-based log verification for CI

- Move log UI logic into page object

- Replace thrown errors with Playwright expects

- Stabilize timing, tagging, and cleanup


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["multipleSDRPatterns.spec.js: SDR multi-pattern test"] 
  B["SDRVerificationPage.verifySingleFieldInLatestLog()"] 
  C["Retry loop + refresh + loading wait"] 
  D["Assertions via Playwright expect()"] 
  E["More reliable CI execution"] 
  A -- "delegates verification to" --> B
  B -- "adds" --> C
  B -- "uses" --> D
  C -- "reduces flakiness in" --> E
  D -- "improves failure diagnostics in" --> E
```



<details> <summary><h3> File Walkthrough</h3></summary>

<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>sdrVerificationPage.js</strong><dd><code>Add robust log
verification retries</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

tests/ui-testing/pages/sdrPages/sdrVerificationPage.js

<ul><li>Import <code>expect</code> and assert via Playwright<br> <li>
Add <code>waitForLoadingToDisappear()</code> helper<br> <li> Add
<code>getLogEntries()</code> with locator fallback<br> <li> Retry
refresh/indexing before verifying fields</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10476/files#diff-cdbdaa86cda3a764a369728d276b21b06f3b13c6ef815b29fc7a024b270e2bec">+60/-42</a>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>multipleSDRPatterns.spec.js</strong><dd><code>Refactor
spec to use page object</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

tests/ui-testing/playwright-tests/SDR/multipleSDRPatterns.spec.js

<ul><li>Increase post-ingestion wait to 5s<br> <li> Remove inline
log-verification helper functions<br> <li> Use
<code>pm.sdrVerificationPage.verifySingleFieldInLatestLog()</code><br>
<li> Rename tag to <code>@sdrMultiPattern</code> and assert cleanup
count</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10476/files#diff-27c612d13221447d0f5ee4b26066288ae498f189967c5ed6ab7bff07a0caad6b">+14/-91</a>&nbsp;
</td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2026-02-11 15:21:46 +05:30
Shrinath Rao e0d23c42a7 fix(e2e): resolve SDR test failures with test isolation and retry logic (#9632)
## Summary
- Add unique testRunId to pattern and stream names for test isolation
during parallel execution
- Add retry logic to `checkPatternExists` for backend indexing delays (3
attempts with 2s wait)
- Add search box filtering in `selectStream` for reliable stream
selection in long lists
- Add retry logic for Stream Detail button in stream association page
- Fix ingestion retry with exponential backoff for "stream being
deleted" errors
- Update regexPatternManagement test with unique pattern names to avoid
conflicts

## Test plan
- [x] All 23 SDR tests pass reliably in parallel execution
- [x] Verified tests pass when run individually and as a suite
- [x] No regressions in other test suites
2025-12-15 15:55:46 +05:30
Shrinath RaoandYashodhan Joshi 98e35c1632 test: added ent tags to all enterprise tests (#9040)
Co-authored-by: Yashodhan Joshi <yashodhan@openobserve.ai>
2025-11-11 15:14:33 +05:30
Shrinath Rao d70c75e4bc test: added tests for ent repo - not to be run, but maintained (#8956) 2025-11-04 22:26:50 +05:30