Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
182 commits
Select commit Hold shift + click to select a range
230b997
test(infrastructure): add deterministic component harnesses
kvinwang Jul 31, 2026
c5619fe
test(plan): define core component acceptance coverage
kvinwang Jul 31, 2026
ebf9c1f
test(results): promote verified component coverage
kvinwang Jul 31, 2026
8532d7c
docs(testing): account for split product commits
kvinwang Jul 31, 2026
c4ed9ee
docs(testing): record product PR split audit
kvinwang Jul 31, 2026
9eba469
docs(testing): account for simulator PR split
kvinwang Jul 31, 2026
11e5f90
docs(testing): retain merged PRs in split inventory
kvinwang Jul 31, 2026
10bf345
test(simulator): enforce configured TPM node ownership
kvinwang Jul 31, 2026
c3aa1d1
docs(testing): account for TPM ownership correction
kvinwang Jul 31, 2026
83a5c90
Revert "test(simulator): enforce configured TPM node ownership"
kvinwang Jul 31, 2026
4716d84
docs(testing): reject TPM node race tolerance
kvinwang Jul 31, 2026
5dc06bd
docs(testing): add simulator retest watchlist
kvinwang Jul 31, 2026
85865ec
test(gateway): use existing health and dashboard routes
kvinwang Aug 3, 2026
571ff28
test(verifier): assert simulator trust-root isolation
kvinwang Aug 4, 2026
a8e4b12
test(verifier): validate embedded cache versions
kvinwang Aug 4, 2026
9afcb1e
docs(testing): align rewritten PR accounting
kvinwang Aug 4, 2026
d6ab996
test(guest): validate normal swap boot lifecycle
kvinwang Aug 4, 2026
596cf1c
docs(testing): record closed supervisor socket PR
kvinwang Aug 4, 2026
c73a361
test(supervisor): validate UDS auto-start lifecycle
kvinwang Aug 4, 2026
6c62bf6
test(util): validate certificate outputs independently
kvinwang Aug 4, 2026
15185c7
test(supervisor): separate client lifecycle coverage
kvinwang Aug 4, 2026
a398b9f
test(gateway): drop DNS credential encryption assumptions
kvinwang Aug 4, 2026
fe3c54f
test(gateway): cover app-address DNS failover
kvinwang Aug 5, 2026
ae88e95
test(guest): pin wg-checker timing to a uniform 10s clock
kvinwang Aug 5, 2026
86fac77
test(vmm): cover filesystem-only CID reload
kvinwang Aug 5, 2026
5f37d84
test(gateway): register upgrade domain through admin API
kvinwang Aug 5, 2026
a4cc8cd
test(gateway): provision upgrade domain through certbot
kvinwang Aug 5, 2026
8180e78
test(vmm): preserve stopped VM CID on reload
kvinwang Aug 5, 2026
3641538
test(guest): retarget tc-gos-observabil-003 at the gateway checker
kvinwang Aug 5, 2026
8e6dcaf
test(gateway): cover ACME credential rotation
kvinwang Aug 5, 2026
6f7faa7
test(kms): cover CA persistence and renewal
kvinwang Aug 5, 2026
901306f
test(vmm): retarget tc-vmm-serial-006 at log rotation
kvinwang Aug 6, 2026
0b4fa34
test(vmm): cover libvirt network filter lifecycle
kvinwang Aug 6, 2026
44b1822
test(vmm): wait for restarted netd listener
kvinwang Aug 6, 2026
bc676df
test(vmm): avoid destructive netd readiness probe
kvinwang Aug 6, 2026
1d53198
test(vmm): read generated NIC MACs from launch plan
kvinwang Aug 6, 2026
8517b43
test(vmm): isolate secondary host API port
kvinwang Aug 6, 2026
b4c4761
test(vmm): inject spoof traffic on the host interface
kvinwang Aug 6, 2026
a085f9a
test(vmm): preserve failure evidence and force cleanup
kvinwang Aug 6, 2026
749858e
test(vmm): verify filtered network survives QEMU restart
kvinwang Aug 6, 2026
9b9cf30
test(kms): restore sign-cert fixture binary
kvinwang Aug 7, 2026
5613fa7
test: follow current guest and VMM configuration
kvinwang Aug 7, 2026
67dde57
test(runner): retain sweep failure diagnostics
kvinwang Aug 7, 2026
77cbc2f
test(tdxlab): prepare deterministic run prerequisites
kvinwang Aug 7, 2026
b6ed549
test(tdxlab): provision pinned Foundry tools
kvinwang Aug 7, 2026
3f6914b
chore(kms): refresh authorization Bun locks
kvinwang Aug 7, 2026
1f0411d
test(kms): resolve prepared startup binary
kvinwang Aug 7, 2026
084fab3
test(tdxlab): resolve user toolchain paths
kvinwang Aug 7, 2026
c35dbe2
test(kms): accept canonical empty Finish response
kvinwang Aug 7, 2026
76fa24a
test(tdxlab): document prepared execution path
kvinwang Aug 7, 2026
ab8b0e7
test(runner): fail sweeps with nonpassing cases
kvinwang Aug 7, 2026
34f71ea
test(gateway): follow current debug config
kvinwang Aug 7, 2026
a334903
test(attestation): prepare legacy TDX image verification
kvinwang Aug 7, 2026
e869cdc
test(attestation): refresh NitroTPM replay fixture
kvinwang Aug 7, 2026
669d96f
test(guest): retain gateway checker failure context
kvinwang Aug 7, 2026
58e351d
test(tdxlab): build candidate guest prerequisites
kvinwang Aug 7, 2026
73c41e4
test(tdxlab): build images from a clean worktree
kvinwang Aug 7, 2026
37304fa
test(tdxlab): discover flavor-specific mkosi outputs
kvinwang Aug 7, 2026
d9f7626
test(gateway): follow current public RPC route
kvinwang Aug 7, 2026
5557bda
test(tdxlab): prepare current GCP TPM replay
kvinwang Aug 7, 2026
53a76dd
test(guest): capture gateway checker exit codes safely
kvinwang Aug 7, 2026
6cd0862
test(mkosi): prepare ephemeral OpenSSH host keys
kvinwang Aug 7, 2026
6fe5473
test(guest): use deterministic quote output fault
kvinwang Aug 7, 2026
156dadd
test(guest): use deterministic app-key output fault
kvinwang Aug 7, 2026
a6cbf43
test(guest): follow atomic random output replacement
kvinwang Aug 7, 2026
806a8f2
test(guest): use deterministic attestation output fault
kvinwang Aug 7, 2026
076786c
test(guest): use deterministic get-keys output fault
kvinwang Aug 7, 2026
113399f
test(simulator): prepare platform replay fixtures
kvinwang Aug 7, 2026
810c5b5
test(gateway): follow current RPC response contracts
kvinwang Aug 7, 2026
eb22976
test(kms): accept current Empty JSON encoding
kvinwang Aug 7, 2026
3a864c1
test(kms): follow cloned shutdown handle
kvinwang Aug 7, 2026
bd3d37b
test(verifier): follow certificate profile validation
kvinwang Aug 7, 2026
5ec5002
test(verifier): use a valid oneshot config port
kvinwang Aug 7, 2026
43fdb47
test(vmm): follow missing log response contract
kvinwang Aug 7, 2026
0ee2530
test(vmm): materialize mutable image fixtures
kvinwang Aug 7, 2026
ebb96e6
test(kms): follow current root-key handover
kvinwang Aug 7, 2026
95be4d7
test(gateway): isolate fixture WireGuard subnets
kvinwang Aug 7, 2026
6324fb5
test(gateway): follow current public info route
kvinwang Aug 7, 2026
060cf35
test(gateway): accept current Empty exit response
kvinwang Aug 7, 2026
569eb8e
test(gateway): verify malformed Empty framing
kvinwang Aug 7, 2026
c617606
test(gateway): follow current debug configuration
kvinwang Aug 7, 2026
d0f2c92
test(gateway): follow on-demand TLS key generation
kvinwang Aug 7, 2026
5d559b9
test(gateway): edit prepared TLS paths by section
kvinwang Aug 7, 2026
8ae60f8
test(gateway): accept current DNS Empty responses
kvinwang Aug 7, 2026
eea37e7
test(gateway): follow current certificate store suite
kvinwang Aug 7, 2026
472fbf0
test(vmm): follow private CID state contract
kvinwang Aug 7, 2026
a796fe7
test(vmm): stage reload fixtures across filesystems
kvinwang Aug 7, 2026
06be5c7
test(vmm): prepare management port for config checks
kvinwang Aug 7, 2026
e2d6bcf
test(vmm): follow current UI RPC diagnostics
kvinwang Aug 7, 2026
9665fb1
test(vmm): follow current internal source matrices
kvinwang Aug 7, 2026
3183f26
test(guest): prepare a shell-capable log fixture image
kvinwang Aug 7, 2026
94b3935
test(guest): capture log fixture preparation diagnostics
kvinwang Aug 7, 2026
e7bc9e9
test(tdxlab): prepare dashboard log workload image
kvinwang Aug 7, 2026
553fd1e
test(tdxlab): bind dashboard preparation to case identity
kvinwang Aug 7, 2026
402d41e
test(kms): prepare finalized Ethereum head
kvinwang Aug 7, 2026
4335525
test(integration): follow current gateway admin contract
kvinwang Aug 7, 2026
429547f
test(tdxlab): preserve guest image integrity
kvinwang Aug 7, 2026
1291f6f
test(integration): bound gateway DNS fixture waits
kvinwang Aug 7, 2026
ba67f93
test(integration): accept compatible Exit request evolution
kvinwang Aug 7, 2026
7bd24fd
style(test): format integration matrix
kvinwang Aug 7, 2026
27a900c
test(integration): use mock DNS listener port
kvinwang Aug 7, 2026
c135a96
test(fixtures): bind cleanup to prepared state root
kvinwang Aug 7, 2026
cc7166f
test(integration): pin mock DNS zone
kvinwang Aug 7, 2026
f4e2a4e
test(tdxlab): preflight Docker daemon
kvinwang Aug 7, 2026
2a72fdc
test(integration): model Cloudflare zone discovery
kvinwang Aug 7, 2026
37d920b
test(tdxlab): prepare user namespaces
kvinwang Aug 7, 2026
26f6a1c
test(integration): bridge legacy Gateway contracts
kvinwang Aug 7, 2026
431ea97
test: fix mixed-version gateway failover harness
kvinwang Aug 8, 2026
16f9dec
test: select live KMS for failover preparation
kvinwang Aug 8, 2026
8c77fbb
test: prepare identity matrix alternate image
kvinwang Aug 8, 2026
276862f
test: remove unused collateral prerequisite
kvinwang Aug 8, 2026
592df3e
test: restore PCCS collateral lifecycle matrix
kvinwang Aug 8, 2026
4a9429f
test: cover guest configuration entry matrix
kvinwang Aug 8, 2026
f64c15c
test: update KMS compatibility certificate config
kvinwang Aug 8, 2026
28df9f6
test: restore KMS provider failover matrix
kvinwang Aug 8, 2026
794a5ce
test: restore gateway registration failover matrix
kvinwang Aug 8, 2026
c735f2b
fix(attestation): serialize TDX V2 event preimages
kvinwang Aug 8, 2026
4879b7e
fix(simulator): make device lifecycle tests deterministic
kvinwang Aug 8, 2026
b973583
test: follow split VMM restart policy tests
kvinwang Aug 8, 2026
712a5d2
test: resolve Cargo for gateway refresh harness
kvinwang Aug 8, 2026
9439f66
test: align VMM QEMU platform matrix
kvinwang Aug 8, 2026
cafdbc2
test: follow current VMM networking contract
kvinwang Aug 8, 2026
e5848d5
test: shorten VMM networking runtime paths
kvinwang Aug 8, 2026
617701a
test: start bridge VM before launch inspection
kvinwang Aug 8, 2026
354118b
test: prepare VMM hugepage prerequisites
kvinwang Aug 8, 2026
6e82420
test: exercise VMM hugepage lifecycle
kvinwang Aug 8, 2026
37782e6
test: explicitly start user network VM
kvinwang Aug 8, 2026
d8d0aed
test: detach networking case supervisor
kvinwang Aug 8, 2026
2544b97
test: preserve VMM placement command evidence
kvinwang Aug 8, 2026
1c46a57
test: inspect supervised QEMU launch spec
kvinwang Aug 8, 2026
d16df74
test: follow attestation suite growth
kvinwang Aug 8, 2026
afcc5e6
test: follow current mock attestation CLI
kvinwang Aug 8, 2026
84c6d41
test: require both cloud quote matrices
kvinwang Aug 8, 2026
8677e87
test: replace removed verifier matrix selectors
kvinwang Aug 8, 2026
8ff12bf
test: align verifier coverage with current suites
kvinwang Aug 8, 2026
153c84f
test: prepare isolated Docker subnet pool
kvinwang Aug 8, 2026
fb3296e
test: preserve CAA concurrency diagnostics
kvinwang Aug 8, 2026
b48ff64
test: follow Gateway CAA operation locking
kvinwang Aug 8, 2026
326a757
test: restore current Certbot and auth regressions
kvinwang Aug 8, 2026
128e9cf
test: follow current Gateway unit matrices
kvinwang Aug 8, 2026
26c071b
test: follow current Gateway port-policy matrix
kvinwang Aug 8, 2026
867804e
test: make Gateway DNS routing fixture deterministic
kvinwang Aug 8, 2026
5202b49
test: follow removed KMS certificate-log surface
kvinwang Aug 8, 2026
56a47ab
test: execute current KMS binary test target
kvinwang Aug 8, 2026
a463fcd
test: prepare seed-matched guest compatibility evidence
kvinwang Aug 8, 2026
1394e41
test: cover KMS signatures and injected Gateway outages
kvinwang Aug 8, 2026
23c3e99
test: select prepared TDX simulator explicitly
kvinwang Aug 8, 2026
b7e844c
test: run compatibility evidence without hardware TDX
kvinwang Aug 8, 2026
9e6bc73
test: follow verifier certificate profile ownership
kvinwang Aug 8, 2026
3a4d02e
build: record verifier test dependency
kvinwang Aug 8, 2026
f51c13e
test: prepare lease-owned attestation VMM
kvinwang Aug 8, 2026
48ca11a
test: separate physical and simulator collateral
kvinwang Aug 8, 2026
424d873
test: observe app identity during Gateway outage
kvinwang Aug 8, 2026
041b625
test: separate Gateway boot and registration probes
kvinwang Aug 8, 2026
2660efc
test: exercise Gateway identity fallback
kvinwang Aug 8, 2026
5c68a63
test: decouple identity probe from Gateway cache
kvinwang Aug 8, 2026
51c1997
test: allow clients without Gateway endpoints
kvinwang Aug 8, 2026
26c53d0
test: run guest compatibility on physical TDX
kvinwang Aug 8, 2026
6d0cc73
test: prepare physical compatibility collateral
kvinwang Aug 8, 2026
baeee56
fix(attestation): preserve stripped V2 event digests
kvinwang Aug 8, 2026
f79da8b
test(verifier): avoid fixed cc-eventlog test count
kvinwang Aug 8, 2026
f5d5471
test: prepare simulator collateral before guest boot
kvinwang Aug 8, 2026
40269bb
test: prepare simulated identity image variant
kvinwang Aug 8, 2026
f98d6f0
test(simulator): restore SEV-SNP ABI regression coverage
kvinwang Aug 8, 2026
fdaf917
test(kms): prepare nested contract dependencies
kvinwang Aug 8, 2026
6071394
test(kms): probe event audit contract fixtures
kvinwang Aug 8, 2026
06b78d8
test(kms): probe runtime contract fixtures
kvinwang Aug 8, 2026
f42268d
test(guest): wait for bind conflict cleanup
kvinwang Aug 9, 2026
aeeaf8f
test(gateway): synchronize concurrent renewal requests
kvinwang Aug 9, 2026
daf3d39
test(guest): cancel bind conflict restart jobs
kvinwang Aug 9, 2026
d87ccf1
test(gateway): prepare allocation wireguard fixture
kvinwang Aug 9, 2026
2909b56
test(gateway): establish distributed renewal contention
kvinwang Aug 9, 2026
26d8fd7
test(gateway): isolate allocation recycle phase
kvinwang Aug 9, 2026
8ae0863
test(integration): retry rolling KMS metadata probes
kvinwang Aug 9, 2026
a87945d
test(platform): wait for sealing provider recovery
kvinwang Aug 9, 2026
c3609a2
test(harness): probe lifecycle readiness deterministically
kvinwang Aug 9, 2026
4b3d40c
test(gateway): align allocation and renewal invariants
kvinwang Aug 9, 2026
ac49fa3
test(integration): await bounded KMS boot failure
kvinwang Aug 10, 2026
083ff6b
test(gateway): recheck distributed renewal freshness
kvinwang Aug 10, 2026
088367a
test(provider): retry transient sealing startup
kvinwang Aug 10, 2026
4471472
test(harness): harden runtime readiness probes
kvinwang Aug 10, 2026
c7364e9
test(vmm): probe the browser endpoint directly
kvinwang Aug 10, 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
  •  
  •  
  •  
