67 lines
2.6 KiB
Markdown
67 lines
2.6 KiB
Markdown
# Prometheus complete test parsing
|
|
|
|
CodeMirror gives editor-state creation a 20 ms synchronous parsing budget.
|
|
The shared `createEditorState()` test helper can therefore return an
|
|
incomplete syntax tree when the process is descheduled. The completion and
|
|
vector-matching tests immediately inspect that tree.
|
|
|
|
## Scope and behavior
|
|
|
|
`complete-test-parsing.patch` changes only
|
|
`module/codemirror-promql/src/test/utils-test.ts` inside `web/ui`. It completes
|
|
the small test expression with `ensureSyntaxTree(..., Infinity)` and publishes
|
|
the completed parse through an empty transaction so `syntaxTree(state)` sees
|
|
it. Failure to obtain a tree raises an error.
|
|
|
|
The original assertions remain enabled, including `autocomplete topk params 2`
|
|
and `foo * on(test,blub) bar`. The unlimited budget applies to the test helper;
|
|
production editor parsing budgets are unchanged.
|
|
|
|
## Reproduction and focused checks
|
|
|
|
Use a disposable Prometheus 3.14.0 checkout. The patch root is `web/ui`, matching
|
|
the Nix assets derivation. From this directory:
|
|
|
|
```sh
|
|
patch --fuzz=0 -d /path/to/prometheus/web/ui -p1 < complete-test-parsing.patch
|
|
cd /path/to/prometheus/web/ui
|
|
pnpm install --frozen-lockfile
|
|
pnpm --filter @prometheus-io/lezer-promql build
|
|
pnpm --filter @prometheus-io/codemirror-promql test
|
|
```
|
|
|
|
To force the scheduling condition, temporarily append this clock to
|
|
`module/codemirror-promql/setupJest.cjs` in the disposable checkout:
|
|
|
|
```js
|
|
let parseClock = 0;
|
|
Date.now = () => (parseClock += 25);
|
|
```
|
|
|
|
Each clock read crosses the editor's initial parsing budget. Against the
|
|
original helper, the hybrid and vector suites have 186 failures, including
|
|
both locally excluded cases. With the patch, all 386 CodeMirror tests pass
|
|
under that same clock. Remove the injected clock before normal builds.
|
|
|
|
## Upstream status
|
|
|
|
This is a standalone test-helper patch for Prometheus 3.14.0. No upstream
|
|
submission was made during this work. Recheck the helper when updating
|
|
Prometheus or CodeMirror, including how an ensured parse becomes visible
|
|
through the editor state.
|
|
|
|
## Local NixOS integration and build results
|
|
|
|
[`../default.nix`](../default.nix) loads `default.nix`, which patches the
|
|
separate assets derivation. It updates both `passthru.assets` and the main
|
|
Prometheus build's reference to those assets. From the repository root:
|
|
|
|
```sh
|
|
nix build --no-link -L .#nixosConfigurations.jeeves.pkgs.prometheus.assets
|
|
```
|
|
|
|
The full x86-64-v3 assets build passed with the normal clock, including the
|
|
CodeMirror and UI suites. Host-flake evaluation confirmed that the main
|
|
Prometheus derivation refers to these patched assets. The Go server package
|
|
was not rebuilt for this test-helper change.
|