Skip to content

Commit a2982bf

Browse files
fix(ci): restore default e2e coverage with a Kubernetes recovery waiver (#4424)
* fix(ci): make conformance-only e2e selection explicit Signed-off-by: Evan Lezar <elezar@nvidia.com> * fix(ci): use mapped NodePort for kind gateway sessions Signed-off-by: Evan Lezar <elezar@nvidia.com> * fix(ci): waive SSH transport recovery only on Kubernetes Signed-off-by: Evan Lezar <elezar@nvidia.com> * fix(e2e): log a notice when runners skip Rust e2e tests Emit a GitHub Actions notice from the Docker, Podman, Kubernetes, and VM runners when e2e-conformance-only skips the Rust tests, so a narrowed lane is visible in the job summary instead of silently reporting success. Signed-off-by: Matthew Grossman <mgrossman@nvidia.com> * docs(testing): move e2e conformance-only selector to shared section The selector applies to all four driver runners, so document it with the Rust CLI e2e suites instead of under the Kubernetes task variants. Signed-off-by: Matthew Grossman <mgrossman@nvidia.com> --------- Signed-off-by: Evan Lezar <elezar@nvidia.com> Signed-off-by: Matthew Grossman <mgrossman@nvidia.com> Co-authored-by: Matthew Grossman <mgrossman@nvidia.com>
1 parent 8fcba28 commit a2982bf

8 files changed

Lines changed: 46 additions & 13 deletions

File tree

‎.config/nextest.toml‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ failure-output = "immediate-final"
1010
slow-timeout = { period = "30s", terminate-after = 4 }
1111

1212
[profile.e2e-kubernetes]
13+
# Temporary waiver: port-forward reconnect can attach read-only while the old
14+
# SSH session retains stdin ownership. Keep recovery coverage on other drivers.
15+
# Remove this exclusion after resolving https://github.com/NVIDIA/OpenShell/issues/4445.
16+
default-filter = "not test(/^canonical_main_connect_recovers_its_ssh_transport$/)"
1317
fail-fast = false
1418
status-level = "slow"
1519
final-status-level = "fail"

‎.github/workflows/e2e-kubernetes-test.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ on:
4848
type: string
4949
default: ""
5050
kubernetes-features:
51-
description: "Cargo feature list for the Kubernetes e2e crate (uses script defaults when empty)"
51+
description: "Cargo feature list for Kubernetes e2e (defaults when empty; e2e-conformance-only skips Rust tests)"
5252
required: false
5353
type: string
5454
default: ""

‎TESTING.md‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,18 @@ Suites:
249249
- VM suite (`--features e2e-vm`) - runs e2e tests on a VM.
250250
- Kubernetes credential-driver suite (`--features e2e-kubernetes-credential-drivers`) - targeted Kubernetes Secrets and Vault provider credential storage coverage.
251251

252+
The Docker, Podman, Kubernetes, and VM runners execute CLI
253+
conformance before their Rust tests. Set the driver's feature variable
254+
(`OPENSHELL_E2E_DOCKER_FEATURES`, `OPENSHELL_E2E_PODMAN_FEATURES`,
255+
`OPENSHELL_E2E_KUBERNETES_FEATURES`, or `OPENSHELL_E2E_VM_FEATURES`) to
256+
`e2e-conformance-only` to skip the Rust tests; the runner logs a notice when
257+
it skips them. Unset or empty values select the driver's default Rust
258+
features. The selector is handled by the runner; it is not a Cargo feature.
259+
260+
```shell
261+
OPENSHELL_E2E_KUBERNETES_FEATURES=e2e-conformance-only mise run e2e:kubernetes
262+
```
263+
252264
GPU device-selection tests compare OpenShell sandboxes against a plain Docker or
253265
Podman container that requests `--device nvidia.com/gpu=all`. The probe image
254266
defaults to the image used by the `gateway` stage in
@@ -389,6 +401,12 @@ mise run e2e:kubernetes:credential-drivers
389401

390402
### Kubernetes E2E (`e2e/rust/e2e-kubernetes.sh`)
391403

404+
The `e2e-kubernetes` nextest profile temporarily excludes only
405+
`canonical_main_connect_recovers_its_ssh_transport` while
406+
[#4445](https://github.com/NVIDIA/OpenShell/issues/4445) investigates delayed SSH
407+
input-owner release through port-forwarding. The test remains available to other
408+
driver profiles; the remaining Kubernetes tests stay enabled.
409+
392410
Kubernetes e2e tests deploy an OpenShell gateway into a real Kubernetes cluster
393411
via Helm and run the Rust e2e suite against it. On vanilla Kubernetes the harness
394412
reaches the gateway through `kubectl port-forward`; on OpenShift it instead uses a

‎e2e/rust/e2e-docker.sh‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ set -euo pipefail
1111

1212
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
1313
E2E_TEST="${OPENSHELL_E2E_DOCKER_TEST:-}"
14-
E2E_FEATURES="${OPENSHELL_E2E_DOCKER_FEATURES-e2e-docker}"
14+
# Unset or empty selects Rust defaults; e2e-conformance-only skips Rust tests.
15+
E2E_FEATURES="${OPENSHELL_E2E_DOCKER_FEATURES:-e2e-docker}"
1516
DEFAULT_WORKLOAD_MANIFEST="${ROOT}/e2e/gpu/images/.build/workloads.yaml"
1617
RUN_WITH_GATEWAY_COMMAND="__openshell_run_docker_e2e"
1718
# shellcheck source=e2e/support/conformance.sh
@@ -20,7 +21,8 @@ source "${ROOT}/e2e/support/conformance.sh"
2021
run_e2e() {
2122
e2e_run_openshell_conformance "Docker"
2223

23-
if [ -z "${E2E_FEATURES}" ]; then
24+
if [ "${E2E_FEATURES}" = "e2e-conformance-only" ]; then
25+
echo "::notice::Skipping Rust e2e tests (e2e-conformance-only)"
2426
return 0
2527
fi
2628

@@ -44,7 +46,7 @@ if [ "${1:-}" = "${RUN_WITH_GATEWAY_COMMAND}" ]; then
4446
exit 0
4547
fi
4648

47-
if [ -n "${E2E_FEATURES}" ]; then
49+
if [ "${E2E_FEATURES}" != "e2e-conformance-only" ]; then
4850
CONTAINER_ENGINE=docker bash "${ROOT}/tasks/scripts/e2e-build-workload.sh"
4951
fi
5052

‎e2e/rust/e2e-kubernetes.sh‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ RUN_WITH_GATEWAY_COMMAND="__openshell_run_kubernetes_e2e"
2626
# shellcheck source=e2e/support/conformance.sh
2727
source "${ROOT}/e2e/support/conformance.sh"
2828

29-
E2E_FEATURES="${OPENSHELL_E2E_KUBERNETES_FEATURES-e2e,e2e-host-gateway,e2e-kubernetes}"
29+
# Unset or empty selects Rust defaults; e2e-conformance-only skips Rust tests.
30+
E2E_FEATURES="${OPENSHELL_E2E_KUBERNETES_FEATURES:-e2e,e2e-host-gateway,e2e-kubernetes}"
3031

3132
# Fixed output path of the `e2e-kubernetes` nextest profile (`.config/nextest.toml`).
3233
JUNIT_XML="${ROOT}/results/e2e-kubernetes.xml"
@@ -90,7 +91,8 @@ run_suite() {
9091

9192
run_e2e() {
9293
run_conformance
93-
if [ -z "${E2E_FEATURES}" ]; then
94+
if [ "${E2E_FEATURES}" = "e2e-conformance-only" ]; then
95+
echo "::notice::Skipping Rust e2e tests (e2e-conformance-only)"
9496
return 0
9597
fi
9698

‎e2e/rust/e2e-podman.sh‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ set -euo pipefail
1111
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
1212
E2E_TEST="${OPENSHELL_E2E_PODMAN_TEST:-}"
1313
E2E_TEST_SET="${OPENSHELL_E2E_PODMAN_TEST_SET:-}"
14-
E2E_FEATURES="${OPENSHELL_E2E_PODMAN_FEATURES-e2e-podman}"
14+
# Unset or empty selects Rust defaults; e2e-conformance-only skips Rust tests.
15+
E2E_FEATURES="${OPENSHELL_E2E_PODMAN_FEATURES:-e2e-podman}"
1516
DEFAULT_WORKLOAD_MANIFEST="${ROOT}/e2e/gpu/images/.build/workloads.yaml"
1617
RUN_WITH_GATEWAY_COMMAND="__openshell_run_podman_e2e"
1718
# shellcheck source=e2e/support/conformance.sh
@@ -72,7 +73,8 @@ fi
7273

7374
if [ "${1:-}" = "${RUN_WITH_GATEWAY_COMMAND}" ]; then
7475
e2e_run_openshell_conformance "Podman"
75-
if [ -z "${E2E_FEATURES}" ]; then
76+
if [ "${E2E_FEATURES}" = "e2e-conformance-only" ]; then
77+
echo "::notice::Skipping Rust e2e tests (e2e-conformance-only)"
7678
exit 0
7779
fi
7880

@@ -98,7 +100,7 @@ if [ -n "${OPENSHELL_GATEWAY_ENDPOINT:-}" ] && [ -z "${OPENSHELL_BIN:-}" ]; then
98100
export OPENSHELL_BIN="${ROOT}/target/debug/openshell"
99101
fi
100102

101-
if [ -n "${E2E_FEATURES}" ]; then
103+
if [ "${E2E_FEATURES}" != "e2e-conformance-only" ]; then
102104
CONTAINER_ENGINE=podman bash "${ROOT}/tasks/scripts/e2e-build-workload.sh"
103105
fi
104106

‎e2e/rust/e2e-vm.sh‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ GATEWAY_BIN="${OPENSHELL_GATEWAY_BIN:-${ROOT}/target/debug/openshell-gateway}"
5050
DRIVER_BIN="${OPENSHELL_VM_DRIVER_BIN:-${ROOT}/target/debug/openshell-driver-vm}"
5151
CLI_BIN="${OPENSHELL_BIN:-${ROOT}/target/debug/openshell}"
5252
E2E_TEST_OVERRIDE="${OPENSHELL_E2E_VM_TEST:-}"
53-
E2E_FEATURES="${OPENSHELL_E2E_VM_FEATURES-e2e-vm}"
53+
# Unset or empty selects Rust defaults; e2e-conformance-only skips Rust tests.
54+
E2E_FEATURES="${OPENSHELL_E2E_VM_FEATURES:-e2e-vm}"
5455
SANDBOX_IMAGE="${OPENSHELL_SANDBOX_IMAGE:-nvcr.io/nvidia/base/ubuntu:24.04}"
5556

5657
# The VM driver places `compute-driver.sock` under `[openshell.drivers.vm].state_dir`.
@@ -405,6 +406,10 @@ e2e_export_gateway_restart_metadata \
405406
export OPENSHELL_PROVISION_TIMEOUT="${SANDBOX_PROVISION_TIMEOUT}"
406407

407408
e2e_run_openshell_conformance "VM"
409+
if [ "${E2E_FEATURES}" = "e2e-conformance-only" ]; then
410+
echo "::notice::Skipping Rust e2e tests (e2e-conformance-only)"
411+
exit 0
412+
fi
408413

409414
# Seed the catalog once for the whole lane. The profiles live in the gateway
410415
# for as long as it runs, and the import is create-only: a second import of

‎tasks/test.toml‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -273,12 +273,12 @@ run = "bash e2e/no-compute-driver-gateway.sh"
273273

274274
["e2e:docker:external-driver"]
275275
description = "Run Docker conformance with a driver-free gateway and external Docker driver binary"
276-
env = { OPENSHELL_E2E_EXTERNAL_COMPUTE_DRIVER = "1", OPENSHELL_E2E_DOCKER_FEATURES = "" }
276+
env = { OPENSHELL_E2E_EXTERNAL_COMPUTE_DRIVER = "1", OPENSHELL_E2E_DOCKER_FEATURES = "e2e-conformance-only" }
277277
run = "e2e/rust/e2e-docker.sh"
278278

279279
["e2e:podman:external-driver"]
280280
description = "Run Podman conformance with a driver-free gateway and external Podman driver binary"
281-
env = { OPENSHELL_E2E_EXTERNAL_COMPUTE_DRIVER = "1", OPENSHELL_E2E_PODMAN_FEATURES = "" }
281+
env = { OPENSHELL_E2E_EXTERNAL_COMPUTE_DRIVER = "1", OPENSHELL_E2E_PODMAN_FEATURES = "e2e-conformance-only" }
282282
run = "e2e/rust/e2e-podman.sh"
283283

284284
["e2e:vm:external-driver"]
@@ -288,7 +288,7 @@ run = "e2e/rust/e2e-vm.sh"
288288

289289
["e2e:kubernetes:external-driver"]
290290
description = "Run Kubernetes conformance with a driver-free gateway and external Kubernetes driver"
291-
env = { OPENSHELL_E2E_EXTERNAL_COMPUTE_DRIVER = "1", OPENSHELL_E2E_KUBE_BUILD_IMAGES = "1", OPENSHELL_E2E_KUBERNETES_FEATURES = "" }
291+
env = { OPENSHELL_E2E_EXTERNAL_COMPUTE_DRIVER = "1", OPENSHELL_E2E_KUBE_BUILD_IMAGES = "1", OPENSHELL_E2E_KUBERNETES_FEATURES = "e2e-conformance-only" }
292292
run = "e2e/rust/e2e-kubernetes.sh"
293293

294294
["e2e:docker"]

0 commit comments

Comments
 (0)