Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
180 commits
Select commit Hold shift + click to select a range
3520b58
test(infrastructure): add deterministic component harnesses
kvinwang Jul 31, 2026
72b17f8
test(plan): define core component acceptance coverage
kvinwang Jul 31, 2026
12b6979
test(results): promote verified component coverage
kvinwang Jul 31, 2026
bb211d9
docs(testing): account for split product commits
kvinwang Jul 31, 2026
7fa7653
docs(testing): record product PR split audit
kvinwang Jul 31, 2026
4473617
docs(testing): account for simulator PR split
kvinwang Jul 31, 2026
cea992b
docs(testing): retain merged PRs in split inventory
kvinwang Jul 31, 2026
dd69b37
test(simulator): enforce configured TPM node ownership
kvinwang Jul 31, 2026
a3bb160
docs(testing): account for TPM ownership correction
kvinwang Jul 31, 2026
b9f92de
Revert "test(simulator): enforce configured TPM node ownership"
kvinwang Jul 31, 2026
69a0fef
docs(testing): reject TPM node race tolerance
kvinwang Jul 31, 2026
27fa06b
docs(testing): add simulator retest watchlist
kvinwang Jul 31, 2026
b7726a0
test(gateway): use existing health and dashboard routes
kvinwang Aug 3, 2026
e8639dc
test(verifier): assert simulator trust-root isolation
kvinwang Aug 4, 2026
08faa9f
test(verifier): validate embedded cache versions
kvinwang Aug 4, 2026
3426d9c
docs(testing): align rewritten PR accounting
kvinwang Aug 4, 2026
4b23eaa
test(guest): validate normal swap boot lifecycle
kvinwang Aug 4, 2026
bb6f790
docs(testing): record closed supervisor socket PR
kvinwang Aug 4, 2026
971811f
test(supervisor): validate UDS auto-start lifecycle
kvinwang Aug 4, 2026
5c0d9bd
test(util): validate certificate outputs independently
kvinwang Aug 4, 2026
9f0984c
test(supervisor): separate client lifecycle coverage
kvinwang Aug 4, 2026
3b537f9
test(gateway): drop DNS credential encryption assumptions
kvinwang Aug 4, 2026
dbc9656
test(gateway): cover app-address DNS failover
kvinwang Aug 5, 2026
e9b4d3e
test(guest): pin wg-checker timing to a uniform 10s clock
kvinwang Aug 5, 2026
920316e
test(vmm): cover filesystem-only CID reload
kvinwang Aug 5, 2026
be3a46d
test(gateway): register upgrade domain through admin API
kvinwang Aug 5, 2026
0864b3f
test(gateway): provision upgrade domain through certbot
kvinwang Aug 5, 2026
fe00d24
test(vmm): preserve stopped VM CID on reload
kvinwang Aug 5, 2026
56928bf
test(guest): retarget tc-gos-observabil-003 at the gateway checker
kvinwang Aug 5, 2026
2022c43
test(gateway): cover ACME credential rotation
kvinwang Aug 5, 2026
bc0d3de
test(kms): cover CA persistence and renewal
kvinwang Aug 5, 2026
86ae910
test(vmm): retarget tc-vmm-serial-006 at log rotation
kvinwang Aug 6, 2026
cd2b80f
test(vmm): cover libvirt network filter lifecycle
kvinwang Aug 6, 2026
795297f
test(vmm): wait for restarted netd listener
kvinwang Aug 6, 2026
6b357bc
test(vmm): avoid destructive netd readiness probe
kvinwang Aug 6, 2026
9347012
test(vmm): read generated NIC MACs from launch plan
kvinwang Aug 6, 2026
c873976
test(vmm): isolate secondary host API port
kvinwang Aug 6, 2026
2fbd24d
test(vmm): inject spoof traffic on the host interface
kvinwang Aug 6, 2026
41428e5
test(vmm): preserve failure evidence and force cleanup
kvinwang Aug 6, 2026
0a027a9
test(vmm): verify filtered network survives QEMU restart
kvinwang Aug 6, 2026
bab51b7
test(kms): restore sign-cert fixture binary
kvinwang Aug 7, 2026
7bed9a1
test: follow current guest and VMM configuration
kvinwang Aug 7, 2026
0138f36
test(runner): retain sweep failure diagnostics
kvinwang Aug 7, 2026
0cbfd28
test(tdxlab): prepare deterministic run prerequisites
kvinwang Aug 7, 2026
59b046a
test(tdxlab): provision pinned Foundry tools
kvinwang Aug 7, 2026
edeb2a6
chore(kms): refresh authorization Bun locks
kvinwang Aug 7, 2026
86dbc1d
test(kms): resolve prepared startup binary
kvinwang Aug 7, 2026
95c232b
test(tdxlab): resolve user toolchain paths
kvinwang Aug 7, 2026
796cea7
test(kms): accept canonical empty Finish response
kvinwang Aug 7, 2026
a7b2e8d
test(tdxlab): document prepared execution path
kvinwang Aug 7, 2026
b4cf461
test(runner): fail sweeps with nonpassing cases
kvinwang Aug 7, 2026
19146ae
test(gateway): follow current debug config
kvinwang Aug 7, 2026
e38bee0
test(attestation): prepare legacy TDX image verification
kvinwang Aug 7, 2026
cf3981f
test(attestation): refresh NitroTPM replay fixture
kvinwang Aug 7, 2026
353fec0
test(guest): retain gateway checker failure context
kvinwang Aug 7, 2026
93b8768
test(tdxlab): build candidate guest prerequisites
kvinwang Aug 7, 2026
c72823f
test(tdxlab): build images from a clean worktree
kvinwang Aug 7, 2026
3bbc993
test(tdxlab): discover flavor-specific mkosi outputs
kvinwang Aug 7, 2026
54636fe
test(gateway): follow current public RPC route
kvinwang Aug 7, 2026
8fdd8c6
test(tdxlab): prepare current GCP TPM replay
kvinwang Aug 7, 2026
775a4c6
test(guest): capture gateway checker exit codes safely
kvinwang Aug 7, 2026
87507b9
test(mkosi): prepare ephemeral OpenSSH host keys
kvinwang Aug 7, 2026
fc65bef
test(guest): use deterministic quote output fault
kvinwang Aug 7, 2026
fdeaad3
test(guest): use deterministic app-key output fault
kvinwang Aug 7, 2026
d8afcba
test(guest): follow atomic random output replacement
kvinwang Aug 7, 2026
0ec33d7
test(guest): use deterministic attestation output fault
kvinwang Aug 7, 2026
9f0fb13
test(guest): use deterministic get-keys output fault
kvinwang Aug 7, 2026
9863c4d
test(simulator): prepare platform replay fixtures
kvinwang Aug 7, 2026
022a6eb
test(gateway): follow current RPC response contracts
kvinwang Aug 7, 2026
f39365b
test(kms): accept current Empty JSON encoding
kvinwang Aug 7, 2026
aec808e
test(kms): follow cloned shutdown handle
kvinwang Aug 7, 2026
a0613c5
test(verifier): follow certificate profile validation
kvinwang Aug 7, 2026
682eb10
test(verifier): use a valid oneshot config port
kvinwang Aug 7, 2026
d5199b6
test(vmm): follow missing log response contract
kvinwang Aug 7, 2026
60cc0ac
test(vmm): materialize mutable image fixtures
kvinwang Aug 7, 2026
e0b9536
test(kms): follow current root-key handover
kvinwang Aug 7, 2026
d0701ac
test(gateway): isolate fixture WireGuard subnets
kvinwang Aug 7, 2026
b966eb7
test(gateway): follow current public info route
kvinwang Aug 7, 2026
1a49a3a
test(gateway): accept current Empty exit response
kvinwang Aug 7, 2026
442ce3d
test(gateway): verify malformed Empty framing
kvinwang Aug 7, 2026
696a5ad
test(gateway): follow current debug configuration
kvinwang Aug 7, 2026
1e0a3f3
test(gateway): follow on-demand TLS key generation
kvinwang Aug 7, 2026
1b91a58
test(gateway): edit prepared TLS paths by section
kvinwang Aug 7, 2026
3c3ac52
test(gateway): accept current DNS Empty responses
kvinwang Aug 7, 2026
7150a2c
test(gateway): follow current certificate store suite
kvinwang Aug 7, 2026
daab385
test(vmm): follow private CID state contract
kvinwang Aug 7, 2026
00396f2
test(vmm): stage reload fixtures across filesystems
kvinwang Aug 7, 2026
7969067
test(vmm): prepare management port for config checks
kvinwang Aug 7, 2026
88fe7aa
test(vmm): follow current UI RPC diagnostics
kvinwang Aug 7, 2026
3af4c76
test(vmm): follow current internal source matrices
kvinwang Aug 7, 2026
e5b0651
test(guest): prepare a shell-capable log fixture image
kvinwang Aug 7, 2026
e252841
test(guest): capture log fixture preparation diagnostics
kvinwang Aug 7, 2026
589ca28
test(tdxlab): prepare dashboard log workload image
kvinwang Aug 7, 2026
2d768f6
test(tdxlab): bind dashboard preparation to case identity
kvinwang Aug 7, 2026
190c7bc
test(kms): prepare finalized Ethereum head
kvinwang Aug 7, 2026
66f7f23
test(integration): follow current gateway admin contract
kvinwang Aug 7, 2026
e7c0077
test(tdxlab): preserve guest image integrity
kvinwang Aug 7, 2026
6ca7b4a
test(integration): bound gateway DNS fixture waits
kvinwang Aug 7, 2026
cfb1737
test(integration): accept compatible Exit request evolution
kvinwang Aug 7, 2026
47bf1dc
style(test): format integration matrix
kvinwang Aug 7, 2026
175514f
test(integration): use mock DNS listener port
kvinwang Aug 7, 2026
bfd4728
test(fixtures): bind cleanup to prepared state root
kvinwang Aug 7, 2026
cdff1e7
test(integration): pin mock DNS zone
kvinwang Aug 7, 2026
7c001b9
test(tdxlab): preflight Docker daemon
kvinwang Aug 7, 2026
cabc761
test(integration): model Cloudflare zone discovery
kvinwang Aug 7, 2026
02e661a
test(tdxlab): prepare user namespaces
kvinwang Aug 7, 2026
1d1b553
test(integration): bridge legacy Gateway contracts
kvinwang Aug 7, 2026
4f5362f
test: fix mixed-version gateway failover harness
kvinwang Aug 8, 2026
2f14dbd
test: select live KMS for failover preparation
kvinwang Aug 8, 2026
d76a07b
test: prepare identity matrix alternate image
kvinwang Aug 8, 2026
0493280
test: remove unused collateral prerequisite
kvinwang Aug 8, 2026
074a710
test: restore PCCS collateral lifecycle matrix
kvinwang Aug 8, 2026
17ae495
test: cover guest configuration entry matrix
kvinwang Aug 8, 2026
9e2ddd7
test: update KMS compatibility certificate config
kvinwang Aug 8, 2026
c1a3117
test: restore KMS provider failover matrix
kvinwang Aug 8, 2026
84fcf1d
test: restore gateway registration failover matrix
kvinwang Aug 8, 2026
45b3fb1
test: follow split VMM restart policy tests
kvinwang Aug 8, 2026
e2c1d02
test: resolve Cargo for gateway refresh harness
kvinwang Aug 8, 2026
13717fc
test: align VMM QEMU platform matrix
kvinwang Aug 8, 2026
f6ba473
test: follow current VMM networking contract
kvinwang Aug 8, 2026
5019a41
test: shorten VMM networking runtime paths
kvinwang Aug 8, 2026
4b61669
test: start bridge VM before launch inspection
kvinwang Aug 8, 2026
2c7180f
test: prepare VMM hugepage prerequisites
kvinwang Aug 8, 2026
333be2e
test: exercise VMM hugepage lifecycle
kvinwang Aug 8, 2026
2fed8ac
test: explicitly start user network VM
kvinwang Aug 8, 2026
4898984
test: detach networking case supervisor
kvinwang Aug 8, 2026
4a62232
test: preserve VMM placement command evidence
kvinwang Aug 8, 2026
c41e243
test: inspect supervised QEMU launch spec
kvinwang Aug 8, 2026
75d4ec9
test: follow attestation suite growth
kvinwang Aug 8, 2026
f579748
test: follow current mock attestation CLI
kvinwang Aug 8, 2026
0aedc78
test: require both cloud quote matrices
kvinwang Aug 8, 2026
307ff97
test: replace removed verifier matrix selectors
kvinwang Aug 8, 2026
c25dd13
test: align verifier coverage with current suites
kvinwang Aug 8, 2026
134bfce
test: prepare isolated Docker subnet pool
kvinwang Aug 8, 2026
1d5af98
test: preserve CAA concurrency diagnostics
kvinwang Aug 8, 2026
b3aae49
test: follow Gateway CAA operation locking
kvinwang Aug 8, 2026
d931faa
test: restore current Certbot and auth regressions
kvinwang Aug 8, 2026
67f738b
test: follow current Gateway unit matrices
kvinwang Aug 8, 2026
421df2b
test: follow current Gateway port-policy matrix
kvinwang Aug 8, 2026
d21d9a2
test: make Gateway DNS routing fixture deterministic
kvinwang Aug 8, 2026
d24c04d
test: follow removed KMS certificate-log surface
kvinwang Aug 8, 2026
35ffc9d
test: execute current KMS binary test target
kvinwang Aug 8, 2026
25342c2
test: prepare seed-matched guest compatibility evidence
kvinwang Aug 8, 2026
7ab7e68
test: cover KMS signatures and injected Gateway outages
kvinwang Aug 8, 2026
7e36f42
test: select prepared TDX simulator explicitly
kvinwang Aug 8, 2026
a7b4e6f
test: run compatibility evidence without hardware TDX
kvinwang Aug 8, 2026
e26102b
test: follow verifier certificate profile ownership
kvinwang Aug 8, 2026
84d2a35
build: record verifier test dependency
kvinwang Aug 8, 2026
7e7f063
test: prepare lease-owned attestation VMM
kvinwang Aug 8, 2026
41c3073
test: separate physical and simulator collateral
kvinwang Aug 8, 2026
071a622
test: observe app identity during Gateway outage
kvinwang Aug 8, 2026
c56024e
test: separate Gateway boot and registration probes
kvinwang Aug 8, 2026
45bf4f8
test: exercise Gateway identity fallback
kvinwang Aug 8, 2026
d566caa
test: decouple identity probe from Gateway cache
kvinwang Aug 8, 2026
110236c
test: allow clients without Gateway endpoints
kvinwang Aug 8, 2026
f656228
test: run guest compatibility on physical TDX
kvinwang Aug 8, 2026
9cfcf9b
test: prepare physical compatibility collateral
kvinwang Aug 8, 2026
e78e5ab
test(verifier): avoid fixed cc-eventlog test count
kvinwang Aug 8, 2026
d7b83a8
test: prepare simulator collateral before guest boot
kvinwang Aug 8, 2026
20d5c57
test: prepare simulated identity image variant
kvinwang Aug 8, 2026
09b6487
test(simulator): restore SEV-SNP ABI regression coverage
kvinwang Aug 8, 2026
efb4c6d
test(kms): prepare nested contract dependencies
kvinwang Aug 8, 2026
75c73b3
test(kms): probe event audit contract fixtures
kvinwang Aug 8, 2026
986b278
test(kms): probe runtime contract fixtures
kvinwang Aug 8, 2026
089f43c
test(guest): wait for bind conflict cleanup
kvinwang Aug 9, 2026
92595a2
test(gateway): synchronize concurrent renewal requests
kvinwang Aug 9, 2026
64093e5
test(guest): cancel bind conflict restart jobs
kvinwang Aug 9, 2026
edd9bc6
test(gateway): prepare allocation wireguard fixture
kvinwang Aug 9, 2026
6f611f4
test(gateway): establish distributed renewal contention
kvinwang Aug 9, 2026
63693f2
test(gateway): isolate allocation recycle phase
kvinwang Aug 9, 2026
d700bed
test(integration): retry rolling KMS metadata probes
kvinwang Aug 9, 2026
d4f9bef
test(platform): wait for sealing provider recovery
kvinwang Aug 9, 2026
a7559a8
test(harness): probe lifecycle readiness deterministically
kvinwang Aug 9, 2026
c1d1068
test(gateway): align allocation and renewal invariants
kvinwang Aug 9, 2026
179e98e
test(integration): await bounded KMS boot failure
kvinwang Aug 10, 2026
23ff0be
test(gateway): recheck distributed renewal freshness
kvinwang Aug 10, 2026
84ce0b3
test(provider): retry transient sealing startup
kvinwang Aug 10, 2026
2db8cd4
test(harness): harden runtime readiness probes
kvinwang Aug 10, 2026
5efa732
test(vmm): probe the browser endpoint directly
kvinwang Aug 10, 2026
3e5021d
test(plan): cover post-baseline merged regressions
kvinwang Aug 14, 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
  •  
  •  
  •  
23 changes: 23 additions & 0 deletions REUSE.toml
Original file line number Diff line number Diff line change
Expand Up @@ -265,3 +265,26 @@ SPDX-License-Identifier = "CC0-1.0"
path = "dstack/crates/qemu-acpi/fixtures/*.bin"
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