Skip to content

test(e2e): run the testkit conformance suite in the host lanes - #5078

Merged
matthewgrossman merged 5 commits into
mainfrom
test/3954-host-lanes-to-testkit/matthewgrossman
Nov 3, 2026
Merged

matthewgrossman merged 5 commits into
mainfrom
test/3954-host-lanes-to-testkit/matthewgrossman

Conversation

@matthewgrossman

@matthewgrossman matthewgrossman commented Oct 30, 2026 •

Copy link
Copy Markdown
Member

Summary

Run the testkit conformance suite in the host E2E lanes, and delete the old CLI conformance suite it replaces. This is a parity change: every lane keeps its current gateway and driver setup.

Before: tests/suites/conformance held two overlapping suites.

  • The host lanes (Docker, Docker external-driver, Podman, Kubernetes and its variants, VM, VM external-driver, and e2e:rust:push) ran the old cli package with cargo test: 8 tests that run scripted scenarios from crates/openshell-conformance against the CLI.
  • The testkit sandbox package (tests/suites/conformance/sandbox) from test(suites): port the conformance suites onto testkit and run conformance-integration on the runner #4774 (15 tests, covering the old suite's scenarios and more) ran only in the conformance-integration runner lanes and mise run e2e:testkit.

After: there is one conformance suite.

  • The host lanes run the testkit suite with cargo nextest, one test at a time. A run that selects zero tests fails.
  • The suite becomes one crate per family: tests/suites/conformance itself is now the conformance package (its own workspace), with the suites still in tests/*.rs. The manifest path and lockfile location are unchanged; the runner rows, fmt/clippy lines and docs now name conformance, and nextest binaries are conformance::<suite>.
  • The old cli package is deleted. crates/openshell-conformance stays, because other suites still use it: its OpenShellRunner command helper is used by the old features/oci-image, features/provider-refresh/keycloak and drivers/podman suites. A follow-up PR, test(e2e): migrate the features and drivers suites to testkit #5137, moves those to testkit and then deletes the crate.
  • Each lane still starts the same gateway and driver as before, and the tests find that gateway the same way the CLI does.
  • Cost: each host lane spends about 1 more minute (about 2 on Podman) compiling testkit. Testkit uses the Rust SDK, so it pulls in about 300 crates (tonic, rustls, aws-lc-sys and so on), against a handful for the old suite, and each lane compiles them from scratch. A follow-up PR, feat(conformance): add the openshell-conformance program #5138, removes this by building the tests once per architecture as one openshell-test program that every lane runs. The tests themselves take about as long as the old 8 did. In CI, every lane stays well within its timeout.

Based on main, which now includes #4774.

Related Issue

Part of #3954

Changes

  • e2e/support/conformance.sh runs cargo nextest run on the tests/suites/conformance workspace with --no-tests fail, so a lane that selects zero tests fails. All host lanes (Docker, Docker external-driver, Podman, Kubernetes and its variants, VM, VM external-driver, and e2e:rust:push) go through this script, so none of the lane wrappers changed.
  • Deleted tests/suites/conformance/cli, its workspace member, and its lockfile entries. crates/openshell-conformance stays for the suites that still use it.
  • tasks/test.toml: e2e:testkit no longer excludes the deleted suite. e2e:rust:push drops a dependency on e2e:conformance:build, a task that no longer exists.
  • TESTING.md: updated the suite and lane descriptions and the manual-run command.

Gateway selection per lane:

  • Docker and Podman export OPENSHELL_GATEWAY for an mTLS gateway registered in a temporary config folder.
  • Kubernetes exports OPENSHELL_GATEWAY. The gateway is registered without TLS, or with mTLS for the TLS and OpenShift variants. Operator workspace mode still skips conformance.
  • VM exports only OPENSHELL_GATEWAY_ENDPOINT. testkit matches it to the active registered gateway and uses that gateway's mTLS certificates.

Testing

  • Checks appropriate to the affected code and behavior pass: cargo fmt, cargo clippy -D warnings (conformance package), lockfile alignment, markdownlint-cli2 TESTING.md, mise run license:check, shellcheck (no new warnings)
  • Unit tests added/updated (if applicable)
  • E2E tests added/updated (if applicable)

Local runs, 15/15 conformance tests passing in each:

Lane Time
Docker 64s
Docker external-driver 67s
Podman (macOS podman machine) 79s
Kubernetes (k3d, plaintext) 329s
Docker, push config delivery 54s

VM gateway selection was checked by recreating the VM lane's environment on Docker (only OPENSHELL_GATEWAY_ENDPOINT set). Running with a filter that matches no tests exits non-zero.

Not verified locally: the real VM and VM external-driver lanes, Kubernetes external-driver, and the Kubernetes TLS and OpenShift variants. The Docker E2E CI image does not include cargo-nextest. mise installs the pinned version in that image (checked locally), at the cost of one download per job.

Checklist

  • Follows Conventional Commits
  • Commits are signed off (DCO)
  • Architecture docs updated (if applicable)

@copy-pr-bot

copy-pr-bot Bot commented Oct 30, 2026

Copy link
Copy Markdown

Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually.

Contributors can view more details about this message here.

@matthewgrossman matthewgrossman added the test:e2e Requires end-to-end coverage label Oct 30, 2026
@matthewgrossman

Copy link
Copy Markdown
Member Author

/ok to test e0d2385

@github-actions

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown

Label test:e2e applied for e0d2385. Open Branch E2E Checks, find the run for commit e0d2385, and click Re-run all jobs to execute with the label set. The run will execute the standard E2E suite after building the required gateway, sandbox, and supervisor images once. The matching required CI gate status on this PR will flip green automatically once the run finishes.

@matthewgrossman
matthewgrossman force-pushed the test/3954-migrate-suites-to-testkit/matthewgrossman branch from 363f081 to 6726561 Compare November 2, 2026 04:19
Comment thread e2e/support/conformance.sh Resolved
Base automatically changed from test/3954-migrate-suites-to-testkit/matthewgrossman to main November 2, 2026 13:42
The Docker, Podman, Kubernetes and VM host lanes, including external-driver
mode and e2e:rust:push, now run the testkit `sandbox` package with nextest
instead of the old CLI conformance package. The tests find the lane's
gateway the same way the CLI does, through the OPENSHELL_GATEWAY_ENDPOINT
and OPENSHELL_GATEWAY values the gateway wrappers export, and `--no-tests
fail` makes a lane that selects no tests fail.

Signed-off-by: Matthew Grossman <mgrossman@nvidia.com>
Nothing runs tests/suites/conformance/cli now that the host lanes run the
testkit suite. Remove it from the conformance workspace and its lockfile,
drop the e2e:testkit exclusion for it, and point the TESTING.md manual run
at the `sandbox` package.

e2e:rust:push also loses its dependency on e2e:conformance:build, which no
longer exists, and the unused OPENSHELL_CONFORMANCE_BIN it set.
crates/openshell-conformance stays for the features and drivers suites.

Signed-off-by: Matthew Grossman <mgrossman@nvidia.com>
@matthewgrossman
matthewgrossman force-pushed the test/3954-host-lanes-to-testkit/matthewgrossman branch from e0d2385 to 41426f7 Compare November 2, 2026 16:30
@matthewgrossman

Copy link
Copy Markdown
Member Author

/ok to test 41426f7

The conformance workspace has one package now that the old CLI suite is gone, so run the whole workspace.

Signed-off-by: Matthew Grossman <mgrossman@nvidia.com>
@matthewgrossman

Copy link
Copy Markdown
Member Author

/ok to test 81cdd4e

Conformance is one crate per family, so the family directory is the crate: tests/suites/conformance/sandbox becomes the `conformance` package at tests/suites/conformance, with its suites still in tests/. The workspace manifest path, its lockfile and the scripts that run it by path are unchanged.

Nextest's binaries for these tests are now `conformance::<suite>`; test names are unchanged. The tmachine runner rows, the fmt and clippy lines and the docs name the new package.

Signed-off-by: Matthew Grossman <mgrossman@nvidia.com>
@matthewgrossman

Copy link
Copy Markdown
Member Author

/ok to test b6fad3c

@matthewgrossman

Copy link
Copy Markdown
Member Author

Pushed b6fad3c: renamed the conformance suite crate from sandbox to conformance. tests/suites/conformance is now the crate itself ([package] name = "conformance" plus an empty [workspace]), and the suites stay in tests/*.rs. The manifest path, Cargo.lock location, lockfile alignment, e2e/support/conformance.sh and e2e:testkit are unchanged. The tmachine runner rows, the fmt/clippy -p lines, TESTING.md, CI.md, e2e/policy-advisor/README.md (filter binary_id(=conformance::policy_advisor)) and the watch-github-actions skill now name conformance. nextest lists the same 15 tests as conformance::<suite>, and a local Docker conformance run passed 15/15.

krishicks
krishicks previously approved these changes Nov 2, 2026
@matthewgrossman
matthewgrossman added this pull request to the merge queue Nov 2, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to a conflict with the base branch Nov 2, 2026
…to-testkit/matthewgrossman

Signed-off-by: Matthew Grossman <mgrossman@nvidia.com>
@matthewgrossman

Copy link
Copy Markdown
Member Author

/ok to test aa7ce2e

@copy-pr-bot

copy-pr-bot Bot commented Nov 2, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@matthewgrossman
matthewgrossman added this pull request to the merge queue Nov 3, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Nov 3, 2026
@matthewgrossman
matthewgrossman added this pull request to the merge queue Nov 3, 2026
Merged via the queue into main with commit cc0642f Nov 3, 2026
213 of 220 checks passed
@matthewgrossman
matthewgrossman deleted the test/3954-host-lanes-to-testkit/matthewgrossman branch November 3, 2026 02:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

test:e2e Requires end-to-end coverage

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants