Skip to content

test(e2e): let HR-Ready waits outlast the install timeout of the release they wait on - #4471

Merged
Aleksei Sviridkin (lexfrei) merged 6 commits into
mainfrom
fix/e2e-hr-ready-waits-past-install-timeout
Oct 2, 2026
Merged

Aleksei Sviridkin (lexfrei) merged 6 commits into
mainfrom
fix/e2e-hr-ready-waits-past-install-timeout

Conversation

@lexfrei

@lexfrei Aleksei Sviridkin (lexfrei) commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

What this PR does

Stacked on #4468, which holds the raised backup waits to a start margin; review that one first. This PR's own diff is the six commits on top of it.

Most HR-Ready waits in the E2E suites gave up before the release they were waiting on could fail its install. cozystack-api gives every release it generates a 600s install timeout, and the Chainsaw asserts in front of those releases sat at 5 or 6 minutes. When an install genuinely failed, the suite reported a bare assert timeout against a release that was still installing, and the reason the install failed, which the release records when its own timeout fires, was never reached. Red runs failed just as often as they should; they only said less.

I raised every HR-Ready wait above the install timeout of its own release, by the 60s start margin #4468 introduces:

  • Chainsaw asserts on releases cozystack-api generates go to 11m, across bucket, clickhouse, etcd, external-dns, foundationdb, harbor, mongodb, openbao, opensearch, postgres, qdrant, rabbitmq, redis, valkey and vminstance.
  • Asserts on nested <name>-system releases take their floor from the template that renders them: 11m for external-dns, openbao and qdrant (10m spec.timeout), 16m for harbor-test-system (15m). harbor-test sat exactly on its 600s floor, which expires first because the assert's clock starts before the install's; it goes to 11m too.
  • The kuberture Package release takes its 10m from cozystack-operator and goes to 11m.
  • In the backup walkthroughs, the bucket waits go from 300s to 660s in clickhouse, kafka, mariadb, mongodb, postgres, rabbitmq and redis, and the two postgres waits go from 360s to 660s. The kafka bucket wait passed no budget and silently took the helper's 300s default, which is why earlier scans for literal budgets missed it. Each Chainsaw op that runs a walkthrough grows by exactly what its waits gained (clickhouse 78m, kafka 46m, mariadb 48m, mongodb 42m, postgres 66m, rabbitmq 48m, redis 36m), so a failure at any later wait keeps the headroom it had and is still reported by the script instead of being cut off by the op.

Two waits stay as they are, on purpose:

  • kafka: kafka-rd sets a 7h install timeout, which no budget inside the 215-minute E2E job can clear. The kafka assert and the Kafka waits in the kafka and kafka-metadata walkthroughs keep their numbers, and the assert now says why in-line.
  • vm-instance-test: vm-instance-rd disables the install wait, so its release goes Ready as soon as helm has applied and there is no floor to clear. Earlier lists of this problem included it by mistake.

The cost falls on red runs only: a suite whose release never goes Ready now spends up to six more minutes before it reports, and in exchange the report carries the release's own reason. Green runs are unchanged. Suites run one after another in a single job capped at 215 minutes, so a systemic failure that reddens many suites now reaches that cap sooner, and a job cancelled at the cap loses its log and cozyreport.tgz. I took that trade because a failed install that says why is worth more than a red run that ends a few minutes earlier.

docs/agents/e2e-testing.md stopped being true in several places once the waits were raised: it described most of the tree as under the floor, mariadb as the only suite raised, the walkthrough bucket waits as under it, and harbor's asserts as sitting on and under theirs. I rewrote those sentences, and the one that pointed at "every wait above the band" of 5-6m, kept the start-margin wording from #4468, and added that a walkthrough wait passing no budget takes the helper's default. The comments in hack/mariadb-first-boot-waits.bats that quoted the old op and bucket figures are restated; its existing checks and constants are unchanged, because every op grew by exactly its bucket delta and each remainder still sits at exactly its constant. I also added postgres to the table that file holds the walkthroughs to, so its raised waits and its op cannot drift back apart unnoticed, and a test that holds each table suite's bucket wait to the bucket release's floor, read from the api-server default with bucket-rd checked for an override; the op check alone could not catch a bucket wait dropping back, since a lower wait only widens the slack. redis stays out: its walkthrough waits on no redis HelmRelease, only on the bucket and on the sentinel master, so the table's floor check has nothing to read there.

