You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
tests: composed orchestrator integration suite against both official charts (#129)
* tests: composed orchestrator integration suite against both official charts
Add the orchestrator phase to the integration test launcher. run.sh
installs BOTH official Helm charts (snapshot-agent on CHART_AGENT_PORT,
timeslice-orchestrator with snapshotAgentPort matching) and drives real
scenario workloads through the orchestrator gRPC API.
Files added:
- orchestrator/orchestrator_test.go: TestOrchestrator with SingleRLJob
(QueuedRLJobs omitted, blocked by orchestrator cold-start IDLE bug)
- orchestrator/harness.go: ComposedHarness attaching to chart-deployed
components, labeling TEST_NODE with group labels, pre-cleaning leaked
pods from prior runs
Files modified:
- run.sh: --orch-image flag, --phase orchestrator|all, orchestrator
chart install/cleanup, ORCH_CHART_DEPLOYED env var
- runner.yaml: node update/patch RBAC for group labeling,
ResourceClaims create/delete/get/list for DRA scenarios
- README.md: orchestrator phase documentation
- deploy/timesliceorchestrator: snapshotAgentPort value + deployment
args pass-through
- harness/harness.go: WaitPodReadyByLabel accepts empty node
Signed-off-by: Aishu Krishnamurthy <aishu.krishnamurthy@gmail.com>
Signed-off-by: Aishu Kamal <aishuk@google.com>
* tests: 2-node topology, PyTorch default template, QueuedRLJobs enabled
Address review: each group gets its own GPU node (canonical deployment),
default pod template is PyTorch (fast, sufficient for lock/preemption),
and QueuedRLJobs is enabled (acquire-before-deploy model does not hit #137).
Signed-off-by: Aishu Kamal <aishuk@google.com>
* tests: update README for 2-node orchestrator topology
* tests: list 'both' phase in run.sh usage string
---------
Signed-off-by: Aishu Kamal <aishuk@google.com>
Copy file name to clipboardExpand all lines: tests/integration/README.md
+72-40Lines changed: 72 additions & 40 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,21 +1,36 @@
1
1
# Integration Tests
2
2
3
-
End-to-end tests for snapshot-agent backends on real GPU hardware, in k8s and standalone modes, exercising the Helm chart and Makefile deployment paths respectively.
3
+
End-to-end tests for the time-slicing stack on real GPU hardware, exercising the official Helm chart deployment paths.
4
4
5
-
The test suite is written in Go and runs inside the cluster: `run.sh` deploys a test-runner pod, copies the repo source into it, and executes `go test` there. The Go harness deploys the snapshot-agent and inference engine pods itself — one engine at a time, so a single free GPU is enough.
5
+
The test suite is written in Go and runs inside the cluster: `run.sh` deploys a test-runner pod, copies the repo source into it, and executes `go test` there.
6
6
7
-
All snapshot/restore calls go through the **Python client** (`timeslice.snapshot_agent`, invoked via `agentctl.py`), so the entire client layer is covered.
-`snapshot-agent/` — the agent suite: `standalone_test.go` / `k8s_test.go`, plus the agent specifics (`harness.go` agent deployment, `engines.go` engine specs, `agentctl.py` — a thin CLI over the Python client that builds `BackendConfig` protos from primitive flags)
9
+
### snapshot-agent (phases: standalone, k8s)
13
10
14
-
**How the standalone mode for snapshot-agent works:** since the test suite runs inside a GKE cluster, standalone mode is simulated by deploying a privileged pod with `hostPID` and `hostNetwork` on the test node. The `make standalone` artifacts are built in the test runner and copied into this pod, which then runs the agent binary with the same GPU and PID namespace access as a host process. Long-term, standalone tests will run on an actual GPU VM.
11
+
Tests snapshot-agent backends in standalone and k8s modes. The Go harness deploys the snapshot-agent and inference engine pods itself -- one engine at a time, so a single free GPU is enough. All snapshot/restore calls go through the **Python client** (`timeslice.snapshot_agent`, invoked via `agentctl.py`), so the entire client layer is covered.
12
+
13
+
**How the standalone mode works:** since the test suite runs inside a GKE cluster, standalone mode is simulated by deploying a privileged pod with `hostPID` and `hostNetwork` on the test node. The `make standalone` artifacts are built in the test runner and copied into this pod, which then runs the agent binary with the same GPU and PID namespace access as a host process.
14
+
15
+
### orchestrator (phase: orchestrator)
16
+
17
+
Composed orchestrator integration suite. Installs BOTH official Helm charts (snapshot-agent + timeslice-orchestrator) and drives real orchestrator scenarios through the gRPC API. The orchestrator chart is configured with `snapshotAgentPort` matching `CHART_AGENT_PORT` so it commands the suite's own agent.
18
+
19
+
Uses a 2-node topology: `TEST_NODE_SAMPLERS` for the samplers group, `TEST_NODE_TRAINERS` for the trainers group (one GPU per node, separate nodes). `exclusiveLabel` temporarily removes group labels from other nodes so pods land only on the designated test nodes.
0 commit comments