Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
397 commits
Select commit Hold shift + click to select a range
8183f8c
test: allow clients without Gateway endpoints
kvinwang Aug 8, 2026
a6363e4
test: run guest compatibility on physical TDX
kvinwang Aug 8, 2026
95fb4a9
test: prepare physical compatibility collateral
kvinwang Aug 8, 2026
2d5de85
test(verifier): avoid fixed cc-eventlog test count
kvinwang Aug 8, 2026
ab47c96
test: prepare simulator collateral before guest boot
kvinwang Aug 8, 2026
9de6fa4
test: prepare simulated identity image variant
kvinwang Aug 8, 2026
75c162f
test(simulator): restore SEV-SNP ABI regression coverage
kvinwang Aug 8, 2026
5755ecb
test(kms): prepare nested contract dependencies
kvinwang Aug 8, 2026
dca2c45
test(kms): probe event audit contract fixtures
kvinwang Aug 8, 2026
18bd5fa
test(kms): probe runtime contract fixtures
kvinwang Aug 8, 2026
d781fbd
test(guest): wait for bind conflict cleanup
kvinwang Aug 9, 2026
139edf0
test(gateway): synchronize concurrent renewal requests
kvinwang Aug 9, 2026
8c87bbd
test(guest): cancel bind conflict restart jobs
kvinwang Aug 9, 2026
718c0ed
test(gateway): prepare allocation wireguard fixture
kvinwang Aug 9, 2026
f2f1a9a
test(gateway): establish distributed renewal contention
kvinwang Aug 9, 2026
49cf78b
test(gateway): isolate allocation recycle phase
kvinwang Aug 9, 2026
ed3c32a
test(integration): retry rolling KMS metadata probes
kvinwang Aug 9, 2026
dd31616
test(platform): wait for sealing provider recovery
kvinwang Aug 9, 2026
1199de6
test(harness): probe lifecycle readiness deterministically
kvinwang Aug 9, 2026
75cd301
test(gateway): align allocation and renewal invariants
kvinwang Aug 9, 2026
e16c069
test(integration): await bounded KMS boot failure
kvinwang Aug 10, 2026
98c6f4a
test(gateway): recheck distributed renewal freshness
kvinwang Aug 10, 2026
3262f8f
test(provider): retry transient sealing startup
kvinwang Aug 10, 2026
7f58a7a
test(harness): harden runtime readiness probes
kvinwang Aug 10, 2026
0b55688
test(vmm): probe the browser endpoint directly
kvinwang Aug 10, 2026
8ef3215
test(plan): cover post-baseline merged regressions
kvinwang Aug 14, 2026
07ce5f1
test(plan): refresh post-merge harness expectations
kvinwang Aug 14, 2026
4314cb8
test(plan): align ACPI measurement matrix
kvinwang Aug 14, 2026
27c3942
test(plan): harden dependency-backed harnesses
kvinwang Aug 14, 2026
2b3aee8
test(plan): run prepared Playwright offline
kvinwang Aug 14, 2026
92feed0
test(plan): make UI browser execution deterministic
kvinwang Aug 14, 2026
98e7342
test(plan): preserve expected stargz failures
kvinwang Aug 14, 2026
67a3549
test(plan): unmount stale stargz snapshots
kvinwang Aug 14, 2026
21818c6
test(plan): use persistent stargz storage
kvinwang Aug 14, 2026
ea9393b
test(plan): wait for stargz unmounts
kvinwang Aug 14, 2026
60270b9
test(plan): preserve concurrent pull failures
kvinwang Aug 14, 2026
10d4a83
test(plan): deterministically corrupt stargz layer
kvinwang Aug 14, 2026
aac590f
test(plan): accept truncated stargz diagnostics
kvinwang Aug 14, 2026
5c4a968
test(plan): assert corrupt stargz rejection by status
kvinwang Aug 14, 2026
5cbd8ee
test(plan): assert stargz outages by status
kvinwang Aug 14, 2026
35381d3
test(plan): force remote stargz corruption path
kvinwang Aug 14, 2026
9da5d9e
test(plan): zero corrupt stargz layer
kvinwang Aug 14, 2026
4331a89
test(plan): clear stargz cache before corruption
kvinwang Aug 14, 2026
49930fc
test(plan): restart registry after layer corruption
kvinwang Aug 14, 2026
70fb069
test(gateway): cover multi-cluster CVM registration
kvinwang Aug 17, 2026
359e9fa
test(gateway): align native multi-cluster rows
kvinwang Aug 17, 2026
7899f43
test(gateway): verify multi-cluster proxy data paths
kvinwang Aug 17, 2026
ba7d7f7
test(gateway): harden multi-cluster proxy acceptance
kvinwang Aug 17, 2026
08b2151
test(vmm): document macvtap connectivity acceptance
kvinwang Aug 17, 2026
c818d0a
test(plan): gate tdxlab sweeps on preflight
kvinwang Aug 18, 2026
634245d
refactor(test): colocate core component suite
kvinwang Aug 18, 2026
4b5269d
fix(test): align image provenance with builder metadata
kvinwang Aug 18, 2026
a9263de
test: harden core component coverage
kvinwang Aug 18, 2026
6de6057
test: pin Bun for tdxlab runs
kvinwang Aug 18, 2026
e68ec2d
fix(test): preserve Bun path operations
kvinwang Aug 18, 2026
ef5fc80
refactor(test): externalize hardware host configuration
kvinwang Aug 18, 2026
e9f187f
fix(test): resolve configured Docker runner lazily
kvinwang Aug 18, 2026
6b0f934
fix(test): retain guest port reservations for active leases
kvinwang Aug 18, 2026
d9ca293
fix(test): wait for guest API before Gateway startup
kvinwang Aug 18, 2026
b5efc72
fix(test): retry bounded Sysbox recovery
kvinwang Aug 18, 2026
b6925c1
fix(test): make version cleanup independent of caller env
kvinwang Aug 18, 2026
8ace0c0
fix(test): execute gated Cloudflare client tests
kvinwang Aug 18, 2026
fc8e765
test(plan): cover changes since PR 841 baseline
kvinwang Aug 25, 2026
5e78290
fix(test): align frozen guest RPC coverage
kvinwang Aug 25, 2026
a142841
fix(test): record removed RPC evidence schema
kvinwang Aug 25, 2026
6d9500b
fix(test): align component matrices with next
kvinwang Aug 25, 2026
5f84400
fix(test): cover declarative OVMF selection
kvinwang Aug 25, 2026
60b06fe
fix(test): ignore legacy image version metadata
kvinwang Aug 25, 2026
4f8187f
fix(test): accept explicit gateway fallback rejection
kvinwang Aug 26, 2026
e5310fe
fix(test): tolerate absent gateway recovery samples
kvinwang Aug 26, 2026
4744bc0
test(gateway): cover certbot and gateway changes on next
kvinwang Sep 17, 2026
ec9920e
test(vmm): cover netd, networking, and GPU proxy changes on next
kvinwang Sep 17, 2026
f3a87d6
test(os): cover guest kernel and image changes on next
kvinwang Sep 17, 2026
510df59
test(verifier): cover setup-header normalization and cmdline suffix
kvinwang Sep 17, 2026
6e879c2
test(guest): cover GPU telemetry, discard, and v1 attestation
kvinwang Sep 17, 2026
6f69fff
docs(testing): record next rebase coverage (2026-09-17)
kvinwang Sep 17, 2026
ac7104a
fix(test): run vitest 4 on Node 20 and wait for the shared ACME lock
kvinwang Sep 17, 2026
e2f380b
fix(test): mirror certbot fixture images into the upgrade registry
kvinwang Sep 17, 2026
60a7e5b
fix(test): align fixture DNS auth, vitest output, and verifier suite …
kvinwang Sep 17, 2026
b403a35
test(verifier): cover the canonical setup-header layout
kvinwang Sep 18, 2026
e0b5017
test(vmm): let a run pin the QEMU the VMM launches
kvinwang Sep 18, 2026
6a5b4c4
test(verifier): cover the shipped canonical setup header
kvinwang Sep 18, 2026
c80c199
test: add the adversarial request-contract matrix
kvinwang Sep 20, 2026
1bd2184
test: make the echo invariant about scaling
kvinwang Sep 20, 2026
4ba2087
test: address the onboarding listener at the mount the fixture publishes
kvinwang Sep 20, 2026
08b75a8
test: address the gateway listeners at the mount the fixture publishes
kvinwang Sep 20, 2026
828ea1e
test: promote the request-contract cases on their tdxlab run
kvinwang Sep 20, 2026
0b9bc83
style(test): format the request-contract matrix harness
kvinwang Sep 24, 2026
1fc93fc
refactor(test): simplify the request-contract matrix harness
kvinwang Sep 24, 2026
3f09c04
docs(test): trim the request-contract case prose
kvinwang Sep 24, 2026
0f6cab3
test: add a guest-agent concurrency and robustness harness
kvinwang Sep 20, 2026
559c55a
test: add the guest-agent concurrency and robustness cases
kvinwang Sep 20, 2026
3384cc7
test: tolerate an unreadable fd table
kvinwang Sep 20, 2026
a308a23
test: promote the guest-agent robustness cases on their tdxlab run
kvinwang Sep 20, 2026
5d4f0bf
test: name the restart that the concurrency-002 drops actually were
kvinwang Sep 20, 2026
20f6342
refactor(test): trim the guest-agent robustness harness and case prose
kvinwang Sep 24, 2026
a97358b
style(test): put the robustness case docstrings in the imperative mood
kvinwang Sep 24, 2026
a466a1d
style(test): put the request-contract harness docstrings in the imper…
kvinwang Sep 24, 2026
e969a86
chore(test): restore files reordered by the next rebase
kvinwang Sep 25, 2026
e3fa69a
test(guest): expect escaped backslashes in the systemd env file
kvinwang Sep 25, 2026
51c1276
test(supervisor): cover clear semantics, exit codes, socket mode, and…
kvinwang Sep 25, 2026
a682efa
test(guest-agent): refuse certificate validity bounds past year 9999
kvinwang Sep 25, 2026
3c93977
test(guest-agent): cover Info with public_tcbinfo off on both surfaces
kvinwang Sep 25, 2026
e103757
test(dstack-util): cover include: refusal and the hardened host-share…
kvinwang Sep 25, 2026
282366c
test(guest): assert the storage-encrypted and os-image-hash runtime e…
kvinwang Sep 25, 2026
1b73683
test(guest): cover owner-only boot secrets and env delivery by exec-w…
kvinwang Sep 25, 2026
ca2ae76
test(os): assert the boot-chain unit edges added on next
kvinwang Sep 25, 2026
fd3675b
test(os): check terminal presets and build-time rootfs tmpfiles on th…
kvinwang Sep 25, 2026
7bd023a
test(os): require the NTS-only chrony policy in mkosi guests
kvinwang Sep 25, 2026
100c169
test(os): require the volatile journald budget shipped in the image
kvinwang Sep 25, 2026
9420891
test(dstack-util): require the data disk to leave the initializing label
kvinwang Sep 25, 2026
21ff697
test(guest): record the MR config and GPU event expectations from next
kvinwang Sep 25, 2026
7a12107
test(os): check early mount options, verity panic policy, and shipped…
kvinwang Sep 25, 2026
56ecf02
test(vmm): gate the installer's temporary checkout cleanup
kvinwang Sep 25, 2026
a724007
test(vmm): retire the OCI registry pull cases and fixture
kvinwang Sep 25, 2026
318cf0b
test(vmm): cover the hotplug, event-name, and preallocation config de…
kvinwang Sep 25, 2026
fd1d822
test(vmm): cover zero-resource refusal and disk preallocation on Crea…
kvinwang Sep 25, 2026
c1c9428
test(vmm): cover port mapping policy and no partial writes on UpdateVm
kvinwang Sep 25, 2026
fce106d
test(vmm): refuse re-enabling discard on a preallocated VM update
kvinwang Sep 25, 2026
50f625e
test(vmm): cover vmm-cli TLS verification and owner-only local state
kvinwang Sep 25, 2026
4b309dd
test(verifier): measure GPU topology with hotplug off and reject it on
kvinwang Sep 25, 2026
0105948
test(vmm): cover the one-shot compose preview of a multi-byte compose
kvinwang Sep 25, 2026
d888dfc
test(vmm): bind the resource, GPU, update, and preallocation unit rows
kvinwang Sep 25, 2026
59f9c1a
test(vmm): cover the preallocation select and local-only images panel…
kvinwang Sep 25, 2026
a970422
test(vmm): require pinned console dependencies in the web UI case
kvinwang Sep 25, 2026
2bea3a9
test(kms): expect the eight-row authorization freshness matrix
kvinwang Sep 25, 2026
b9a4c29
test(kms): cover key handover on the admin listener
kvinwang Sep 25, 2026
6227b2a
test(kms): cover image-verification visibility, auth API bounds, and …
kvinwang Sep 25, 2026
af4c75e
test(kms): run the zero-value DstackApp policy test
kvinwang Sep 25, 2026
a9f8211
test(kms): deny on an empty auth-simple device allowlist
kvinwang Sep 25, 2026
46e55b7
test(kms): refuse an unknown MOCK_POLICY in auth-mock
kvinwang Sep 25, 2026
1cafe8e
test(kms): check that both auth-eth backends read one decision from o…
kvinwang Sep 25, 2026
d1d6a41
test(kms): check the identity SignCert stamps into the app leaf
kvinwang Sep 25, 2026
a61bb80
test(kms): cover auto-bootstrap over existing and partial root keys
kvinwang Sep 25, 2026
67c6663
test(kms): gate locked image builds, the pinned onboarding script, an…
kvinwang Sep 25, 2026
66ad753
test(vmm): require the installer to build dstackup with --locked
kvinwang Sep 25, 2026
06242ae
test(kms): record SEV-SNP and Nitro Enclave identity changes in block…
kvinwang Sep 25, 2026
2702d4c
test(kms): note the admin onboarding flow that tc-kms-onboard-005 dep…
kvinwang Sep 25, 2026
b7738f2
test(gateway): install the proxy certificate through Admin.ImportCert
kvinwang Sep 25, 2026
e947430
test(gateway): assert the public app-info route honors public_tcbinfo
kvinwang Sep 25, 2026
ade3fe2
test(gateway): require registration bursts to reach the applied WireG…
kvinwang Sep 25, 2026
8d1d6e7
test(gateway): run the routing-lock regression tests in tc-gw-cluster…
kvinwang Sep 25, 2026
75b45b3
test(gateway): refuse own-id WaveKV envelopes and pin the peer timeou…
kvinwang Sep 25, 2026
efeac5a
test(gateway): send normalized-domain payloads to ForceReleaseCertLoc…
kvinwang Sep 25, 2026
3f76d02
test(gateway): keep startup off ACME and release locks under any doma…
kvinwang Sep 25, 2026
955d315
test(gateway): redact a DNS token with multi-byte characters on both …
kvinwang Sep 25, 2026
c8605fb
test(certbot): cover owner-only keys, atomic publication, key rotatio…
kvinwang Sep 25, 2026
ee3069d
test(gateway): cover SNI validation, large ClientHellos and the 53-by…
kvinwang Sep 25, 2026
38c0672
test(gateway): require the PROXY header abort tests by name
kvinwang Sep 25, 2026
fc7e4d0
test(gateway): hold the connection limit under a simultaneous burst
kvinwang Sep 25, 2026
bd79e3c
test(kms): expect the eight-row upgrade authority matrix
kvinwang Sep 25, 2026
35ac0e6
test(rpc): bound error text and forbid forged log lines in the contra…
kvinwang Sep 25, 2026
44c4763
test(gateway): wait for the restarted admin listener before restoring…
kvinwang Sep 25, 2026
1710601
test(verifier): follow image download retries and the removed debug path
kvinwang Sep 25, 2026
8eb1a54
test(verifier): cover the collateral host allowlist key and download …
kvinwang Sep 25, 2026
57d47e8
test(verifier): follow the in-process image manifest check and cache …
kvinwang Sep 25, 2026
d05c765
test(integration): run the renamed verifier manifest policy test
kvinwang Sep 25, 2026
4e659b4
test(guest): allow the simulator collateral host in tpm-verify
kvinwang Sep 25, 2026
e91e558
test(verifier): cover dstack-mr diagnose, the XLF initrd ceiling, and…
kvinwang Sep 25, 2026
02b4fbb
test(verifier): run the SEV-SNP and TPM input bound tests by name
kvinwang Sep 25, 2026
b2de9f2
test(verifier): cover --verify-cert validity and stop pinning the ra-…
kvinwang Sep 25, 2026
d7c7b7d
test(verifier): follow the dstack-attest suite sizes
kvinwang Sep 25, 2026
5b119bd
docs(test): allow the local collateral host in the simulator verifier…
kvinwang Sep 25, 2026
ddcff0d
test(kms): drop duplicate auth-010 coverage labels from the merge
kvinwang Sep 25, 2026
c648a11
test(catalog): align inventories with next at 0fb3b24bbd
kvinwang Sep 25, 2026
5318497
docs(testing): record next rebase coverage (2026-09-24)
kvinwang Sep 25, 2026
40130ac
style(test): sort imports in two harnesses as the ruff hook expects
kvinwang Sep 25, 2026
2197d75
docs(testing): link the rootless mkosi and WireGuard apply fixes
kvinwang Sep 25, 2026
4efca47
test(guest-agent): read the certificate notAfter on cryptography < 42
kvinwang Sep 25, 2026
0dd3ca2
test(fixtures): wait for the whole simulator process group on stop
kvinwang Sep 25, 2026
f67330f
test(guest-agent): keep head-of-line observations when the step fails
kvinwang Sep 25, 2026
ebbd497
test(kms): import os in the runtime-004 mock RPC and report its failures
kvinwang Sep 25, 2026
1230a8b
test(os): wait for app-compose before repeating Tappd after an agent …
kvinwang Sep 25, 2026
a63dde8
test(guest-agent): ramp the head-of-line loaders past the slirp backlog
kvinwang Sep 25, 2026
16b3051
test(os): settle the data pool before the telemetry disk baseline
kvinwang Sep 25, 2026
f3e29c1
test(os): keep the mount-option set from shadowing the module options
kvinwang Sep 25, 2026
45f18f0
test(verifier): pin --hotplug-off in the shared dstack-mr matrix
kvinwang Sep 25, 2026
625be4d
test(gateway): wait for the debug listener before reading restored sy…
kvinwang Sep 25, 2026
aa5c549
test(os): wait for the swap lease guest to stop before starting it again
kvinwang Sep 25, 2026
467875e
test(os): give the stargz lifecycle case the budget its own steps allow
kvinwang Sep 25, 2026
31acf98
test(os): corrupt the stargz marker payload rather than the blob midp…
kvinwang Sep 25, 2026
ff307fb
test(integration): reserve KMS matrix host ports across concurrent cases
kvinwang Sep 25, 2026
b49e2cc
test(integration): prove the candidate Gateway loaded legacy WaveKV rows
kvinwang Sep 25, 2026
3bc39ab
style(test): format the dstack-mr matrix harness
kvinwang Sep 25, 2026
0211378
style(test): keep harness docstring summaries on one line
kvinwang Sep 25, 2026
a2e39e2
docs(testing): record the product fixes found on hardware
kvinwang Sep 25, 2026
8c7c3e3
test(gateway): promote tc-gw-admin-037 and record the hardware valida…
kvinwang Sep 25, 2026
8902e61
test(os): check the runtime keystore mode now that #1331 is reverted
kvinwang Sep 26, 2026
6acdb43
test(kms): promote tc-kms-onboard-005 now that #1406 is merged
kvinwang Sep 26, 2026
d50f647
docs(testing): record the validation of the merged product fixes
kvinwang Sep 26, 2026
15668d3
test(kms): cover root and app key rotation lifecycle
kvinwang Nov 8, 2026
77797fb
test(kms): run every rotation matrix row
kvinwang Nov 8, 2026
e4d3c2c
test(tdxlab): record the key rotation matrix run
kvinwang Nov 8, 2026
8d56e14
test(kms): fix rotation matrix result parsing
kvinwang Nov 8, 2026
d5a3e04
test(kms): cover contract and backend epoch rotation
kvinwang Nov 8, 2026
9308afc
test: cover non-rotation forward interval changes
kvinwang Nov 8, 2026
4ffe080
test(kms): run contract rotation suites independently
kvinwang Nov 8, 2026
457fd91
test(kms): parse Foundry rotation results
kvinwang Nov 8, 2026
62239ca
test: detect focused forward matrix rows reliably
kvinwang Nov 8, 2026
95bf835
test: validate forward matrix execution summaries
kvinwang Nov 8, 2026
db4ac14
test: use Cargo exit status for forward matrix rows
kvinwang Nov 8, 2026
ea693f0
test(kms): run backend matrix with npm on tdxlab
kvinwang Nov 8, 2026
2fa316c
test(kms): clean between contract rotation suites
kvinwang Nov 8, 2026
47f07d3
test(tdxlab): promote forward interval regression matrices
kvinwang Nov 8, 2026
a7c1064
test: use matching guest images in version matrix
kvinwang Nov 8, 2026
078c414
test: select KMS encryption endpoint by guest capability
kvinwang Nov 8, 2026
3ea7167
test: pair mixed clients with matching OS and KMS versions
kvinwang Nov 8, 2026
2d0eed4
test: fix mixed matrix image lookup
kvinwang Nov 8, 2026
382188a
test: pin KMS signer before sealed env deployment
kvinwang Nov 8, 2026
2fcc2b5
test: pin KMS signer in client deployment
kvinwang Nov 8, 2026
442bae8
test: isolate physical VMM signer pins per fixture
kvinwang Nov 8, 2026
581588d
test: isolate VMM signer whitelist without changing HOME
kvinwang Nov 8, 2026
a9ab0e8
test: specify in-place disk migration after KMS rotation
kvinwang Nov 8, 2026
b0c7c68
test: execute root rotation and in-place OS migration
kvinwang Nov 8, 2026
e7b1ec7
test: use image-hash capable KMS for rotation migration
kvinwang Nov 8, 2026
c7eb90c
test: use 0.5.11 source in rotation migration case
kvinwang Nov 8, 2026
40a84db
test: cover KMS and App contract upgrade combinations
kvinwang Nov 8, 2026
a05220a
test: fix physical migration observer wait
kvinwang Nov 8, 2026
1835da5
test: run rotation migration from the 0.6.0 source
kvinwang Nov 8, 2026
e547850
test: prepare the 0.6.0 guest image for rotation cases
kvinwang Nov 8, 2026
48e3e13
test: wait for migrated VM boot before observer
kvinwang Nov 8, 2026
b26ca49
test: check VMM Python dependencies before hardware runs
kvinwang Nov 8, 2026
adc7b74
test: follow the KMS auth backend consolidation
kvinwang Nov 10, 2026
b32d94d
test: set public_key_handover explicitly in KMS fixtures
kvinwang Nov 10, 2026
96a4f97
test: match the public handover refusal changed in #1552
kvinwang Nov 11, 2026
373b1ac
test: give simulated KMS clients a TDX lite attestation
kvinwang Nov 11, 2026
6f0f01a
test: encode the KMS RPC protobuf length as a varint
kvinwang Nov 11, 2026
dc46a1b
test: cover SealedEnv epochs across a KMS root rotation
kvinwang Nov 11, 2026
6332786
test: adapt KMS fixtures to the handover startup check
kvinwang Nov 11, 2026
9e57f63
test: present a guest API token to the Worker listener
kvinwang Nov 11, 2026
de1e602
test: let physical guests pass KMS key release
kvinwang Nov 11, 2026
e6ce18e
test: build the ECDH decrypt probe with the SealedEnv dependencies
kvinwang Nov 11, 2026
ca1d7a8
test: render the dashboard probe with the scope-gated fields
kvinwang Nov 11, 2026
25b7cd9
test: grant the sample guest API scopes and share token minting
kvinwang Nov 11, 2026
aaa9b8c
test: expect the KMS to always verify OS images
kvinwang Nov 11, 2026
32b4d35
test: plant measurement cache entries as their JSON files
kvinwang Nov 11, 2026
3fb27c2
test: report steps from the KMS rotation unit matrices
kvinwang Nov 11, 2026
0e8b418
test: require at least the original upgrade-authority tests
kvinwang Nov 11, 2026
de0af00
test: answer KMS authorization with an epoch-aware webhook
kvinwang Nov 11, 2026
7eaf2ff
test: drop the removed KMS compose from the locked-build check
kvinwang Nov 11, 2026
d557a02
test: report a step from the forward interval matrix
kvinwang Nov 11, 2026
7fb4b88
test: answer the upgrade-policy webhook in the epoch-aware shape
kvinwang Nov 11, 2026
33fb808
test: name the root epoch row in Manage.s.sol policy writes
kvinwang Nov 11, 2026
1a4b554
test: serve every matrix guest image to the KMS verifier
kvinwang Nov 11, 2026
375935c
test: pin the KMS signer before deploying a Gateway
kvinwang Nov 11, 2026
a8fe4a0
test: run the auth-eth suite on Node 20 or newer
kvinwang Nov 11, 2026
78e9b0c
test: publish dashboard metrics, logs and containers to lease callers
kvinwang Nov 11, 2026
9196257
test: register webhook-backed matrix KMS nodes as root epoch 0
kvinwang Nov 11, 2026
646e120
test: hash the SealedEnv envelope of a matrix client
kvinwang Nov 11, 2026
0ff5221
test: answer the current app epoch from the upgrade-policy webhook
kvinwang Nov 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
26 changes: 26 additions & 0 deletions REUSE.toml
Original file line number Diff line number Diff line change
Expand Up @@ -260,3 +260,29 @@ SPDX-License-Identifier = "CC0-1.0"
path = "dstack/crates/qemu-acpi/fixtures/*.bin"
SPDX-FileCopyrightText = "NONE"
SPDX-License-Identifier = "CC0-1.0"