35 changes: 28 additions & 7 deletions REUSE.toml
Original file line number Diff line number Diff line change
Expand Up @@ -181,13 +181,6 @@ SPDX-FileCopyrightText = "NONE"
SPDX-License-Identifier = "Apache-2.0"
precedence = "override"

# ktls 6.0.2 plus rustls/ktls#70; see dstack/vendor/README.md.
[[annotations]]
path = "dstack/vendor/ktls/**"
SPDX-FileCopyrightText = "Copyright (c) 2022 Amos Wenger <amos@bearcove.net>"
SPDX-License-Identifier = "MIT OR Apache-2.0"
precedence = "override"

# Generated files

[[annotations]]
Expand Down Expand Up @@ -220,6 +213,11 @@ path = "**/src/generated/*"
SPDX-FileCopyrightText = "NONE"
SPDX-License-Identifier = "CC0-1.0"

[[annotations]]
path = "tools/dstack-test/tests/fixtures/**"
SPDX-FileCopyrightText = "NONE"
SPDX-License-Identifier = "CC0-1.0"

[[annotations]]
path = "dstack/gateway/assets/*"
SPDX-FileCopyrightText = "NONE"
Expand Down Expand Up @@ -258,3 +256,26 @@ path = [
]
SPDX-FileCopyrightText = "NONE"
SPDX-License-Identifier = "CC0-1.0"

