diff --git a/.github/workflows/branch-checks.yml b/.github/workflows/branch-checks.yml index 5437eddd32..1615a94925 100644 --- a/.github/workflows/branch-checks.yml +++ b/.github/workflows/branch-checks.yml @@ -141,6 +141,7 @@ jobs: shell: nix develop -c bash -euo pipefail {0} run: | cargo fmt --all -- --check + cargo fmt --manifest-path e2e/support/rust/Cargo.toml --all -- --check cargo fmt --manifest-path e2e/suites/conformance/Cargo.toml --all -- --check cargo fmt --manifest-path e2e/rust/Cargo.toml --all -- --check cargo fmt --manifest-path examples/governance-interceptor/Cargo.toml --all -- --check @@ -197,6 +198,7 @@ jobs: shell: nix develop -c bash -euo pipefail {0} run: | cargo clippy --locked --workspace --all-targets -- -D warnings + cargo clippy --locked --manifest-path e2e/support/rust/Cargo.toml --workspace --all-targets -- -D warnings cargo clippy --locked --manifest-path e2e/suites/conformance/Cargo.toml --workspace --all-targets -- -D warnings cargo clippy --locked --manifest-path e2e/rust/Cargo.toml --all-targets -- -D warnings cargo clippy --locked --manifest-path examples/governance-interceptor/Cargo.toml --all-targets -- -D warnings @@ -237,6 +239,7 @@ jobs: OPENSHELL_TELEMETRY_ENABLED: "false" run: | cargo nextest run --locked --profile ci --workspace --features openshell-server/test-support + cargo nextest run --locked --config-file .config/nextest.toml --profile ci --manifest-path e2e/support/rust/Cargo.toml cargo nextest run --locked --config-file .config/nextest.toml --profile ci --manifest-path e2e/suites/conformance/Cargo.toml --package openshell-test-conformance-cli -E 'binary(policy_advisor) & test(draft_assertion::tests::)' cargo nextest run --locked --config-file .config/nextest.toml --profile ci --manifest-path examples/supervisor-middleware-content-guard/Cargo.toml diff --git a/AGENTS.md b/AGENTS.md index c8e4c62df1..a4541af526 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -22,7 +22,6 @@ Do not rely on this file for a full inventory. The detailed public and contribut | Path | Components | Purpose | |------|-----------|---------| | `crates/openshell-cli/` | CLI binary | User-facing command-line interface | -| `crates/openshell-conformance/` | Conformance test support | Command execution, polling, diagnostics, and cleanup | | `crates/openshell-server/` | Gateway server | Control-plane API, sandbox lifecycle, auth boundary | | `crates/openshell-sandbox/` | Sandbox runtime | Capability-free workload launcher, process identity, and seccomp-mediated I/O | | `crates/openshell-supervisor/` | Supervisor runtime | Gateway session, policy evaluation, credentials, and upstream networking | @@ -61,7 +60,8 @@ Do not rely on this file for a full inventory. The detailed public and contribut | `python/openshell/` | Python SDK | Python bindings and CLI packaging | | `sdk/typescript/` | TypeScript SDK | Native Connect client, curated sandbox API, and generated protobuf types | | `proto/` | Protobuf definitions | gRPC service contracts | -| `e2e/suites/` | Behavioral E2E suites | Directly authored conformance stories | +| `e2e/suites/` | Behavioral E2E suites | Conformance stories; other suites remain in tests/suites | +| `e2e/support/rust/` | Shared Rust test tooling | CLI runner, binary resolution, output parsing, and port utilities | | `tests/` | Test provisioning | Target configuration, artifact construction, and Ansible setup | | `deploy/` | Docker, Helm, K8s | Dockerfiles, Helm chart, manifests | | `docs/` | Published docs | MDX pages, navigation, and content assets | diff --git a/CI.md b/CI.md index d7faddcdd4..9ca36baa60 100644 --- a/CI.md +++ b/CI.md @@ -578,8 +578,8 @@ jobs to the required status list while they remain in observation mode. ## Conformance source checks Branch Rust checks format and lint the separate -`e2e/suites/conformance` workspace. -The Rust test jobs include the conformance runner in the root workspace and select the pure policy assertion +`e2e/suites/conformance` workspace and shared tooling in `e2e/support/rust`. +The Rust test jobs run the shared tooling and select the pure policy assertion tests in the conformance CLI package with the CI nextest profile, without a gateway. Gateway-backed CLI tests retain their driver E2E and installed-artifact integration lanes; source unit-test jobs do not execute those entry points. diff --git a/Cargo.lock b/Cargo.lock index 6a2c214e2c..92d19fea83 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4295,17 +4295,6 @@ dependencies = [ "url", ] -[[package]] -name = "openshell-conformance" -version = "0.0.0" -dependencies = [ - "rand 0.9.4", - "serde", - "serde_json", - "tempfile", - "tokio", -] - [[package]] name = "openshell-core" version = "0.0.0" diff --git a/TESTING.md b/TESTING.md index f44045ca3c..bd6fe7e6ef 100644 --- a/TESTING.md +++ b/TESTING.md @@ -16,11 +16,14 @@ mise run ci # Everything: lint, compile checks, and tests - End-to-end tests exercise a configured OpenShell target through a client. - Benchmarks measure performance or scale separately from behavioral correctness. -Conformance stories under `e2e/suites/conformance/` verify required public behavior. -The [conformance guide](e2e/suites/conformance/README.md) owns their authoring and -execution guidance. Driver and feature suites remain under `tests/suites/`; -existing mixed suites remain under `e2e/rust/`. `tests/` also supplies provisioning -and artifact construction. +End-to-end suites are grouped by intent: conformance verifies +required public behavior, feature suites need a named external service or special +gateway configuration, and driver suites verify driver or host integration. +The [conformance guide](e2e/suites/conformance/README.md) owns conformance +requirements, authoring, and execution guidance. Existing mixed suites remain +under `e2e/rust/` while their behavior is migrated. `tests/` supplies provisioning +and artifact construction independently of the suite layout. Driver and feature +suites remain under `tests/suites/` pending their relocation. ## Test Layout @@ -29,7 +32,7 @@ crates/*/src/ # Inline #[cfg(test)] modules crates/*/tests/ # Rust integration tests python/openshell/ # Python unit tests (*_test.py suffix) e2e/python/ # Python E2E tests (test_*.py prefix) -e2e/rust/ # Rust CLI E2E tests +e2e/rust/ # Legacy Rust CLI E2E tests awaiting migration e2e/suites/conformance/ # Conformance stories tests/suites/ # Existing feature and driver suites tests/ # Target provisioning and artifact construction @@ -227,11 +230,10 @@ When more than one test needs this behavior, put the transport in the shared Rust e2e harness and require callers to use it instead of duplicating DNS, HTTP `Host`, TLS SNI, and mTLS handling. -Conformance command execution, polling, diagnostics, and cleanup remain in -`crates/openshell-conformance`. Story implementations live directly under -`e2e/suites/conformance/cli/tests`. `mise run test:rust` includes runner and pure -policy assertion tests without requiring a gateway. Existing Rust e2e tests -retain their own harness. +Shared Rust test tooling lives under `e2e/support/rust`, including the CLI runner, +binary resolution, output parsing, and port utilities. Conformance scenarios live +under `e2e/suites/conformance/cli/tests`. `mise run test:rust` includes the tooling +and scenario unit tests without requiring a gateway. Suites: diff --git a/crates/openshell-conformance/Cargo.toml b/crates/openshell-conformance/Cargo.toml deleted file mode 100644 index 01d301206a..0000000000 --- a/crates/openshell-conformance/Cargo.toml +++ /dev/null @@ -1,21 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: Apache-2.0 - -[package] -name = "openshell-conformance" -description = "OpenShell CLI conformance command runner and test support" -version.workspace = true -edition.workspace = true -rust-version.workspace = true -license.workspace = true -repository.workspace = true - -[dependencies] -rand.workspace = true -serde.workspace = true -serde_json.workspace = true -tempfile = "3" -tokio.workspace = true - -[lints] -workspace = true diff --git a/crates/openshell-conformance/README.md b/crates/openshell-conformance/README.md deleted file mode 100644 index e9b91fb0ac..0000000000 --- a/crates/openshell-conformance/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# Conformance test support - -This crate provides the existing CLI command runner, bounded polling, structured -output parsing, diagnostics, and explicit resource cleanup for conformance tests. - -Conformance stories and their assertions live directly in -[`e2e/suites/conformance`](../../e2e/suites/conformance/README.md). This crate does -not define scenarios or maintain a registry; Cargo discovers the tests. - -Runner consolidation with the existing Rust e2e harness remains separate work. diff --git a/e2e/rust/Cargo.lock b/e2e/rust/Cargo.lock index b5403e2ac3..e9d97e726d 100644 --- a/e2e/rust/Cargo.lock +++ b/e2e/rust/Cargo.lock @@ -899,6 +899,7 @@ dependencies = [ "jsonwebtoken", "nix", "noyalib", + "openshell-e2e-support", "prost", "rand", "rustls", @@ -918,6 +919,17 @@ dependencies = [ "url", ] +[[package]] +name = "openshell-e2e-support" +version = "0.0.0" +dependencies = [ + "rand", + "serde", + "serde_json", + "tempfile", + "tokio", +] + [[package]] name = "parking_lot" version = "0.12.5" diff --git a/e2e/rust/Cargo.toml b/e2e/rust/Cargo.toml index f7726e826b..80bbd58f7e 100644 --- a/e2e/rust/Cargo.toml +++ b/e2e/rust/Cargo.toml @@ -240,6 +240,7 @@ path = "tests/gpu.rs" required-features = ["e2e-gpu"] [dependencies] +openshell-e2e-support = { path = "../support/rust" } base64 = "0.22" bollard = "0.20" bytes = "1" diff --git a/e2e/rust/src/harness/mod.rs b/e2e/rust/src/harness/mod.rs index 86bf314a19..026ca26b26 100644 --- a/e2e/rust/src/harness/mod.rs +++ b/e2e/rust/src/harness/mod.rs @@ -3,11 +3,11 @@ //! Shared test harness modules for CLI e2e tests. -pub mod binary; +pub use openshell_e2e_support::binary; pub mod cli; pub mod container; pub mod gateway; pub mod host_process; -pub mod output; -pub mod port; +pub use openshell_e2e_support::output; +pub use openshell_e2e_support::port; pub mod sandbox; diff --git a/e2e/suites/conformance/Cargo.lock b/e2e/suites/conformance/Cargo.lock index 31a1d22320..e69774cab4 100644 --- a/e2e/suites/conformance/Cargo.lock +++ b/e2e/suites/conformance/Cargo.lock @@ -66,15 +66,6 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" -[[package]] -name = "lock_api" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" -dependencies = [ - "scopeguard", -] - [[package]] name = "memchr" version = "2.8.3" @@ -99,7 +90,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" [[package]] -name = "openshell-conformance" +name = "openshell-e2e-support" version = "0.0.0" dependencies = [ "rand", @@ -113,36 +104,13 @@ dependencies = [ name = "openshell-test-conformance-cli" version = "0.0.0" dependencies = [ - "openshell-conformance", + "openshell-e2e-support", "serde", "serde_json", "tempfile", "tokio", ] -[[package]] -name = "parking_lot" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-link", -] - [[package]] name = "pin-project-lite" version = "0.2.17" @@ -211,15 +179,6 @@ dependencies = [ "getrandom", ] -[[package]] -name = "redox_syscall" -version = "0.5.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" -dependencies = [ - "bitflags", -] - [[package]] name = "rustix" version = "1.1.5" @@ -233,12 +192,6 @@ dependencies = [ "windows-sys", ] -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - [[package]] name = "serde" version = "1.0.229" @@ -292,12 +245,6 @@ dependencies = [ "libc", ] -[[package]] -name = "smallvec" -version = "1.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba467056f1b547ed52077911161fc86985becbc60e8e1857c8a144dab0def891" - [[package]] name = "socket2" version = "0.6.5" @@ -352,7 +299,6 @@ dependencies = [ "bytes", "libc", "mio", - "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2", diff --git a/e2e/suites/conformance/README.md b/e2e/suites/conformance/README.md index 63a8023b55..f59a0bc1c8 100644 --- a/e2e/suites/conformance/README.md +++ b/e2e/suites/conformance/README.md @@ -14,10 +14,10 @@ The current areas are `file_transfer`, `lifecycle`, `policy_advisor`, and `smoke Each area compiles into one test binary; individual stories remain selectable by their module prefix. `main.rs` contains only module declarations. -CLI execution, polling, diagnostics, and cleanup remain in -`crates/openshell-conformance`. Story modules implement their tests directly; -Cargo and nextest provide discovery and selection. The runner crate contains no -scenario registry. Existing Rust e2e tests retain their separate harness. +Shared CLI execution, polling, diagnostics, and cleanup live in +[`e2e/support/rust`](../../support/rust/README.md), alongside the utilities used by +the existing Rust e2e tests. Story modules implement their tests directly; Cargo and nextest provide discovery and selection. Product crates must +not depend on the test tooling. For example, run only file-transfer round trips against a prepared gateway: @@ -32,7 +32,7 @@ OPENSHELL_BIN=/absolute/path/to/openshell \ Run shared tooling and scenario unit tests: ```shell -cargo test --locked --package openshell-conformance +cargo test --locked --manifest-path e2e/support/rust/Cargo.toml cargo test --locked --manifest-path e2e/suites/conformance/Cargo.toml \ --package openshell-test-conformance-cli --test policy_advisor draft_assertion::tests:: ``` @@ -115,7 +115,7 @@ and waiver handling remain implementation work. ## Migration scope The conformance workspace lives under `e2e/suites/conformance/`; feature and -driver suites remain under `tests/suites/`, alongside target provisioning. Existing +driver workspaces remain under `tests/suites/` until a separate relocation. Existing assertions and test identities are preserved. The legacy mixed suites under `e2e/rust/` still need classification and migration by behavioral intent. diff --git a/e2e/suites/conformance/cli/Cargo.toml b/e2e/suites/conformance/cli/Cargo.toml index efd7fe3417..1b1a7cd738 100644 --- a/e2e/suites/conformance/cli/Cargo.toml +++ b/e2e/suites/conformance/cli/Cargo.toml @@ -13,7 +13,7 @@ repository = "https://github.com/NVIDIA/OpenShell" serde = { version = "1", features = ["derive"] } serde_json = "1" tempfile = "3" -openshell-conformance = { path = "../../../../crates/openshell-conformance" } +openshell-e2e-support = { path = "../../../support/rust" } tokio = { version = "1.43", features = ["macros", "process", "rt", "time"] } [lints] diff --git a/e2e/suites/conformance/cli/tests/file_transfer/git_filtering.rs b/e2e/suites/conformance/cli/tests/file_transfer/git_filtering.rs index 8a1d0bb6e1..507caf2228 100644 --- a/e2e/suites/conformance/cli/tests/file_transfer/git_filtering.rs +++ b/e2e/suites/conformance/cli/tests/file_transfer/git_filtering.rs @@ -5,7 +5,7 @@ use super::helpers::{ delete_sandbox, download, exec, fs_error, git, git_init, prepare_sandbox, require_absent, require_exists, require_text, upload, upload_result, }; -use openshell_conformance::OpenShellRunner; +use openshell_e2e_support::OpenShellRunner; use std::fs; use std::path::Path; diff --git a/e2e/suites/conformance/cli/tests/file_transfer/helpers.rs b/e2e/suites/conformance/cli/tests/file_transfer/helpers.rs index 407419e592..2bffcf5da1 100644 --- a/e2e/suites/conformance/cli/tests/file_transfer/helpers.rs +++ b/e2e/suites/conformance/cli/tests/file_transfer/helpers.rs @@ -1,8 +1,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -use openshell_conformance::CommandResult; -use openshell_conformance::OpenShellRunner; +use openshell_e2e_support::CommandResult; +use openshell_e2e_support::OpenShellRunner; use std::fs; use std::path::Path; use std::process::Stdio; diff --git a/e2e/suites/conformance/cli/tests/file_transfer/path_safety.rs b/e2e/suites/conformance/cli/tests/file_transfer/path_safety.rs index c408fa7ea7..3dd4509e32 100644 --- a/e2e/suites/conformance/cli/tests/file_transfer/path_safety.rs +++ b/e2e/suites/conformance/cli/tests/file_transfer/path_safety.rs @@ -5,7 +5,7 @@ use super::helpers::{ delete_sandbox, download, download_result, exec, fs_error, prepare_sandbox, require_absent, require_text, }; -use openshell_conformance::OpenShellRunner; +use openshell_e2e_support::OpenShellRunner; use std::fs; use std::path::Path; diff --git a/e2e/suites/conformance/cli/tests/file_transfer/round_trip.rs b/e2e/suites/conformance/cli/tests/file_transfer/round_trip.rs index 74046fe5b2..acf0ace0fa 100644 --- a/e2e/suites/conformance/cli/tests/file_transfer/round_trip.rs +++ b/e2e/suites/conformance/cli/tests/file_transfer/round_trip.rs @@ -5,7 +5,7 @@ use super::helpers::{ LARGE_FILE_SIZE, delete_sandbox, download, exec, fs_error, prepare_sandbox, require_text, upload, upload_result, }; -use openshell_conformance::OpenShellRunner; +use openshell_e2e_support::OpenShellRunner; use std::fs; use std::path::Path; diff --git a/e2e/suites/conformance/cli/tests/lifecycle/delete_stopped.rs b/e2e/suites/conformance/cli/tests/lifecycle/delete_stopped.rs index 22f0c531b7..486c17a460 100644 --- a/e2e/suites/conformance/cli/tests/lifecycle/delete_stopped.rs +++ b/e2e/suites/conformance/cli/tests/lifecycle/delete_stopped.rs @@ -4,7 +4,7 @@ use super::helpers::{ create_running_sandbox, run_lifecycle_command, wait_for_absence, wait_for_phase, }; -use openshell_conformance::OpenShellRunner; +use openshell_e2e_support::OpenShellRunner; /// Verify a stopped sandbox can be deleted. #[tokio::test] diff --git a/e2e/suites/conformance/cli/tests/lifecycle/helpers.rs b/e2e/suites/conformance/cli/tests/lifecycle/helpers.rs index 41987074a0..f972141d80 100644 --- a/e2e/suites/conformance/cli/tests/lifecycle/helpers.rs +++ b/e2e/suites/conformance/cli/tests/lifecycle/helpers.rs @@ -1,8 +1,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -use openshell_conformance::OpenShellRunner; -use openshell_conformance::Poll; +use openshell_e2e_support::OpenShellRunner; +use openshell_e2e_support::Poll; use serde::Deserialize; use std::collections::HashSet; use std::time::Duration; diff --git a/e2e/suites/conformance/cli/tests/lifecycle/stop_start.rs b/e2e/suites/conformance/cli/tests/lifecycle/stop_start.rs index 03773f1894..8acd8c4ecf 100644 --- a/e2e/suites/conformance/cli/tests/lifecycle/stop_start.rs +++ b/e2e/suites/conformance/cli/tests/lifecycle/stop_start.rs @@ -5,7 +5,7 @@ use super::helpers::{ COMMAND_TIMEOUT, create_running_sandbox, exec_expect_exact, run_lifecycle_command, wait_for_phase, }; -use openshell_conformance::OpenShellRunner; +use openshell_e2e_support::OpenShellRunner; /// Verify stop/start preserves the workspace and restarts the main process. #[tokio::test] diff --git a/e2e/suites/conformance/cli/tests/policy_advisor/helpers.rs b/e2e/suites/conformance/cli/tests/policy_advisor/helpers.rs index 52f9757e76..6ab6403b78 100644 --- a/e2e/suites/conformance/cli/tests/policy_advisor/helpers.rs +++ b/e2e/suites/conformance/cli/tests/policy_advisor/helpers.rs @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 use super::draft_assertion::{ExpectedDraft, assert_mechanistic_draft}; -use openshell_conformance::OpenShellRunner; +use openshell_e2e_support::OpenShellRunner; use serde::Deserialize; use serde_json::Value; use std::time::Duration; diff --git a/e2e/suites/conformance/cli/tests/policy_advisor/mechanistic_proposal.rs b/e2e/suites/conformance/cli/tests/policy_advisor/mechanistic_proposal.rs index e7eb01e385..d3183f932b 100644 --- a/e2e/suites/conformance/cli/tests/policy_advisor/mechanistic_proposal.rs +++ b/e2e/suites/conformance/cli/tests/policy_advisor/mechanistic_proposal.rs @@ -6,7 +6,7 @@ use super::helpers::{ COMMAND_TIMEOUT, EMPTY_NETWORK_POLICY, await_mechanistic_draft, create_sandbox, enable_proposals, }; -use openshell_conformance::OpenShellRunner; +use openshell_e2e_support::OpenShellRunner; use serde_json::Value; use std::io::Write as _; use tempfile::NamedTempFile; diff --git a/e2e/suites/conformance/cli/tests/policy_advisor/new_hostname_proposal.rs b/e2e/suites/conformance/cli/tests/policy_advisor/new_hostname_proposal.rs index 283f26db81..88c47d7b21 100644 --- a/e2e/suites/conformance/cli/tests/policy_advisor/new_hostname_proposal.rs +++ b/e2e/suites/conformance/cli/tests/policy_advisor/new_hostname_proposal.rs @@ -6,7 +6,7 @@ use super::helpers::{ COMMAND_TIMEOUT, EMPTY_NETWORK_POLICY, await_mechanistic_draft, create_sandbox, sandbox_bash_path, }; -use openshell_conformance::OpenShellRunner; +use openshell_e2e_support::OpenShellRunner; use std::io::Write as _; use tempfile::NamedTempFile; diff --git a/e2e/suites/conformance/cli/tests/policy_advisor/policy_local.rs b/e2e/suites/conformance/cli/tests/policy_advisor/policy_local.rs index 0767bae1b2..5561e3363a 100644 --- a/e2e/suites/conformance/cli/tests/policy_advisor/policy_local.rs +++ b/e2e/suites/conformance/cli/tests/policy_advisor/policy_local.rs @@ -5,7 +5,7 @@ use super::helpers::{ COMMAND_TIMEOUT, POLL_INTERVAL, READY_TIMEOUT, create_sandbox, enable_proposals, sandbox_bash_path, }; -use openshell_conformance::OpenShellRunner; +use openshell_e2e_support::OpenShellRunner; use serde_json::Value; use std::time::Instant; use tokio::time::sleep; diff --git a/e2e/suites/conformance/cli/tests/smoke/sandbox_lifecycle.rs b/e2e/suites/conformance/cli/tests/smoke/sandbox_lifecycle.rs index 09b91107d8..b5f8376327 100644 --- a/e2e/suites/conformance/cli/tests/smoke/sandbox_lifecycle.rs +++ b/e2e/suites/conformance/cli/tests/smoke/sandbox_lifecycle.rs @@ -1,8 +1,8 @@ // SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -use openshell_conformance::OpenShellRunner; -use openshell_conformance::STATUS_TIMEOUT; +use openshell_e2e_support::OpenShellRunner; +use openshell_e2e_support::STATUS_TIMEOUT; use serde::Deserialize; use std::time::Duration; use std::time::Instant; diff --git a/e2e/support/rust/Cargo.lock b/e2e/support/rust/Cargo.lock new file mode 100644 index 0000000000..1c6fc5526e --- /dev/null +++ b/e2e/support/rust/Cargo.lock @@ -0,0 +1,375 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "bitflags" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" + +[[package]] +name = "bytes" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "fastrand" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasip2", +] + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "libc" +version = "0.2.189" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" + +[[package]] +name = "linux-raw-sys" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "mio" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b18443e9c262bfe8fa82f51666e2642c53393f7e5c27b3e1aeab922cff5b9d8" +dependencies = [ + "libc", + "wasi", + "windows-sys", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "openshell-e2e-support" +version = "0.0.0" +dependencies = [ + "rand", + "serde", + "serde_json", + "tempfile", + "tokio", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "rand" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" +dependencies = [ + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rustix" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys", +] + +[[package]] +name = "serde" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "serde_json" +version = "1.0.151" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" +dependencies = [ + "errno", + "libc", +] + +[[package]] +name = "socket2" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "syn" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12df2e0110f65b775f769bb17ef989067a1d931b2eb822bd4346631eeada89f9" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tempfile" +version = "3.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" +dependencies = [ + "fastrand", + "getrandom", + "once_cell", + "rustix", + "windows-sys", +] + +[[package]] +name = "tokio" +version = "1.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" +dependencies = [ + "bytes", + "libc", + "mio", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys", +] + +[[package]] +name = "tokio-macros" +version = "2.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.4+wasi-0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + +[[package]] +name = "zerocopy" +version = "0.8.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d35102a9f36d089ccae9e4c6802bc118be4487b80aaffc0ab4e0cf5ce92d2873" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c01f5ab44258da43cf276c74a2763db2ff3969c9c652c3f2de07041d0b2bc" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/e2e/support/rust/Cargo.toml b/e2e/support/rust/Cargo.toml new file mode 100644 index 0000000000..c40bfb6257 --- /dev/null +++ b/e2e/support/rust/Cargo.toml @@ -0,0 +1,49 @@ +# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +[workspace] + +[package] +name = "openshell-e2e-support" +description = "Shared Rust tooling for OpenShell end-to-end tests" +version = "0.0.0" +edition = "2024" +rust-version = "1.94" +license = "Apache-2.0" +publish = false + +[dependencies] +rand = "0.9" +serde = { version = "1", features = ["derive"] } +serde_json = "1" +tempfile = "3" +tokio = { version = "1.43", features = ["macros", "process", "rt", "time", "net"] } + +[lints.rust] +unsafe_code = "warn" +rust_2018_idioms = { level = "warn", priority = -1 } +trivial_casts = "warn" +trivial_numeric_casts = "warn" +unused_lifetimes = "warn" +unused_qualifications = "warn" + +[lints.clippy] +all = { level = "warn", priority = -1 } +pedantic = { level = "warn", priority = -1 } +nursery = { level = "warn", priority = -1 } + +# Allow certain pedantic lints that are too noisy +module_name_repetitions = "allow" +must_use_candidate = "allow" +missing_errors_doc = "allow" +missing_panics_doc = "allow" + +# Allow noisy nursery lints +significant_drop_tightening = "allow" # Often gives incorrect suggestions +missing_const_for_fn = "allow" # Too noisy for async code patterns + +# Allow noisy pedantic lints +too_many_lines = "allow" # Function length limits are subjective +needless_pass_by_value = "allow" # Common pattern in async handlers +ref_option = "allow" # Common pattern for optional references +missing_fields_in_debug = "allow" # Manual Debug impls often intentionally omit fields diff --git a/e2e/support/rust/README.md b/e2e/support/rust/README.md new file mode 100644 index 0000000000..3ea4339656 --- /dev/null +++ b/e2e/support/rust/README.md @@ -0,0 +1,30 @@ +# Shared Rust e2e tooling + +`openshell-e2e-support` provides tooling for conformance, feature, driver, and +existing Rust e2e tests. It is a standalone test crate; product crates must not +depend on it. + +- The CLI runner captures stdout, stderr, exit status, duration, and diagnostic + context. Commands have explicit timeouts, and polling preserves the last + observation on failure. +- Resource tracking cleans up explicitly registered sandboxes through `finish()` + and retains the original test failure when cleanup also fails. +- `executor` provides process execution and an injectable boundary for unit tests. +- `binary` resolves `OPENSHELL_BIN` or a previously built checkout CLI and supports + PTY invocation. Archive-based suites use `OpenShellRunner::from_env()` to require + an explicit candidate binary. +- `output` parses CLI text and strips ANSI formatting. +- `port` provides TCP readiness checks and available-port discovery. + +Conformance scenarios remain in `e2e/suites/conformance/cli/tests`. Container +fixtures, gateway restart controls, and suite-specific workload defaults remain +in the existing `openshell-e2e` harness. That harness re-exports `binary`, `output`, +and `port` to preserve existing test imports. + +Run the tooling unit tests without a gateway: + +```shell +cargo test --locked --manifest-path e2e/support/rust/Cargo.toml +``` + +`mise run test:rust` and branch Rust checks include these tests. diff --git a/e2e/rust/src/harness/binary.rs b/e2e/support/rust/src/binary.rs similarity index 97% rename from e2e/rust/src/harness/binary.rs rename to e2e/support/rust/src/binary.rs index 4cf87c4c87..9d3af35c33 100644 --- a/e2e/rust/src/harness/binary.rs +++ b/e2e/support/rust/src/binary.rs @@ -12,10 +12,10 @@ use std::path::{Path, PathBuf}; /// Locate the workspace root by walking up from the crate's manifest directory. fn workspace_root() -> PathBuf { let manifest_dir = Path::new(env!("CARGO_MANIFEST_DIR")); - // e2e/rust/ is two levels below the workspace root. + // e2e/support/rust/ is three levels below the workspace root. manifest_dir .ancestors() - .nth(2) + .nth(3) .expect("failed to resolve workspace root from CARGO_MANIFEST_DIR") .to_path_buf() } diff --git a/crates/openshell-conformance/src/executor.rs b/e2e/support/rust/src/executor.rs similarity index 100% rename from crates/openshell-conformance/src/executor.rs rename to e2e/support/rust/src/executor.rs diff --git a/crates/openshell-conformance/src/lib.rs b/e2e/support/rust/src/lib.rs similarity index 99% rename from crates/openshell-conformance/src/lib.rs rename to e2e/support/rust/src/lib.rs index 4370e88948..0f3a1f183d 100644 --- a/crates/openshell-conformance/src/lib.rs +++ b/e2e/support/rust/src/lib.rs @@ -1,9 +1,12 @@ // SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -//! Command execution, polling, diagnostics, and cleanup for `OpenShell` conformance tests. +//! Shared CLI runner and utilities for `OpenShell` end-to-end tests. +pub mod binary; pub mod executor; +pub mod output; +pub mod port; use std::collections::BTreeSet; use std::error::Error; @@ -209,7 +212,7 @@ struct AuthenticationOutput { status: String, } -/// Runs `OpenShell` commands for one conformance scenario and owns its cleanup. +/// Runs `OpenShell` commands for one test scenario and owns its cleanup. pub struct OpenShellRunner { cli: Arc, run_id: String, diff --git a/e2e/rust/src/harness/output.rs b/e2e/support/rust/src/output.rs similarity index 100% rename from e2e/rust/src/harness/output.rs rename to e2e/support/rust/src/output.rs diff --git a/e2e/rust/src/harness/port.rs b/e2e/support/rust/src/port.rs similarity index 100% rename from e2e/rust/src/harness/port.rs rename to e2e/support/rust/src/port.rs diff --git a/tasks/rust.toml b/tasks/rust.toml index f1f7dbdfaf..a89a2313eb 100644 --- a/tasks/rust.toml +++ b/tasks/rust.toml @@ -12,6 +12,7 @@ description = "Check all Rust crates for errors" depends = ["rust:lockfiles:check"] run = [ "cargo check --workspace", + "cargo check --locked --manifest-path e2e/support/rust/Cargo.toml --workspace --all-targets", "cargo check --locked --manifest-path e2e/suites/conformance/Cargo.toml --workspace --all-targets", "cargo check -p openshell-sandbox --all-targets --features perf-harness", ] @@ -29,6 +30,7 @@ description = "Lint Rust code with Clippy (deny warnings)" depends = ["rust:lockfiles:check"] run = [ "cargo clippy --workspace --all-targets -- -D warnings", + "cargo clippy --locked --manifest-path e2e/support/rust/Cargo.toml --workspace --all-targets -- -D warnings", "cargo clippy --locked --manifest-path e2e/suites/conformance/Cargo.toml --workspace --all-targets -- -D warnings", "cargo clippy -p openshell-sandbox --all-targets --features perf-harness -- -D warnings", "cargo clippy --manifest-path e2e/rust/Cargo.toml --all-targets -- -D warnings", @@ -42,6 +44,7 @@ hide = true description = "Format Rust code" run = [ "cargo fmt --all", + "cargo fmt --manifest-path e2e/support/rust/Cargo.toml --all", "cargo fmt --manifest-path e2e/suites/conformance/Cargo.toml --all", "cargo fmt --manifest-path e2e/rust/Cargo.toml --all", "cargo fmt --manifest-path examples/governance-interceptor/Cargo.toml --all", @@ -53,6 +56,7 @@ hide = true description = "Check Rust formatting" run = [ "cargo fmt --all -- --check", + "cargo fmt --manifest-path e2e/support/rust/Cargo.toml --all -- --check", "cargo fmt --manifest-path e2e/suites/conformance/Cargo.toml --all -- --check", "cargo fmt --manifest-path e2e/rust/Cargo.toml --all -- --check", "cargo fmt --manifest-path examples/governance-interceptor/Cargo.toml --all -- --check", diff --git a/tasks/test.toml b/tasks/test.toml index a72dfc08ac..2c95d18b6b 100644 --- a/tasks/test.toml +++ b/tasks/test.toml @@ -115,6 +115,7 @@ run = [ # with test-only helpers enabled. "cargo test --workspace --exclude openshell-server", "cargo test -p openshell-server --features test-support", + "cargo test --locked --manifest-path e2e/support/rust/Cargo.toml", "cargo test --locked --manifest-path e2e/suites/conformance/Cargo.toml --package openshell-test-conformance-cli --test policy_advisor draft_assertion::tests::", "cargo nextest run --config-file .config/nextest.toml --manifest-path examples/supervisor-middleware-content-guard/Cargo.toml", ] diff --git a/tests/suites/drivers/Cargo.lock b/tests/suites/drivers/Cargo.lock index 6b013452fe..17daf87176 100644 --- a/tests/suites/drivers/Cargo.lock +++ b/tests/suites/drivers/Cargo.lock @@ -66,15 +66,6 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" -[[package]] -name = "lock_api" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" -dependencies = [ - "scopeguard", -] - [[package]] name = "memchr" version = "2.8.3" @@ -99,7 +90,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" [[package]] -name = "openshell-conformance" +name = "openshell-e2e-support" version = "0.0.0" dependencies = [ "rand", @@ -113,34 +104,11 @@ dependencies = [ name = "openshell-test-suite-podman" version = "0.0.0" dependencies = [ - "openshell-conformance", + "openshell-e2e-support", "serde", "tokio", ] -[[package]] -name = "parking_lot" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-link", -] - [[package]] name = "pin-project-lite" version = "0.2.17" @@ -209,15 +177,6 @@ dependencies = [ "getrandom", ] -[[package]] -name = "redox_syscall" -version = "0.5.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" -dependencies = [ - "bitflags", -] - [[package]] name = "rustix" version = "1.1.5" @@ -231,12 +190,6 @@ dependencies = [ "windows-sys", ] -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - [[package]] name = "serde" version = "1.0.229" @@ -290,12 +243,6 @@ dependencies = [ "libc", ] -[[package]] -name = "smallvec" -version = "1.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba467056f1b547ed52077911161fc86985becbc60e8e1857c8a144dab0def891" - [[package]] name = "socket2" version = "0.6.5" @@ -350,7 +297,6 @@ dependencies = [ "bytes", "libc", "mio", - "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2", diff --git a/tests/suites/drivers/podman/Cargo.toml b/tests/suites/drivers/podman/Cargo.toml index 1a06b69e8d..a7423dae1a 100644 --- a/tests/suites/drivers/podman/Cargo.toml +++ b/tests/suites/drivers/podman/Cargo.toml @@ -10,6 +10,6 @@ license = "Apache-2.0" repository = "https://github.com/NVIDIA/OpenShell" [dependencies] -openshell-conformance = { path = "../../../../crates/openshell-conformance" } +openshell-e2e-support = { path = "../../../../e2e/support/rust" } serde = { version = "1", features = ["derive"] } tokio = { version = "1.43", features = ["macros", "rt"] } diff --git a/tests/suites/drivers/podman/tests/default_userns.rs b/tests/suites/drivers/podman/tests/default_userns.rs index 95cb8c814f..ce5f81ab20 100644 --- a/tests/suites/drivers/podman/tests/default_userns.rs +++ b/tests/suites/drivers/podman/tests/default_userns.rs @@ -5,7 +5,7 @@ mod support; -use openshell_conformance::OpenShellRunner; +use openshell_e2e_support::OpenShellRunner; use std::fs; use std::path::PathBuf; use std::time::Duration; diff --git a/tests/suites/drivers/podman/tests/support/mod.rs b/tests/suites/drivers/podman/tests/support/mod.rs index 5bde19b0c1..1cdaf7100b 100644 --- a/tests/suites/drivers/podman/tests/support/mod.rs +++ b/tests/suites/drivers/podman/tests/support/mod.rs @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -use openshell_conformance::OpenShellRunner; +use openshell_e2e_support::OpenShellRunner; use serde::Deserialize; use std::time::Duration; diff --git a/tests/suites/features/Cargo.lock b/tests/suites/features/Cargo.lock index 23f2ab0c61..8eeeefd538 100644 --- a/tests/suites/features/Cargo.lock +++ b/tests/suites/features/Cargo.lock @@ -874,17 +874,6 @@ version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" -[[package]] -name = "openshell-conformance" -version = "0.0.0" -dependencies = [ - "rand", - "serde", - "serde_json", - "tempfile", - "tokio", -] - [[package]] name = "openshell-e2e" version = "0.1.0" @@ -900,6 +889,7 @@ dependencies = [ "jsonwebtoken", "nix", "noyalib", + "openshell-e2e-support", "prost", "rand", "rustls", @@ -918,11 +908,21 @@ dependencies = [ "url", ] +[[package]] +name = "openshell-e2e-support" +version = "0.0.0" +dependencies = [ + "rand", + "serde", + "serde_json", + "tempfile", + "tokio", +] + [[package]] name = "openshell-test-feature-provider-refresh-keycloak" version = "0.0.0" dependencies = [ - "openshell-conformance", "openshell-e2e", "serde_json", "tempfile", diff --git a/tests/suites/features/provider-refresh/keycloak/Cargo.toml b/tests/suites/features/provider-refresh/keycloak/Cargo.toml index f42a1c8bd7..d2c7995618 100644 --- a/tests/suites/features/provider-refresh/keycloak/Cargo.toml +++ b/tests/suites/features/provider-refresh/keycloak/Cargo.toml @@ -7,7 +7,6 @@ version = "0.0.0" edition = "2024" [dependencies] -openshell-conformance = { path = "../../../../../crates/openshell-conformance" } openshell-e2e = { path = "../../../../../e2e/rust" } serde_json = "1" tempfile = "3"