[[annotations]]
path = "test-suites/catalog/source-inventory.json"
SPDX-FileCopyrightText = "© 2026 Phala Network <dstack@phala.network>"
SPDX-License-Identifier = "Apache-2.0"

[[annotations]]
path = "test-suites/catalog/configuration-inventory.json"
SPDX-FileCopyrightText = "© 2026 Phala Network <dstack@phala.network>"
SPDX-License-Identifier = "Apache-2.0"

[[annotations]]
path = "test-suites/catalog/api-inventory.json"
SPDX-FileCopyrightText = "© 2026 Phala Network <dstack@phala.network>"
SPDX-License-Identifier = "Apache-2.0"

[[annotations]]
path = "test-suites/catalog/source-coverage-map.json"
SPDX-FileCopyrightText = "© 2026 Phala Network <dstack@phala.network>"
SPDX-License-Identifier = "Apache-2.0"

[[annotations]]
path = "test-suites/**"
precedence = "aggregate"
SPDX-FileCopyrightText = "© 2026 Phala Network <dstack@phala.network>"
SPDX-License-Identifier = "Apache-2.0"
145 changes: 145 additions & 0 deletions docs/testing/dstack-test-methodology.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
<!-- SPDX-FileCopyrightText: © 2026 Phala Network <dstack@phala.network> -->
<!-- SPDX-License-Identifier: Apache-2.0 -->
<a id="dstack-test-methodology"></a>
# dstack Test Methodology