[[annotations]]
path = [
"docs/test-plans/core-components-full/index.json",
"docs/test-plans/core-components-full/source-inventory.json",
]
SPDX-FileCopyrightText = "© 2026 Phala Network <dstack@phala.network>"
SPDX-License-Identifier = "Apache-2.0"

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

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

[[annotations]]
path = "docs/test-plans/core-components-full/source-coverage-map.json"
SPDX-FileCopyrightText = "© 2026 Phala Network <dstack@phala.network>"
SPDX-License-Identifier = "Apache-2.0"
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
<!-- SPDX-FileCopyrightText: © 2026 Phala Network <dstack@phala.network> -->
<!-- SPDX-License-Identifier: Apache-2.0 -->
<a id="tc-gos-tappd-001"></a>
# TC-GOS-TAPPD-001: Tappd.DeriveKey

## Metadata

- Priority: P1
- Type: Functional, API, Security, Regression
- Minimum environment: SIMULATOR
- Automation: Yes
- Requirements: [req-gos-tappd-001](../../../feature-audit.md#req-gos-tappd-001)
- Risks: [risk-gos-tappd-001](../../../feature-audit.md#risk-gos-tappd-001)
- Source: `dstack/guest-agent/rpc/proto/agent_rpc.proto:15`

## Prepared execution knowledge

- Read and obey [`automation/execution-guide.md`](../../../automation/execution-guide.md) before executing Step 1.
- Read `DSTACK_TEST_RUNTIME_MANIFEST` once and use its prepared binaries, shared Cargo target, fixture paths, commit, and toolchain as authoritative. Do not rediscover them from processes, old sessions, or broad source searches.
- Runtime state and evidence remain case-scoped even though immutable build outputs are shared.
- Prepared RPC contract: `Tappd.DeriveKey` takes `DeriveKeyArgs` (`path: string`, `subject: string`, `alt_names: string`, `usage_ra_tls: bool`, `usage_server_auth: bool`, `usage_client_auth: bool`, `random_seed: bool`) and returns `GetTlsKeyResponse` (`key: string`, `certificate_chain: string`). The authoritative field matrix is the matching entry in [`api-inventory.json`](../../../api-inventory.json); do not reconstruct it from implementation source.
- For the candidate guest-agent target, use `automation/start-simulator.sh` and the recorded service socket/route, then `automation/stop-simulator.sh`. Do not compile or design another simulator launcher.
- Exercise the case-prescribed absent/default/valid/boundary-invalid/unknown-field and JSON/protobuf representations with a checked-in helper when available. Keep secret response material in memory and record only structural checks, public material, and hashes.
- If a mismatch occurs, write the provisional result first. Perform narrow source-level root-cause analysis only when failure investigation is enabled.

## Objective

Verify the complete request, response, authorization, state transition, and error contract of `Tappd.DeriveKey`.

## Preconditions

1. The shared plan prerequisites are healthy and the target listener is reachable.
2. Commands use isolated test data and preserve native request and response output.

## Test Data

The `Tappd.DeriveKey` entry in [`api-inventory.json`](../../../api-inventory.json) is mandatory test data. Exercise every request field and every recursively referenced message field as absent/default, valid, boundary-invalid and combined with an unknown field; validate every response field, nested message field, and presence bit.

Use a unique run-scoped identifier and non-production credentials.

## Steps

<a id="tc-gos-tappd-001-step-01"></a>
### Step 1: Inspect the effective prerequisite

Query the relevant health, configuration, and baseline state for tappd.derivekey.

**Expected results:**

- The target component is healthy, the intended listener and policy are effective, and the baseline contains no run-scoped test object.

<a id="tc-gos-tappd-001-step-02"></a>
### Step 2: Exercise the behavior

Invoke `Tappd.DeriveKey` with a valid `DeriveKeyArgs` request using valid service-specific authentication and attestation context; capture the binary and JSON pRPC representations. Then send a schema-invalid request and, where protected, omit the credential.

**Expected results:**

- The valid call returns `GetTlsKeyResponse` with every documented field and exhibits the documented `DeriveKey` state and side effects; invalid framing or fields return a structured error, and protected calls reject missing credentials.

<a id="tc-gos-tappd-001-step-03"></a>
### Step 3: Verify state, isolation, and diagnostics

Re-query the public status/state interfaces, inspect component and peer logs, and repeat the request with one invalid or unauthorized input appropriate to this interface.

**Expected results:**

- Repeated observations match the method’s documented persistence, determinism, and idempotency semantics and remain scoped to the caller or run-scoped object; invalid or unauthorized input is rejected without secret disclosure, partial mutation, or loss of service availability.

## Postconditions

Remove run-scoped objects and restore changed configuration. Preserve logs and responses in the result artifacts.
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
<!-- SPDX-FileCopyrightText: © 2026 Phala Network <dstack@phala.network> -->
<!-- SPDX-License-Identifier: Apache-2.0 -->
<a id="tc-gos-tappd-002"></a>
# TC-GOS-TAPPD-002: Tappd.DeriveK256Key

## Metadata

- Priority: P1
- Type: Functional, API, Security, Regression
- Minimum environment: SIMULATOR
- Automation: Yes
- Requirements: [req-gos-tappd-002](../../../feature-audit.md#req-gos-tappd-002)
- Risks: [risk-gos-tappd-002](../../../feature-audit.md#risk-gos-tappd-002)
- Source: `dstack/guest-agent/rpc/proto/agent_rpc.proto:18`

## Prepared execution knowledge

- Read and obey [`automation/execution-guide.md`](../../../automation/execution-guide.md) before executing Step 1.
- Read `DSTACK_TEST_RUNTIME_MANIFEST` once and use its prepared binaries, shared Cargo target, fixture paths, commit, and toolchain as authoritative. Do not rediscover them from processes, old sessions, or broad source searches.
- Runtime state and evidence remain case-scoped even though immutable build outputs are shared.
- Prepared RPC contract: `Tappd.DeriveK256Key` takes `GetKeyArgs` (`path: string`, `purpose: string`, `algorithm: string`) and returns `DeriveK256KeyResponse` (`k256_key: bytes`, `k256_signature_chain: bytes`). The authoritative field matrix is the matching entry in [`api-inventory.json`](../../../api-inventory.json); do not reconstruct it from implementation source.
- For the candidate guest-agent target, use `automation/start-simulator.sh` and the recorded service socket/route, then `automation/stop-simulator.sh`. Do not compile or design another simulator launcher.
- Exercise the case-prescribed absent/default/valid/boundary-invalid/unknown-field and JSON/protobuf representations with a checked-in helper when available. Keep secret response material in memory and record only structural checks, public material, and hashes.
- If a mismatch occurs, write the provisional result first. Perform narrow source-level root-cause analysis only when failure investigation is enabled.

## Objective

Verify the complete request, response, authorization, state transition, and error contract of `Tappd.DeriveK256Key`.

## Preconditions

1. The shared plan prerequisites are healthy and the target listener is reachable.
2. Commands use isolated test data and preserve native request and response output.

## Test Data

The `Tappd.DeriveK256Key` entry in [`api-inventory.json`](../../../api-inventory.json) is mandatory test data. Exercise every request field and every recursively referenced message field as absent/default, valid, boundary-invalid and combined with an unknown field; validate every response field, nested message field, and presence bit.

Use a unique run-scoped identifier and non-production credentials.

## Steps

<a id="tc-gos-tappd-002-step-01"></a>
### Step 1: Inspect the effective prerequisite

Query the relevant health, configuration, and baseline state for tappd.derivek256key.

**Expected results:**

- The target component is healthy, the intended listener and policy are effective, and the baseline contains no run-scoped test object.

<a id="tc-gos-tappd-002-step-02"></a>
### Step 2: Exercise the behavior

Invoke `Tappd.DeriveK256Key` with a valid `GetKeyArgs` request using valid service-specific authentication and attestation context; capture the binary and JSON pRPC representations. Then send a schema-invalid request and, where protected, omit the credential.

**Expected results:**

- The valid call returns `DeriveK256KeyResponse` with every documented field and exhibits the documented `DeriveK256Key` state and side effects; invalid framing or fields return a structured error, and protected calls reject missing credentials.

<a id="tc-gos-tappd-002-step-03"></a>
### Step 3: Verify state, isolation, and diagnostics

Re-query the public status/state interfaces, inspect component and peer logs, and repeat the request with one invalid or unauthorized input appropriate to this interface.

**Expected results:**

- Repeated observations match the method’s documented persistence, determinism, and idempotency semantics and remain scoped to the caller or run-scoped object; invalid or unauthorized input is rejected without secret disclosure, partial mutation, or loss of service availability.

## Postconditions

Remove run-scoped objects and restore changed configuration. Preserve logs and responses in the result artifacts.
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
<!-- SPDX-FileCopyrightText: © 2026 Phala Network <dstack@phala.network> -->
<!-- SPDX-License-Identifier: Apache-2.0 -->
<a id="tc-gos-tappd-003"></a>
# TC-GOS-TAPPD-003: Tappd.TdxQuote

## Metadata

- Priority: P1
- Type: Functional, API, Security, Regression
- Minimum environment: SIMULATOR
- Automation: Yes
- Requirements: [req-gos-tappd-003](../../../feature-audit.md#req-gos-tappd-003)
- Risks: [risk-gos-tappd-003](../../../feature-audit.md#risk-gos-tappd-003)
- Source: `dstack/guest-agent/rpc/proto/agent_rpc.proto:21`

## Prepared execution knowledge

- Read and obey [`automation/execution-guide.md`](../../../automation/execution-guide.md) before executing Step 1.
- Read `DSTACK_TEST_RUNTIME_MANIFEST` once and use its prepared binaries, shared Cargo target, fixture paths, commit, and toolchain as authoritative. Do not rediscover them from processes, old sessions, or broad source searches.
- Runtime state and evidence remain case-scoped even though immutable build outputs are shared.
- Prepared RPC contract: `Tappd.TdxQuote` takes `TdxQuoteArgs` (`report_data: bytes`, `hash_algorithm: string`, `prefix: string`) and returns `TdxQuoteResponse` (`quote: bytes`, `event_log: string`, `hash_algorithm: string`, `prefix: string`). The authoritative field matrix is the matching entry in [`api-inventory.json`](../../../api-inventory.json); do not reconstruct it from implementation source.
- For the candidate guest-agent target, use `automation/start-simulator.sh` and the recorded service socket/route, then `automation/stop-simulator.sh`. Do not compile or design another simulator launcher.
- Exercise the case-prescribed absent/default/valid/boundary-invalid/unknown-field and JSON/protobuf representations with a checked-in helper when available. Keep secret response material in memory and record only structural checks, public material, and hashes.
- If a mismatch occurs, write the provisional result first. Perform narrow source-level root-cause analysis only when failure investigation is enabled.

## Objective

Verify the complete request, response, authorization, state transition, and error contract of `Tappd.TdxQuote`.

## Preconditions

1. The shared plan prerequisites are healthy and the target listener is reachable.
2. Commands use isolated test data and preserve native request and response output.

## Test Data

The `Tappd.TdxQuote` entry in [`api-inventory.json`](../../../api-inventory.json) is mandatory test data. Exercise every request field and every recursively referenced message field as absent/default, valid, boundary-invalid and combined with an unknown field; validate every response field, nested message field, and presence bit.

Use a unique run-scoped identifier and non-production credentials.

## Steps

<a id="tc-gos-tappd-003-step-01"></a>
### Step 1: Inspect the effective prerequisite

Query the relevant health, configuration, and baseline state for tappd.tdxquote.

**Expected results:**

- The target component is healthy, the intended listener and policy are effective, and the baseline contains no run-scoped test object.

<a id="tc-gos-tappd-003-step-02"></a>
### Step 2: Exercise the behavior

Invoke `Tappd.TdxQuote` with a valid `TdxQuoteArgs` request using valid service-specific authentication and attestation context; capture the binary and JSON pRPC representations. Then send a schema-invalid request and, where protected, omit the credential.

**Expected results:**

- The valid call returns `TdxQuoteResponse` with every documented field and exhibits the documented `TdxQuote` state and side effects; invalid framing or fields return a structured error, and protected calls reject missing credentials.

<a id="tc-gos-tappd-003-step-03"></a>
### Step 3: Verify state, isolation, and diagnostics

Re-query the public status/state interfaces, inspect component and peer logs, and repeat the request with one invalid or unauthorized input appropriate to this interface.

**Expected results:**

- Repeated observations match the method’s documented persistence, determinism, and idempotency semantics and remain scoped to the caller or run-scoped object; invalid or unauthorized input is rejected without secret disclosure, partial mutation, or loss of service availability.

## Postconditions

Remove run-scoped objects and restore changed configuration. Preserve logs and responses in the result artifacts.
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
<!-- SPDX-FileCopyrightText: © 2026 Phala Network <dstack@phala.network> -->
<!-- SPDX-License-Identifier: Apache-2.0 -->
<a id="tc-gos-tappd-004"></a>
# TC-GOS-TAPPD-004: Tappd.RawQuote

## Metadata

- Priority: P1
- Type: Functional, API, Security, Regression
- Minimum environment: SIMULATOR
- Automation: Yes
- Requirements: [req-gos-tappd-004](../../../feature-audit.md#req-gos-tappd-004)
- Risks: [risk-gos-tappd-004](../../../feature-audit.md#risk-gos-tappd-004)
- Source: `dstack/guest-agent/rpc/proto/agent_rpc.proto:28`

## Prepared execution knowledge

- Read and obey [`automation/execution-guide.md`](../../../automation/execution-guide.md) before executing Step 1.
- Read `DSTACK_TEST_RUNTIME_MANIFEST` once and use its prepared binaries, shared Cargo target, fixture paths, commit, and toolchain as authoritative. Do not rediscover them from processes, old sessions, or broad source searches.
- Runtime state and evidence remain case-scoped even though immutable build outputs are shared.
- Prepared RPC contract: `Tappd.RawQuote` takes `RawQuoteArgs` (`report_data: bytes`) and returns `TdxQuoteResponse` (`quote: bytes`, `event_log: string`, `hash_algorithm: string`, `prefix: string`). The authoritative field matrix is the matching entry in [`api-inventory.json`](../../../api-inventory.json); do not reconstruct it from implementation source.
- For the candidate guest-agent target, use `automation/start-simulator.sh` and the recorded service socket/route, then `automation/stop-simulator.sh`. Do not compile or design another simulator launcher.
- Exercise the case-prescribed absent/default/valid/boundary-invalid/unknown-field and JSON/protobuf representations with a checked-in helper when available. Keep secret response material in memory and record only structural checks, public material, and hashes.
- If a mismatch occurs, write the provisional result first. Perform narrow source-level root-cause analysis only when failure investigation is enabled.

## Objective

Verify the complete request, response, authorization, state transition, and error contract of `Tappd.RawQuote`.

## Preconditions

1. The shared plan prerequisites are healthy and the target listener is reachable.
2. Commands use isolated test data and preserve native request and response output.

## Test Data

The `Tappd.RawQuote` entry in [`api-inventory.json`](../../../api-inventory.json) is mandatory test data. Exercise every request field and every recursively referenced message field as absent/default, valid, boundary-invalid and combined with an unknown field; validate every response field, nested message field, and presence bit.

Use a unique run-scoped identifier and non-production credentials.

## Steps

<a id="tc-gos-tappd-004-step-01"></a>
### Step 1: Inspect the effective prerequisite

Query the relevant health, configuration, and baseline state for tappd.rawquote.

**Expected results:**

- The target component is healthy, the intended listener and policy are effective, and the baseline contains no run-scoped test object.

<a id="tc-gos-tappd-004-step-02"></a>
### Step 2: Exercise the behavior

Invoke `Tappd.RawQuote` with a valid `RawQuoteArgs` request using valid service-specific authentication and attestation context; capture the binary and JSON pRPC representations. Then send a schema-invalid request and, where protected, omit the credential.

**Expected results:**

- The valid call returns `TdxQuoteResponse` with every documented field and exhibits the documented `RawQuote` state and side effects; invalid framing or fields return a structured error, and protected calls reject missing credentials.

<a id="tc-gos-tappd-004-step-03"></a>
### Step 3: Verify state, isolation, and diagnostics

Re-query the public status/state interfaces, inspect component and peer logs, and repeat the request with one invalid or unauthorized input appropriate to this interface.

**Expected results:**

- Repeated observations match the method’s documented persistence, determinism, and idempotency semantics and remain scoped to the caller or run-scoped object; invalid or unauthorized input is rejected without secret disclosure, partial mutation, or loss of service availability.

## Postconditions

Remove run-scoped objects and restore changed configuration. Preserve logs and responses in the result artifacts.
Loading
Loading