How I checked it, since E2E cannot run locally:

  • I re-ran the enumeration from the sizing section of docs/agents/e2e-testing.md over every hack/e2e-chainsaw/*/chainsaw-test.yaml and every wait_hr_ready call under examples/backups/, literal or default, and held each against its own release's floor. Every Ready=True assert and every wait_hr_ready call a suite drives now clears its floor, except the kafka ones named above. The opt-in etcd round-trip uses bare kubectl wait hr calls at 300s instead of that helper; they are listed in bug(tests): the HelmRelease waits and helpers the HR-Ready raise could not reach #4470. The Ready=False assert on the rejected redis upgrade is not a readiness wait and is left out.
  • make bats-unit-mariadb-first-boot-waits passes, 31 of 31. For the new postgres row, putting the op back to 50m fails only the postgres slack test, and a postgres wait at 659s fails only the postgres floor test. Setting any one table suite's bucket wait to 659s fails only the bucket test, naming only that suite, and an install-timeout override on bucket-rd fails it too. I ran the mutations under plain bats so a fail-fast runner could not hide a second failure.
  • hack/select-e2e.sh over this diff selects bucket, clickhouse, etcd, external-dns, foundationdb, harbor, kafka, kuberture, mariadb, mongodb, openbao, opensearch, postgres, qdrant, rabbitmq, redis, valkey and vminstance.

Out of scope, and tracked in #4470: the tenant addon waits in hack/e2e-chainsaw/_lib/run-kubernetes.sh (an edit there escalates the whole E2E run), the redis and kafka-metadata wait_hr_ready helpers that print no reason on timeout, and the opt-in etcd round-trip's bare kubectl wait calls.

Known and left for later, none of them changed here:

  • Only the mariadb Chainsaw asserts and the walkthroughs in the guard's table are held by a test. The other raised asserts, and the redis and kafka bucket waits, rest on literals with in-line reasons; bug(tests): the HelmRelease waits and helpers the HR-Ready raise could not reach #4470 covers extending the guard.
  • The Kafka waits in examples/backups/kafka/04-create-kafka.sh, 07-restore-to-copy.sh and kafka-metadata/run-all.sh stay at 300s against the 7h floor without an in-line reason at the call site. The doc's rule asks that of Chainsaw asserts only, and the kafka Chainsaw assert carries it.

The postgres waits are the ones #3748 is about. Their budget now clears the install-timeout floor and a test holds it there; what a CNPG first boot costs on this platform is still unmeasured, so that issue stays open.

Closes #3771

Closes #3753

Screenshots

Not a UI change.

Downstream repositories

I walked the trigger map in docs/agents/contributing.md against the diff. It touches E2E suites, backup walkthrough scripts, a unit-lane bats file and an agent doc, none of which any downstream repository restates.

Release note

fix(tests): HelmRelease readiness waits in the E2E suites and backup walkthroughs now outlast the install timeout of the release they wait on, so a failed install reports its own reason instead of a bare timeout.

Summary by CodeRabbit

  • Tests

    • Extended readiness and backup round-trip test timeouts across multiple services to accommodate slower startup and provisioning.
    • Added checks to verify that bucket readiness waits meet configured installation-timeout requirements.
  • Documentation

    • Updated testing guidance to clarify how readiness waits relate to release-specific timeouts and overall test budgets.

@coderabbitai

coderabbitai Bot commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

🧰 Additional context used
📚 Code guidelines (1)
docs/agents/e2e-testing.md — configured

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository: cozystack/cozystack/.coderabbit.yaml

Review profile: CHILL

Plan: Advanced

Run ID: e48f8dd3-1586-47b0-af52-306754a5acdf

📥 Commits

Reviewing files that changed from the base of the PR and between bc400df and a0af2fd.

📒 Files selected for processing (27)
  • docs/agents/e2e-testing.md
  • examples/backups/clickhouse/03-create-bucket.sh
  • examples/backups/kafka/03-create-bucket.sh
  • examples/backups/mariadb/run-all.sh
  • examples/backups/mongodb/run-all.sh
  • examples/backups/postgres/run-all.sh
  • examples/backups/rabbitmq/run-all.sh
  • examples/backups/redis/run-all.sh
  • hack/e2e-chainsaw/bucket/chainsaw-test.yaml
  • hack/e2e-chainsaw/clickhouse/chainsaw-test.yaml
  • hack/e2e-chainsaw/etcd/chainsaw-test.yaml
  • hack/e2e-chainsaw/external-dns/chainsaw-test.yaml
  • hack/e2e-chainsaw/foundationdb/chainsaw-test.yaml
  • hack/e2e-chainsaw/harbor/chainsaw-test.yaml
  • hack/e2e-chainsaw/kafka/chainsaw-test.yaml
  • hack/e2e-chainsaw/kuberture/chainsaw-test.yaml
  • hack/e2e-chainsaw/mariadb/chainsaw-test.yaml
  • hack/e2e-chainsaw/mongodb/chainsaw-test.yaml
  • hack/e2e-chainsaw/openbao/chainsaw-test.yaml
  • hack/e2e-chainsaw/opensearch/chainsaw-test.yaml
  • hack/e2e-chainsaw/postgres/chainsaw-test.yaml
  • hack/e2e-chainsaw/qdrant/chainsaw-test.yaml
  • hack/e2e-chainsaw/rabbitmq/chainsaw-test.yaml
  • hack/e2e-chainsaw/redis/chainsaw-test.yaml
  • hack/e2e-chainsaw/valkey/chainsaw-test.yaml
  • hack/e2e-chainsaw/vminstance/chainsaw-test.yaml
  • hack/mariadb-first-boot-waits.bats

Included review availability: This review used your included allowance. Your plan provides up to 8 included reviews per hour; 4 remain after this review.


📝 Walkthrough

Walkthrough

HelmRelease readiness limits and backup-helper waits now use revised timeouts. The E2E sizing guidance and Bats checks describe and verify release-specific timeout floors. Several backup round-trip script budgets also changed.

Changes

E2E readiness budget updates

Layer / File(s) Summary
Readiness budget rules and checks
docs/agents/e2e-testing.md, hack/mariadb-first-boot-waits.bats
Guidance now describes release-specific timeout floors and per-suite choices. Bats checks add PostgreSQL timing checks and verify that each suite’s bucket wait clears the install-timeout floor.
Suite HelmRelease readiness limits
hack/e2e-chainsaw/*/chainsaw-test.yaml
Many HelmRelease readiness assertions now allow 11 minutes; Harbor’s system assertion allows 16 minutes. Comments describe timeout comparisons, and the Kafka assertion remains unchanged with updated explanatory comments.
Backup-helper readiness waits
examples/backups/{clickhouse,kafka,mariadb,mongodb,postgres,rabbitmq,redis}/*
Bucket and PostgreSQL HelmRelease readiness waits increase to 660 seconds.
Backup round-trip budgets
hack/e2e-chainsaw/{clickhouse,kafka,mariadb,mongodb,postgres,rabbitmq,redis}/chainsaw-test.yaml
Several backup round-trip script timeouts and budget descriptions are updated to account for the revised waits and operation durations.

Priority: ⬇️ Low

Estimated code review effort: 3 (Moderate) | ~25 minutes

Change: Bug fix · Severity of issue fixed: Low

Merge Risk: ⚪ Minimal · up to a0af2

This change lengthens E2E readiness waits so HelmRelease install failures are recorded before the wait expires. It affects test infrastructure only, and no concrete merge-blocking risk was found. E2E was not run locally.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main change: extending HelmRelease readiness waits beyond the install timeout of the related release.
Linked Issues check ✅ Passed The PR raises the affected generated-release HelmRelease readiness asserts to 11 minutes and raises the Harbor chart-rendered release to 16 minutes against its 15-minute timeout [#3771]. It raises the…
Out of Scope Changes check ✅ Passed The changed documentation, backup HelmRelease waits, Chainsaw operation budgets, and BATS guard changes support the readiness-timeout objectives [#3771, #3753]. The Kafka and vm-instance notes documen…
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 8…
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Autopilot is currently an internal CodeRabbit preview.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added area/testing Issues or PRs related to testing (e2e, bats, unit tests) size/L This PR changes 100-499 lines, ignoring generated files labels Sep 24, 2026
IvanHunters
IvanHunters previously approved these changes Sep 25, 2026

@IvanHunters IvanHunters left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Test-only change: E2E waits, backup walkthroughs, one bats guard, an agent doc. I checked the load-bearing parts by running them, not by reading.

What I checked:

  • bats hack/mariadb-first-boot-waits.bats passes 31/31 at head (812dc29). The new bucket-floor test actually reddens on a regression: set a table suite's bucket wait to 659s and it fails, naming only that suite; a Postgres db wait at 360s, or the op at 65m, each red their own test. The byte-identical wait_hr_ready guard, the copy that has gone red on main before, still holds.
  • The arithmetic is internally consistent and matches the description. HR-Ready asserts go from 5m/6m to 11m (600s install timeout plus the 60s margin), harbor -system from 10m to 16m (15m spec.timeout plus the margin), and each round-trip op grows by exactly the delta of the waits it contains (postgres +16m = bucket +6m plus two Postgres waits at +5m each; the +6m suites get it from the bucket wait alone).
  • No raised assert gets cut off by a containing op. The Chainsaw asserts are their own top-level try steps, and the walkthrough ops (36 to 78m) sit well above 11m.
  • The kafka (7h floor) and vm-instance (helm-install-disable-wait) exclusions are correct, and redis is rightly out of the database-floor check: its walkthrough waits on no redis HelmRelease.

On CI: the E2E (in-tree) run on this head is red, but not from this change. The Install Cozystack chainsaw test passed. The job failed later on grafana-deployment in tenant-root timing out and crash-looping, which this PR does not touch.

Non-blocking, both already tracked in #4470, noted only for the record:

  • The kafka and redis bucket waits (660s) and their op growth sit outside MBW_SUITES, so nothing reds if either drops back to the helper's 300s default. The bats header speaks only of "other suites' HR-Ready asserts", not these two bucket waits.
  • examples/backups/kafka/04-create-kafka.sh and 07-restore-to-copy.sh still take the helper's 300s default against the 7h floor with no in-line reason at the call site, while the doc's new sentence describes exactly that shape.

Aleksei Sviridkin (lexfrei) added a commit that referenced this pull request Oct 1, 2026
…ight cleanup (#4635)

## What this PR does

This fixes the S3 access preflight and a few backup walkthroughs, and
moves the walkthrough wait helpers into one shared file.

The access preflight now keeps its evidence and cleans up after itself.
When `mc alias set` failed, it dropped the port-forward log, and now it
prints it like the other exits do. The exit trap used to kill the
port-forward before `mc rm`, so the delete always hit a closed port and
the warning gave no reason. The delete now runs first, and the warning
carries mc's own error, or says the delete timed out when mc was killed
before writing one. A PUT that timed out (rc 124) may have landed, so it
counts as uploaded. A PUT the server refused does not, so access that
never went live gets no delete and no warning.

The wait helpers were copied into every walkthrough and had drifted.
`wait_for_field`, `wait_hr_ready` and `wait_deleted` had 12, 8 and 2
copies with 5, 3 and 2 different bodies. They now live in
`examples/backups/_lib/wait-helpers.sh`, and each `00-helpers.sh`
sources it. Call sites and wait budgets are unchanged. Where copies
differed, the shared body keeps every diagnostic any copy had. What
changes per walkthrough:

- `wait_for_field` in every walkthrough but redis now shows kubectl's
stderr, so a Forbidden or transport error is visible instead of reading
as an empty field. `--ignore-not-found` keeps a resource that does not
exist yet from printing an error on every poll. Redis already kept
stderr.
- `wait_for_field` in foundationdb, nats and vmi gains the optional 7th
terminal-value argument. None of their callers pass it, so nothing
changes at runtime.
- vmi loses its progress dots.
- `wait_hr_ready` in redis and kafka-metadata now prints every condition
and the release history on Stalled or timeout. It also says whether the
release never appeared, was deleted, or could not be looked up.
- The kafka `wait_deleted` timeout message reads "it is still present"
instead of "still present".

`hack/backup-examples-shared-helpers.bats` goes red if a walkthrough
defines one of these helpers again or stops providing them, and it pins
both sides of the `wait_for_field` read: kubectl's reason for a failed
read is shown, a missing resource prints nothing. The byte-identity pin
between copies in `hack/mariadb-first-boot-waits.bats` is gone, and its
errexit test runs through the mariadb walkthrough's helpers.

The kafka topic-data demo had the empty-read race from #4400.
`kafka_run` read topic state through a throwaway `kubectl run -i` Pod.
It now execs into a long-lived CLI Pod that keeps the restricted
security context, and `cleanup.sh` removes it by label. The Pod name
comes from its own `KAFKA_TOPIC_CLI_POD`, so setting the kafka-metadata
demo's `KAFKA_CLI_POD` does not move it. #4400 itself was already fixed
on main for nats, kafka-metadata and rabbitmq.

The nats and kafka-metadata demos could exec into a Pod they had just
refused. They read CLI output inside `$(...)`, where bash does not apply
errexit, so the ownership refusal was ignored. A failed read of the
Pod's phase was treated as no Pod, and the demo went on to delete and
replace it. Every setup step now returns on failure. Their "exec fails
with kubectl's own error" tests could never fail: the runner's trace
wrote the expected message into the same stderr the test grepped. The
stub now prints the message itself.

Each fix has a test that fails on main. For each fix I also reverted it
and checked that only its own test goes red.

One gap stays open outside this PR. `hack/select-e2e.sh` maps
`examples/backups/<app>/` paths by app name, so a later PR that changes
only `examples/backups/_lib/wait-helpers.sh` would select no suite. This
PR is fine because it touches every walkthrough. The rule belongs to the
select-e2e owners and is tracked in #4626.

While reviewing I also found that the kafka README puts steps that
create and exec into Pods under the tenant persona, and the tenant role
can do neither. That is #4625, left for its own change.

Left out on purpose, because they are outside what this diff changes:

- The kafka topic demo and the kafka-metadata demo each carry a CLI Pod
helper, and the kafka-metadata one runs without the restricted security
context.
- The walkthrough READMEs do not say that a directory now needs
`../_lib` next to it.
- The errexit test in `hack/mariadb-first-boot-waits.bats` loops over
one file. I kept it so the rebase against #4471 stays mechanical.

Closes #3757, closes #4243, closes #4244

### Screenshots

No UI changes.

### Downstream repositories

- [x] No downstream repository is affected by this change
- [ ] [cozystack/website](https://github.com/cozystack/website) -
follow-up:
- [ ]
[cozystack/terraform-provider-cozystack](https://github.com/cozystack/terraform-provider-cozystack)
- follow-up:
- [ ]
[cozystack/ansible-cozystack](https://github.com/cozystack/ansible-cozystack)
- follow-up:
- [ ] [cozystack/ccp](https://github.com/cozystack/ccp) - follow-up:
- [ ] [cozystack/talm](https://github.com/cozystack/talm) - follow-up:
- [ ] [cozystack/cozyhr](https://github.com/cozystack/cozyhr) -
follow-up:
- [ ] [cozystack/cozy-proxy](https://github.com/cozystack/cozy-proxy) -
follow-up:
- [ ]
[cozystack/cozystack-telemetry-server](https://github.com/cozystack/cozystack-telemetry-server)
- follow-up:
- [ ]
[cozystack/external-apps-example](https://github.com/cozystack/external-apps-example)
- follow-up:
- [ ] [cozystack/examples](https://github.com/cozystack/examples) -
follow-up:
- [ ] [cozystack/community](https://github.com/cozystack/community) -
follow-up:

### Release note

```release-note
fix(backups): the backup walkthroughs share one set of wait helpers that keep kubectl errors visible, the kafka topic-data demo no longer reads empty replies from a throwaway Pod, the nats and kafka-metadata demos no longer exec into a CLI Pod they refused, and the e2e S3 access preflight says why client setup or cleanup failed and deletes its test object reliably.
```


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Kafka topic backup walkthroughs now reuse a named CLI Pod, with
restricted security settings and checks to prevent using a Pod owned by
another demo.
* Backup walkthroughs can wait for resources to reach a desired state,
Helm releases to become ready, or resources to be deleted.

* **Bug Fixes**
* Kafka and NATS walkthroughs now stop and report errors when CLI Pod
lookups, creation, deletion, or command execution fail.
* S3 preflight cleanup now attempts removal after a timed-out upload and
reports cleanup failures, including timeouts.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
cozystack-api gives every release it generates a 600s install timeout,
and these asserts gave up at 5-6m. A failed install was therefore
reported as a bare assert timeout while the release was still
installing and had not yet recorded why it failed.

Raise them to 11m, above that floor, so the release's own reason is on
record before Chainsaw gives up. The cost is up to six more minutes on
a red run of each suite; a green run is unchanged. vm-instance-test
stays: vm-instance-rd disables the install wait, so its release goes
Ready as soon as helm has applied.

Assisted-by: LLM
Signed-off-by: Aleksei Sviridkin <[email protected]>
A nested <name>-system release takes its install timeout from the
template that renders it, not from cozystack-api, and a Package release
takes it from cozystack-operator. The external-dns, openbao and qdrant
templates set 10m and harbor's sets 15m; the operator gives 10m. Their
asserts sat at 5m or 10m, so a failed install reported as a bare
timeout. Raise each above its own floor: 11m, and 16m for
harbor-test-system. harbor-test was on its 600s floor exactly, which
expires first because its clock starts before the install's; it goes
to 11m with the generated parents here.

kafka keeps its 6m: kafka-rd sets a 7h install timeout that no budget
inside the E2E job cap can clear, and the assert now says so.

Assisted-by: LLM
Signed-off-by: Aleksei Sviridkin <[email protected]>
The backup round-trips drive examples/backups, whose bucket waits gave
up at 300s and whose postgres waits at 360s, under the 600s install
timeout cozystack-api gives each of those releases. The kafka example's
bucket wait passed no budget and took the helper's 300s default. A
failed install there reported only that the wait ran out.

Raise each to 660s, and grow the Chainsaw op around every walkthrough
by what its waits gained, so a failure at any later wait keeps the
headroom it had and is still reported by the script rather than cut
off by the op. The kafka and kafka-metadata Kafka waits stay: their
7h install timeout cannot be cleared inside the E2E job cap.

Assisted-by: LLM
Signed-off-by: Aleksei Sviridkin <[email protected]>
The sizing guidance said most of the tree sat under the install-timeout
floor, that mariadb was the only suite raised, that the walkthrough
bucket waits were under it, and that harbor's asserts were on and under
theirs. None of that holds once the waits clear their floors, and a
reader would take the old band as the norm to copy. Name kafka as the
floor no budget can clear, keep harbor as the example of two floors in
one suite, and note that a walkthrough wait passing no budget takes its
helper's default, which a grep for the number misses. The list of
definitions that disable the install wait also missed vm-instance-rd,
which is why its assert has no floor to clear, and the section never
said where a Package release's floor comes from.

Assisted-by: LLM
Signed-off-by: Aleksei Sviridkin <[email protected]>
The mariadb op and its bucket wait both grew by six minutes, so the
worked arithmetic in the remainder test and the note that the bucket
wait sits under its floor no longer describe the tree. The header also
said the other suites' HR-Ready asserts sit under the floor by choice,
which stopped being true once they were raised. The checks and their
constants are unchanged: every remainder still sits at exactly its
constant.

Assisted-by: LLM
Signed-off-by: Aleksei Sviridkin <[email protected]>
The postgres backup walkthrough's HelmRelease waits and every table
walkthrough's bucket wait now clear the install-timeout floor, and the
Chainsaw ops grew to contain them, but nothing checked it: a wait
dropped back under the floor, or raised without its op, would pass.
The op check cannot catch the bucket case on its own, since a lower
wait only widens the slack.

Add postgres to the table the other walkthroughs are held by, with the
remainder its op kept through the raise, and hold each table suite's
bucket wait to the bucket release's floor, read from the api-server
default with bucket-rd checked for an override. This holds the budgets
only; what a CNPG first boot costs on this platform is still
unmeasured.

Assisted-by: LLM
Signed-off-by: Aleksei Sviridkin <[email protected]>
@lexfrei
Aleksei Sviridkin (lexfrei) force-pushed the fix/e2e-hr-ready-waits-past-install-timeout branch from 812dc29 to a0af2fd Compare October 1, 2026 14:47
Base automatically changed from test/wait-budget-guard-margin to main October 1, 2026 15:43
@lexfrei
Aleksei Sviridkin (lexfrei) dismissed IvanHunters’s stale review October 1, 2026 15:43

The base branch was changed.

auto-merge was automatically disabled October 2, 2026 06:48

Pull request was closed

@lexfrei
Aleksei Sviridkin (lexfrei) merged commit a7ac37b into main Oct 2, 2026
41 of 52 checks passed
@lexfrei
Aleksei Sviridkin (lexfrei) deleted the fix/e2e-hr-ready-waits-past-install-timeout branch October 2, 2026 09:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/testing Issues or PRs related to testing (e2e, bats, unit tests) size/L This PR changes 100-499 lines, ignoring generated files

Projects

None yet

3 participants