This document defines the common process for dstack release testing, from change analysis and risk assessment through execution, evidence collection, and release decisions. See the [test-case authoring specification](test-case-authoring-spec.md#dstack-test-case-authoring-spec) and [report output specification](test-report-output-spec.md#dstack-test-report-output-spec) for normative formats.

<a id="method-objectives"></a>
## 1. Objectives

Testing must produce reproducible, auditable, and traceable release evidence—not merely show that a script once exited successfully. A conclusion must be traceable from a requirement or risk to a case, step, original command evidence, observation, and attachment.

Testing is complete only when:

1. every relevant change, requirement, and material risk has explicit coverage;
2. an executor unfamiliar with the implementation can reproduce each case;
3. the native AI session preserves executed commands and their raw output;
4. simulated and physical-hardware results are reported separately;
5. tools can recompute aggregate status from atomic case results; and
6. references, attachment digests, and statistics are machine-verifiable.

<a id="method-artifacts"></a>
## 2. Artifact layers

Do not mix these four layers:

| Layer | Purpose | Immutable after execution starts |
|---|---|---:|
| Change audit | Establishes changed behavior, dependencies, and risks | Yes |
| Test plan | Defines scope, topology, cases, and execution order | Yes |
| Case specification | Defines preconditions, actions, and expected results | Yes |
| `results/<run-id>/` | Records versions, native sessions, observations, and attachments | No, while running |

A plan uses exactly three semantic levels: chapter, section, and case. Its machine-readable execution order is defined by `index.json`; its top-level `README.md` is the executor's environment guide.

<a id="method-workflow"></a>
## 3. Workflow

### 3.1 Audit the release delta

Compare the previous released tag with the candidate commit. Inspect commits, pull requests, schemas, RPCs, command-line interfaces, configuration defaults, systemd units, image recipes, deployment manifests, migrations, and dependency changes. For every change record:

- the user-visible or operational behavior;
- affected components and interfaces;
- compatibility direction and version combinations;
- failure modes and security impact;
- the requirement and risk IDs used by test cases; and
- whether physical TEE hardware is required.

Generated changelogs alone are insufficient. Follow data and control flow across component boundaries.

### 3.2 Build a risk-based coverage matrix

Classify coverage as:

- **new or changed functionality**: full positive, boundary, and relevant negative coverage;
- **regression**: behavior likely to be affected by shared code, configuration, images, protocols, or lifecycle changes;
- **compatibility**: supported mixed-version combinations and upgrade order;
- **security**: trust boundaries, identity, attestation, key handling, authorization, and secret disclosure;
- **operations**: install, upgrade, restart, recovery, logging, and diagnostics.

Prioritize by impact, likelihood, detectability, and breadth. `P0` covers release-blocking trust, data-loss, availability, or primary-path risks; `P1` covers important supported behavior; `P2` covers lower-risk variants.

### 3.3 Define environments

The plan guide must describe topology, component endpoints, credentials, test data, health checks, concurrency constraints, cleanup, and prohibited operations. Record common software versions once in run-level context. A case records a version override only when it deliberately uses a different component version.

Environment levels are:

- **UNIT**: isolated code-level validation;
- **SIMULATOR**: no-TEE or mock-attestation execution;
- **INTEGRATION**: deployed multi-component system;
- **HARDWARE**: physical supported TEE hardware.

Simulation may follow `docs/development-without-tee.md`; a no-TEE development guest may independently use `key_provider=tpm` when the SGX local key provider is unavailable. This does not run local-key-provider in a TPM mode or cover its SGX behavior. Simulation never proves hardware-specific boot, measurement, attestation, sealing, or device behavior. Such unconfirmed items must be called out separately in the report.

### 3.4 Author and review cases

Each case validates one independently decidable behavior and references at least one requirement or risk. Prefer three to eight logical steps. Every step defines an action and exact observable expected results. Do not write a separate failure criterion: any result that does not fully match the expected result is `FAIL`.

Review the plan for change coverage, regression breadth, compatibility matrices, security boundaries, operational recovery, test-data isolation, and cleanup before execution.

### 3.5 Execute

The `run-plan` orchestration agent must first read the guide, index, and every
case specification. It processes cases in index order, starts an independent
case-agent session for each runnable case, and reads the completed result before
deciding about later cases. It may mark a later case `SKIPPED` without launching
it only when a recorded earlier non-PASS result demonstrably makes the later
case's prerequisite false or its result meaningless. Similarity, expected cost,
or a mere possibility of failure is not sufficient. Independent cases continue.

Each case executor must:

1. read the plan `README.md` and `index.json`;
2. execute cases in index order unless the guide explicitly permits parallelism;
3. start a fresh Codex or Claude session for each case;
4. execute real commands rather than infer outcomes;
5. preserve the native JSONL session as step evidence;
6. write only a shallow atomic `result.json`; and
7. continue to later independent cases after a case-level failure.

The executor name and model are recorded by the runner. Secrets must never be emitted into sessions or artifacts.

<a id="method-status"></a>
## 4. Status model

Case and step status is one of:

- `PASS`: every expected result was fully observed;
- `FAIL`: at least one expected result was not fully observed;
- `BLOCKED`: an external prerequisite prevented the tested behavior from starting;
- `NOT_RUN`: execution was not attempted;
- `SKIPPED`: omission was explicitly authorized and explained.

`PARTIAL` is forbidden. A completed run may contain any terminal case status. A run is `INCOMPLETE` only when required case result artifacts are missing.

Product failure and test-infrastructure failure must be distinguished. A healthy system returning the wrong response is `FAIL`; an unavailable required laboratory host before the tested action begins is `BLOCKED`.

<a id="method-evidence"></a>
## 5. Evidence and traceability

Every logical step must be supported by observed commands and raw output in the native session. Screenshots or other files are attachments, not replacements for command evidence where machine-readable evidence is available. Preserve timestamps, exit codes, stdout, stderr, and tool errors as supplied by the agent CLI.

Use explicit HTML anchors for all chapters, sections, cases, and steps. Do not rely on renderer-specific heading slugs. `index.json` is the authority for ordering and paths; IDs remain stable after publication.

<a id="method-compatibility"></a>
## 6. Compatibility testing

Derive version combinations from supported deployment behavior rather than testing arbitrary permutations. For a rolling upgrade, cover at least:

- latest control-plane services with both previous and latest guest images;
- persisted state created by the previous release and consumed by the candidate;
- protocol/schema defaults when one side omits newly introduced fields;
- upgrade order, restart behavior, and rollback where supported; and
- explicit rejection of unsupported combinations with actionable diagnostics.

For dstack v0.6.0, the expected online topology includes latest VMM, KMS, and gateway components while instances may use a mixture of old and new images.

<a id="method-release-decision"></a>
## 7. Release decision

The final report must provide coverage by requirement and risk, status counts, unresolved failures, blocked or skipped cases, simulation-only results, unconfirmed hardware items, and material deviations from the plan. Release acceptance criteria belong in the plan guide and must state which statuses or open risks block release.

Before publishing, run `dstack-test validate`, render the self-contained HTML report, and package the selected run. The package is an immutable review artifact and must not include secrets or results from unrelated run IDs.
Loading
Loading