Commit b8efa4d
authored
test(messages): add live Claude Agent SDK smoke test against /v1/messages (#6010)
## What
Adds a live smoke test that drives the upstream
[`claude-agent-sdk`](https://github.com/anthropics/claude-agent-sdk-python)
Python package against a local OGX server, exercising the Anthropic
Messages (`/v1/messages`) path end to end through a real client. This is
the SDK companion to the Claude Code CLI smoke test merged in #5986
(RHAIENG-5377).
The SDK does not speak HTTP itself — it spawns the Claude Code CLI as a
subprocess and parses its streamed session output. So this covers a
distinct client surface (the SDK's session machinery: message streaming,
`ResultMessage` parsing) on top of the same path: full system prompt,
tool definitions, and an inline system-role message that the server must
accept and dispatch to the backing provider.
## Why live, not record/replay
The SDK drives the real CLI, which bakes the working directory, date,
and platform into every request body. The recording system keys on
SHA256 of the request body, so those hashes are not reproducible across
runs or machines — record/replay is not viable. The test runs live
against Ollama and self-skips unless **both** the `claude-agent-sdk`
package and the `claude` binary are available.
## What it asserts
Integration health, not answer quality — a small local model driving the
Claude Code harness cannot be relied on to produce specific text. The
test checks the parsed `ResultMessage`:
- `subtype == "success"` and `is_error is False`
- the backing model present in `model_usage`
A regression like a rejected inline system-role message would surface as
a session error and be caught here.
## Changes
- New test: `tests/integration/messages/test_claude_agent_sdk.py`
- New CI workflow:
`.github/workflows/integration-tests-messages-sdk.yml` (provisions
Ollama, installs the pinned CLI, runs the test live)
- `claude-agent-sdk>=0.2.0` added to the `test` dependency group (locked
to 0.2.87)
## Test plan
Ran live against local Ollama using the same CI command:
```
./scripts/integration-tests.sh \
--stack-config server:ci-tests --setup ollama --suite messages \
--inference-mode live --pattern test_claude_agent_sdk_smoke
```
Result:
```
tests/integration/messages/test_claude_agent_sdk.py::test_claude_agent_sdk_smoke[txt=ollama/llama3.2:3b-instruct-fp16] PASSED
1 passed, 20 deselected in 36.45s
```
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Signed-off-by: Charlie Doern <cdoern@redhat.com>1 parent 9690317 commit b8efa4d
3 files changed
Lines changed: 138 additions & 17 deletions
File tree
- .github/workflows
- tests/integration/messages
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
20 | | - | |
| 20 | + | |
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
| |||
Lines changed: 29 additions & 16 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
21 | | - | |
| 21 | + | |
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
| |||
36 | 36 | | |
37 | 37 | | |
38 | 38 | | |
39 | | - | |
40 | | - | |
41 | | - | |
42 | | - | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
43 | 43 | | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
44 | 48 | | |
45 | 49 | | |
46 | | - | |
47 | | - | |
| 50 | + | |
| 51 | + | |
48 | 52 | | |
49 | | - | |
50 | | - | |
51 | | - | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
52 | 56 | | |
53 | 57 | | |
54 | 58 | | |
55 | 59 | | |
56 | 60 | | |
57 | 61 | | |
58 | | - | |
59 | | - | |
| 62 | + | |
| 63 | + | |
60 | 64 | | |
61 | 65 | | |
62 | 66 | | |
| |||
66 | 70 | | |
67 | 71 | | |
68 | 72 | | |
| 73 | + | |
| 74 | + | |
69 | 75 | | |
70 | 76 | | |
71 | 77 | | |
72 | 78 | | |
73 | 79 | | |
74 | 80 | | |
75 | | - | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
76 | 85 | | |
77 | 86 | | |
78 | 87 | | |
79 | 88 | | |
80 | 89 | | |
81 | 90 | | |
82 | | - | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
0 commit comments