mockserver-client 7.2.0__tar.gz → 7.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {mockserver_client-7.2.0 → mockserver_client-7.4.0}/PKG-INFO +136 -2
- {mockserver_client-7.2.0 → mockserver_client-7.4.0}/README.md +135 -1
- {mockserver_client-7.2.0 → mockserver_client-7.4.0}/mockserver/__init__.py +80 -0
- mockserver_client-7.4.0/mockserver/a2a.py +527 -0
- {mockserver_client-7.2.0 → mockserver_client-7.4.0}/mockserver/async_client.py +515 -3
- {mockserver_client-7.2.0 → mockserver_client-7.4.0}/mockserver/client.py +224 -0
- {mockserver_client-7.2.0 → mockserver_client-7.4.0}/mockserver/llm.py +174 -0
- {mockserver_client-7.2.0 → mockserver_client-7.4.0}/mockserver/models.py +1162 -14
- mockserver_client-7.4.0/mockserver/pytest_plugin.py +131 -0
- {mockserver_client-7.2.0 → mockserver_client-7.4.0}/mockserver/websocket_client.py +20 -8
- {mockserver_client-7.2.0 → mockserver_client-7.4.0}/mockserver_client.egg-info/PKG-INFO +136 -2
- {mockserver_client-7.2.0 → mockserver_client-7.4.0}/mockserver_client.egg-info/SOURCES.txt +7 -0
- mockserver_client-7.4.0/mockserver_client.egg-info/entry_points.txt +2 -0
- {mockserver_client-7.2.0 → mockserver_client-7.4.0}/pyproject.toml +4 -1
- mockserver_client-7.4.0/tests/test_a2a.py +363 -0
- {mockserver_client-7.2.0 → mockserver_client-7.4.0}/tests/test_async_client.py +226 -0
- {mockserver_client-7.2.0 → mockserver_client-7.4.0}/tests/test_client.py +212 -0
- mockserver_client-7.4.0/tests/test_control_plane.py +392 -0
- {mockserver_client-7.2.0 → mockserver_client-7.4.0}/tests/test_integration.py +38 -0
- {mockserver_client-7.2.0 → mockserver_client-7.4.0}/tests/test_llm.py +85 -0
- {mockserver_client-7.2.0 → mockserver_client-7.4.0}/tests/test_models.py +711 -2
- mockserver_client-7.4.0/tests/test_pytest_plugin.py +64 -0
- mockserver_client-7.4.0/tests/test_roundtrip_fidelity.py +231 -0
- {mockserver_client-7.2.0 → mockserver_client-7.4.0}/mockserver/exceptions.py +0 -0
- {mockserver_client-7.2.0 → mockserver_client-7.4.0}/mockserver/fluent.py +0 -0
- {mockserver_client-7.2.0 → mockserver_client-7.4.0}/mockserver/launcher.py +0 -0
- {mockserver_client-7.2.0 → mockserver_client-7.4.0}/mockserver/mcp.py +0 -0
- {mockserver_client-7.2.0 → mockserver_client-7.4.0}/mockserver_client.egg-info/dependency_links.txt +0 -0
- {mockserver_client-7.2.0 → mockserver_client-7.4.0}/mockserver_client.egg-info/requires.txt +0 -0
- {mockserver_client-7.2.0 → mockserver_client-7.4.0}/mockserver_client.egg-info/top_level.txt +0 -0
- {mockserver_client-7.2.0 → mockserver_client-7.4.0}/setup.cfg +0 -0
- {mockserver_client-7.2.0 → mockserver_client-7.4.0}/tests/test_auth_tls.py +0 -0
- {mockserver_client-7.2.0 → mockserver_client-7.4.0}/tests/test_breakpoint.py +0 -0
- {mockserver_client-7.2.0 → mockserver_client-7.4.0}/tests/test_exceptions.py +0 -0
- {mockserver_client-7.2.0 → mockserver_client-7.4.0}/tests/test_fluent.py +0 -0
- {mockserver_client-7.2.0 → mockserver_client-7.4.0}/tests/test_init.py +0 -0
- {mockserver_client-7.2.0 → mockserver_client-7.4.0}/tests/test_launcher.py +0 -0
- {mockserver_client-7.2.0 → mockserver_client-7.4.0}/tests/test_mcp.py +0 -0
- {mockserver_client-7.2.0 → mockserver_client-7.4.0}/tests/test_websocket_client.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mockserver-client
|
|
3
|
-
Version: 7.
|
|
3
|
+
Version: 7.4.0
|
|
4
4
|
Summary: Official Python client for MockServer — create expectations, verify requests, and register dynamic callbacks via WebSocket
|
|
5
5
|
Author-email: James Bloom <jamesdbloom@gmail.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -190,6 +190,63 @@ client.verify_sequence(
|
|
|
190
190
|
client.verify_zero_interactions()
|
|
191
191
|
```
|
|
192
192
|
|
|
193
|
+
## Request Matching
|
|
194
|
+
|
|
195
|
+
### JWT matcher
|
|
196
|
+
|
|
197
|
+
Match requests by the claims (and metadata) of a JWT carried in a header. Each
|
|
198
|
+
claim value is exact-or-regex; prefix a value with `!` to negate it.
|
|
199
|
+
|
|
200
|
+
```python
|
|
201
|
+
from mockserver import HttpRequest, HttpResponse, Jwt
|
|
202
|
+
|
|
203
|
+
client.when(
|
|
204
|
+
HttpRequest.request("/secure")
|
|
205
|
+
.with_method("GET")
|
|
206
|
+
.with_jwt(
|
|
207
|
+
claims={
|
|
208
|
+
"sub": "user-123", # exact match
|
|
209
|
+
"email": "^.+@example.com$", # regex match
|
|
210
|
+
"role": "!admin", # negated — matches any role except admin
|
|
211
|
+
},
|
|
212
|
+
issuer="https://issuer.example.com",
|
|
213
|
+
audience="my-api",
|
|
214
|
+
algorithm="RS256",
|
|
215
|
+
header="authorization", # optional (defaults to Authorization)
|
|
216
|
+
scheme="Bearer", # optional token scheme
|
|
217
|
+
)
|
|
218
|
+
).respond(
|
|
219
|
+
HttpResponse.response("granted", status_code=200)
|
|
220
|
+
)
|
|
221
|
+
|
|
222
|
+
# ...or pass a Jwt object directly:
|
|
223
|
+
HttpRequest.request("/secure").with_jwt(Jwt(claims={"sub": "user-123"}))
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### allOf body matcher
|
|
227
|
+
|
|
228
|
+
Require a request body to satisfy **all** of several body matchers at once.
|
|
229
|
+
|
|
230
|
+
```python
|
|
231
|
+
from mockserver import AllOfBody, Body, JsonPathBody, RegexBody, HttpRequest
|
|
232
|
+
|
|
233
|
+
client.when(
|
|
234
|
+
HttpRequest.request("/api/orders")
|
|
235
|
+
.with_method("POST")
|
|
236
|
+
.with_body(AllOfBody(body_all_of=[
|
|
237
|
+
JsonPathBody(json_path="$.name"), # body has a name field
|
|
238
|
+
RegexBody(regex=".*active.*"), # and mentions "active"
|
|
239
|
+
]))
|
|
240
|
+
).respond(
|
|
241
|
+
HttpResponse.response("ok")
|
|
242
|
+
)
|
|
243
|
+
|
|
244
|
+
# Shorthand factory:
|
|
245
|
+
HttpRequest.request("/api/orders").with_body(
|
|
246
|
+
Body.all_of(JsonPathBody(json_path="$.name"), RegexBody(regex=".*active.*"))
|
|
247
|
+
)
|
|
248
|
+
```
|
|
249
|
+
|
|
193
250
|
## Retrieval
|
|
194
251
|
|
|
195
252
|
```python
|
|
@@ -228,6 +285,83 @@ if client.has_started():
|
|
|
228
285
|
client.stop()
|
|
229
286
|
```
|
|
230
287
|
|
|
288
|
+
## AI Protocol Mocking
|
|
289
|
+
|
|
290
|
+
Declarative builders mock an MCP (Model Context Protocol) server or an A2A
|
|
291
|
+
(Agent-to-Agent) server with a single fluent chain. Each builder produces a set of
|
|
292
|
+
HTTP expectations that speak JSON-RPC 2.0 and echo the incoming request id.
|
|
293
|
+
|
|
294
|
+
```python
|
|
295
|
+
from mockserver import mcp_mock, a2a_mock
|
|
296
|
+
|
|
297
|
+
# Mock an MCP server (Streamable HTTP, JSON-RPC 2.0) on /mcp
|
|
298
|
+
mcp_mock() \
|
|
299
|
+
.with_tool("get_weather") \
|
|
300
|
+
.with_description("Get weather for a city") \
|
|
301
|
+
.with_input_schema('{"type": "object", "properties": {"city": {"type": "string"}}}') \
|
|
302
|
+
.responding_with("72F and sunny") \
|
|
303
|
+
.and_() \
|
|
304
|
+
.apply_to(client)
|
|
305
|
+
|
|
306
|
+
# Mock an A2A agent on /a2a (agent card + tasks/send|get|cancel)
|
|
307
|
+
a2a_mock() \
|
|
308
|
+
.with_agent_name("TranslatorAgent") \
|
|
309
|
+
.with_skill("translate") \
|
|
310
|
+
.with_name("Translation") \
|
|
311
|
+
.with_description("Translates text between languages") \
|
|
312
|
+
.with_tag("i18n") \
|
|
313
|
+
.with_example("Translate hello to Spanish") \
|
|
314
|
+
.and_() \
|
|
315
|
+
.on_task_send() \
|
|
316
|
+
.matching_message("translate.*") \
|
|
317
|
+
.responding_with("Hola") \
|
|
318
|
+
.and_() \
|
|
319
|
+
.apply_to(client)
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
The A2A builder also supports streaming (SSE) and push notifications:
|
|
323
|
+
|
|
324
|
+
```python
|
|
325
|
+
a2a_mock() \
|
|
326
|
+
.with_streaming() \
|
|
327
|
+
.with_push_notifications("http://localhost:1234/callback") \
|
|
328
|
+
.apply_to(client)
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
`build()` returns the list of `Expectation` objects without registering them, so
|
|
332
|
+
you can inspect or persist them; `apply_to(client)` registers them via `upsert`.
|
|
333
|
+
|
|
334
|
+
## SRE / Resilience
|
|
335
|
+
|
|
336
|
+
Verify a service-level objective over recorded SLI samples, or run a scheduled
|
|
337
|
+
multi-stage chaos experiment. Both require the corresponding server feature to be
|
|
338
|
+
enabled (`sloTrackingEnabled`, chaos experiments).
|
|
339
|
+
|
|
340
|
+
```python
|
|
341
|
+
# Verify an SLO — a FAIL verdict (HTTP 406) raises MockServerVerificationError
|
|
342
|
+
verdict = client.verify_slo({
|
|
343
|
+
"name": "checkout",
|
|
344
|
+
"minimumSampleCount": 100,
|
|
345
|
+
"objectives": [
|
|
346
|
+
{"sli": "errorRate", "comparator": "LESS_THAN", "threshold": 0.01},
|
|
347
|
+
{"sli": "p99LatencyMs", "comparator": "LESS_THAN", "threshold": 250},
|
|
348
|
+
],
|
|
349
|
+
})
|
|
350
|
+
print(verdict["result"]) # PASS or INCONCLUSIVE
|
|
351
|
+
|
|
352
|
+
# Start a multi-stage chaos experiment (only one may be active at a time)
|
|
353
|
+
client.start_chaos_experiment({
|
|
354
|
+
"name": "latency-injection",
|
|
355
|
+
"loop": False,
|
|
356
|
+
"stages": [
|
|
357
|
+
{"durationMillis": 60000, "profiles": {"payments.svc": {"latencyMs": 500}}},
|
|
358
|
+
],
|
|
359
|
+
})
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
Both methods are available on the async client too (`await client.verify_slo(...)`,
|
|
363
|
+
`await client.start_chaos_experiment(...)`).
|
|
364
|
+
|
|
231
365
|
## TLS Support
|
|
232
366
|
|
|
233
367
|
```python
|
|
@@ -352,7 +486,7 @@ launcher_path = ensure_binary() # returns Path to the launcher executable
|
|
|
352
486
|
```python
|
|
353
487
|
from mockserver.launcher import start
|
|
354
488
|
|
|
355
|
-
server = start(port=1080, version="7.
|
|
489
|
+
server = start(port=1080, version="7.4.0")
|
|
356
490
|
# ...
|
|
357
491
|
server.stop()
|
|
358
492
|
```
|
|
@@ -160,6 +160,63 @@ client.verify_sequence(
|
|
|
160
160
|
client.verify_zero_interactions()
|
|
161
161
|
```
|
|
162
162
|
|
|
163
|
+
## Request Matching
|
|
164
|
+
|
|
165
|
+
### JWT matcher
|
|
166
|
+
|
|
167
|
+
Match requests by the claims (and metadata) of a JWT carried in a header. Each
|
|
168
|
+
claim value is exact-or-regex; prefix a value with `!` to negate it.
|
|
169
|
+
|
|
170
|
+
```python
|
|
171
|
+
from mockserver import HttpRequest, HttpResponse, Jwt
|
|
172
|
+
|
|
173
|
+
client.when(
|
|
174
|
+
HttpRequest.request("/secure")
|
|
175
|
+
.with_method("GET")
|
|
176
|
+
.with_jwt(
|
|
177
|
+
claims={
|
|
178
|
+
"sub": "user-123", # exact match
|
|
179
|
+
"email": "^.+@example.com$", # regex match
|
|
180
|
+
"role": "!admin", # negated — matches any role except admin
|
|
181
|
+
},
|
|
182
|
+
issuer="https://issuer.example.com",
|
|
183
|
+
audience="my-api",
|
|
184
|
+
algorithm="RS256",
|
|
185
|
+
header="authorization", # optional (defaults to Authorization)
|
|
186
|
+
scheme="Bearer", # optional token scheme
|
|
187
|
+
)
|
|
188
|
+
).respond(
|
|
189
|
+
HttpResponse.response("granted", status_code=200)
|
|
190
|
+
)
|
|
191
|
+
|
|
192
|
+
# ...or pass a Jwt object directly:
|
|
193
|
+
HttpRequest.request("/secure").with_jwt(Jwt(claims={"sub": "user-123"}))
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### allOf body matcher
|
|
197
|
+
|
|
198
|
+
Require a request body to satisfy **all** of several body matchers at once.
|
|
199
|
+
|
|
200
|
+
```python
|
|
201
|
+
from mockserver import AllOfBody, Body, JsonPathBody, RegexBody, HttpRequest
|
|
202
|
+
|
|
203
|
+
client.when(
|
|
204
|
+
HttpRequest.request("/api/orders")
|
|
205
|
+
.with_method("POST")
|
|
206
|
+
.with_body(AllOfBody(body_all_of=[
|
|
207
|
+
JsonPathBody(json_path="$.name"), # body has a name field
|
|
208
|
+
RegexBody(regex=".*active.*"), # and mentions "active"
|
|
209
|
+
]))
|
|
210
|
+
).respond(
|
|
211
|
+
HttpResponse.response("ok")
|
|
212
|
+
)
|
|
213
|
+
|
|
214
|
+
# Shorthand factory:
|
|
215
|
+
HttpRequest.request("/api/orders").with_body(
|
|
216
|
+
Body.all_of(JsonPathBody(json_path="$.name"), RegexBody(regex=".*active.*"))
|
|
217
|
+
)
|
|
218
|
+
```
|
|
219
|
+
|
|
163
220
|
## Retrieval
|
|
164
221
|
|
|
165
222
|
```python
|
|
@@ -198,6 +255,83 @@ if client.has_started():
|
|
|
198
255
|
client.stop()
|
|
199
256
|
```
|
|
200
257
|
|
|
258
|
+
## AI Protocol Mocking
|
|
259
|
+
|
|
260
|
+
Declarative builders mock an MCP (Model Context Protocol) server or an A2A
|
|
261
|
+
(Agent-to-Agent) server with a single fluent chain. Each builder produces a set of
|
|
262
|
+
HTTP expectations that speak JSON-RPC 2.0 and echo the incoming request id.
|
|
263
|
+
|
|
264
|
+
```python
|
|
265
|
+
from mockserver import mcp_mock, a2a_mock
|
|
266
|
+
|
|
267
|
+
# Mock an MCP server (Streamable HTTP, JSON-RPC 2.0) on /mcp
|
|
268
|
+
mcp_mock() \
|
|
269
|
+
.with_tool("get_weather") \
|
|
270
|
+
.with_description("Get weather for a city") \
|
|
271
|
+
.with_input_schema('{"type": "object", "properties": {"city": {"type": "string"}}}') \
|
|
272
|
+
.responding_with("72F and sunny") \
|
|
273
|
+
.and_() \
|
|
274
|
+
.apply_to(client)
|
|
275
|
+
|
|
276
|
+
# Mock an A2A agent on /a2a (agent card + tasks/send|get|cancel)
|
|
277
|
+
a2a_mock() \
|
|
278
|
+
.with_agent_name("TranslatorAgent") \
|
|
279
|
+
.with_skill("translate") \
|
|
280
|
+
.with_name("Translation") \
|
|
281
|
+
.with_description("Translates text between languages") \
|
|
282
|
+
.with_tag("i18n") \
|
|
283
|
+
.with_example("Translate hello to Spanish") \
|
|
284
|
+
.and_() \
|
|
285
|
+
.on_task_send() \
|
|
286
|
+
.matching_message("translate.*") \
|
|
287
|
+
.responding_with("Hola") \
|
|
288
|
+
.and_() \
|
|
289
|
+
.apply_to(client)
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
The A2A builder also supports streaming (SSE) and push notifications:
|
|
293
|
+
|
|
294
|
+
```python
|
|
295
|
+
a2a_mock() \
|
|
296
|
+
.with_streaming() \
|
|
297
|
+
.with_push_notifications("http://localhost:1234/callback") \
|
|
298
|
+
.apply_to(client)
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
`build()` returns the list of `Expectation` objects without registering them, so
|
|
302
|
+
you can inspect or persist them; `apply_to(client)` registers them via `upsert`.
|
|
303
|
+
|
|
304
|
+
## SRE / Resilience
|
|
305
|
+
|
|
306
|
+
Verify a service-level objective over recorded SLI samples, or run a scheduled
|
|
307
|
+
multi-stage chaos experiment. Both require the corresponding server feature to be
|
|
308
|
+
enabled (`sloTrackingEnabled`, chaos experiments).
|
|
309
|
+
|
|
310
|
+
```python
|
|
311
|
+
# Verify an SLO — a FAIL verdict (HTTP 406) raises MockServerVerificationError
|
|
312
|
+
verdict = client.verify_slo({
|
|
313
|
+
"name": "checkout",
|
|
314
|
+
"minimumSampleCount": 100,
|
|
315
|
+
"objectives": [
|
|
316
|
+
{"sli": "errorRate", "comparator": "LESS_THAN", "threshold": 0.01},
|
|
317
|
+
{"sli": "p99LatencyMs", "comparator": "LESS_THAN", "threshold": 250},
|
|
318
|
+
],
|
|
319
|
+
})
|
|
320
|
+
print(verdict["result"]) # PASS or INCONCLUSIVE
|
|
321
|
+
|
|
322
|
+
# Start a multi-stage chaos experiment (only one may be active at a time)
|
|
323
|
+
client.start_chaos_experiment({
|
|
324
|
+
"name": "latency-injection",
|
|
325
|
+
"loop": False,
|
|
326
|
+
"stages": [
|
|
327
|
+
{"durationMillis": 60000, "profiles": {"payments.svc": {"latencyMs": 500}}},
|
|
328
|
+
],
|
|
329
|
+
})
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
Both methods are available on the async client too (`await client.verify_slo(...)`,
|
|
333
|
+
`await client.start_chaos_experiment(...)`).
|
|
334
|
+
|
|
201
335
|
## TLS Support
|
|
202
336
|
|
|
203
337
|
```python
|
|
@@ -322,7 +456,7 @@ launcher_path = ensure_binary() # returns Path to the launcher executable
|
|
|
322
456
|
```python
|
|
323
457
|
from mockserver.launcher import start
|
|
324
458
|
|
|
325
|
-
server = start(port=1080, version="7.
|
|
459
|
+
server = start(port=1080, version="7.4.0")
|
|
326
460
|
# ...
|
|
327
461
|
server.stop()
|
|
328
462
|
```
|
|
@@ -1,17 +1,24 @@
|
|
|
1
1
|
from mockserver.models import (
|
|
2
2
|
AfterAction,
|
|
3
|
+
AllOfBody,
|
|
3
4
|
BinaryResponse,
|
|
4
5
|
Body,
|
|
6
|
+
CaptureRule,
|
|
7
|
+
CaptureSource,
|
|
5
8
|
ConnectionOptions,
|
|
6
9
|
CrossProtocolScenario,
|
|
7
10
|
CrossProtocolTrigger,
|
|
8
11
|
Delay,
|
|
9
12
|
DelayDistribution,
|
|
10
13
|
DnsRecord,
|
|
14
|
+
DnsRecordClass,
|
|
15
|
+
DnsRecordType,
|
|
16
|
+
DnsRequestDefinition,
|
|
11
17
|
DnsResponse,
|
|
12
18
|
Expectation,
|
|
13
19
|
ExpectationId,
|
|
14
20
|
ExpectationStep,
|
|
21
|
+
GraphQLBody,
|
|
15
22
|
GrpcBidiResponse,
|
|
16
23
|
GrpcBidiRule,
|
|
17
24
|
GrpcStreamMessage,
|
|
@@ -20,6 +27,8 @@ from mockserver.models import (
|
|
|
20
27
|
HttpClassCallback,
|
|
21
28
|
HttpError,
|
|
22
29
|
HttpForward,
|
|
30
|
+
HttpForwardValidateAction,
|
|
31
|
+
HttpForwardWithFallback,
|
|
23
32
|
HttpObjectCallback,
|
|
24
33
|
HttpOverrideForwardedRequest,
|
|
25
34
|
HttpRequest,
|
|
@@ -30,14 +39,33 @@ from mockserver.models import (
|
|
|
30
39
|
HttpWebSocketResponse,
|
|
31
40
|
JsonPathBody,
|
|
32
41
|
JsonRpcBody,
|
|
42
|
+
JsonSchemaBody,
|
|
43
|
+
Jwt,
|
|
33
44
|
KeyToMultiValue,
|
|
45
|
+
MultipartBody,
|
|
46
|
+
ParameterBody,
|
|
47
|
+
Protocol,
|
|
48
|
+
RateLimit,
|
|
49
|
+
RateLimitAlgorithm,
|
|
50
|
+
ValidationMode,
|
|
51
|
+
WasmBody,
|
|
52
|
+
XmlBody,
|
|
53
|
+
XmlSchemaBody,
|
|
54
|
+
XPathBody,
|
|
55
|
+
LoadCapture,
|
|
56
|
+
LoadFeeder,
|
|
57
|
+
LoadPacing,
|
|
34
58
|
LoadProfile,
|
|
35
59
|
LoadScenario,
|
|
60
|
+
LoadShape,
|
|
36
61
|
LoadStage,
|
|
37
62
|
LoadStep,
|
|
63
|
+
LoadThreshold,
|
|
64
|
+
MockMode,
|
|
38
65
|
OpenAPIDefinition,
|
|
39
66
|
OpenAPIExpectation,
|
|
40
67
|
Ports,
|
|
68
|
+
RegexBody,
|
|
41
69
|
RequestDefinition,
|
|
42
70
|
ResponseMode,
|
|
43
71
|
SocketAddress,
|
|
@@ -47,10 +75,12 @@ from mockserver.models import (
|
|
|
47
75
|
Verification,
|
|
48
76
|
VerificationSequence,
|
|
49
77
|
VerificationTimes,
|
|
78
|
+
WebSocketFrameMatcher,
|
|
50
79
|
WebSocketMessage,
|
|
51
80
|
)
|
|
52
81
|
from mockserver.llm import (
|
|
53
82
|
Completion,
|
|
83
|
+
ContentFilter,
|
|
54
84
|
ConversationPredicates,
|
|
55
85
|
EmbeddingResponse,
|
|
56
86
|
HttpLlmResponse,
|
|
@@ -59,14 +89,17 @@ from mockserver.llm import (
|
|
|
59
89
|
LlmConversationBuilder,
|
|
60
90
|
LlmFailoverBuilder,
|
|
61
91
|
LlmMockBuilder,
|
|
92
|
+
ModerationResponse,
|
|
62
93
|
NormalizationOptions,
|
|
63
94
|
Provider,
|
|
95
|
+
RerankResponse,
|
|
64
96
|
Role,
|
|
65
97
|
StreamingPhysics,
|
|
66
98
|
ToolUse,
|
|
67
99
|
TurnBuilder,
|
|
68
100
|
Usage,
|
|
69
101
|
completion,
|
|
102
|
+
content_filter,
|
|
70
103
|
conversation,
|
|
71
104
|
cookie,
|
|
72
105
|
embedding,
|
|
@@ -74,7 +107,9 @@ from mockserver.llm import (
|
|
|
74
107
|
llm_failover,
|
|
75
108
|
llm_mock,
|
|
76
109
|
llm_response,
|
|
110
|
+
moderation,
|
|
77
111
|
query_parameter,
|
|
112
|
+
rerank,
|
|
78
113
|
streaming_physics,
|
|
79
114
|
time_to_first_token,
|
|
80
115
|
tool_use,
|
|
@@ -95,6 +130,12 @@ from mockserver.mcp import (
|
|
|
95
130
|
McpToolBuilder,
|
|
96
131
|
mcp_mock,
|
|
97
132
|
)
|
|
133
|
+
from mockserver.a2a import (
|
|
134
|
+
A2aMockBuilder,
|
|
135
|
+
A2aSkillBuilder,
|
|
136
|
+
A2aTaskHandlerBuilder,
|
|
137
|
+
a2a_mock,
|
|
138
|
+
)
|
|
98
139
|
from mockserver.async_client import AsyncMockServerClient
|
|
99
140
|
from mockserver.launcher import (
|
|
100
141
|
MockServerProcess,
|
|
@@ -107,19 +148,26 @@ from mockserver.launcher import (
|
|
|
107
148
|
|
|
108
149
|
__all__ = [
|
|
109
150
|
"AfterAction",
|
|
151
|
+
"AllOfBody",
|
|
110
152
|
"AsyncMockServerClient",
|
|
111
153
|
"BinaryResponse",
|
|
112
154
|
"Body",
|
|
155
|
+
"CaptureRule",
|
|
156
|
+
"CaptureSource",
|
|
113
157
|
"ConnectionOptions",
|
|
114
158
|
"CrossProtocolScenario",
|
|
115
159
|
"CrossProtocolTrigger",
|
|
116
160
|
"Delay",
|
|
117
161
|
"DelayDistribution",
|
|
118
162
|
"DnsRecord",
|
|
163
|
+
"DnsRecordClass",
|
|
164
|
+
"DnsRecordType",
|
|
165
|
+
"DnsRequestDefinition",
|
|
119
166
|
"DnsResponse",
|
|
120
167
|
"Expectation",
|
|
121
168
|
"ExpectationId",
|
|
122
169
|
"ExpectationStep",
|
|
170
|
+
"GraphQLBody",
|
|
123
171
|
"GrpcBidiResponse",
|
|
124
172
|
"GrpcBidiRule",
|
|
125
173
|
"GrpcStreamMessage",
|
|
@@ -128,6 +176,8 @@ __all__ = [
|
|
|
128
176
|
"HttpClassCallback",
|
|
129
177
|
"HttpError",
|
|
130
178
|
"HttpForward",
|
|
179
|
+
"HttpForwardValidateAction",
|
|
180
|
+
"HttpForwardWithFallback",
|
|
131
181
|
"HttpObjectCallback",
|
|
132
182
|
"HttpOverrideForwardedRequest",
|
|
133
183
|
"HttpRequest",
|
|
@@ -138,12 +188,31 @@ __all__ = [
|
|
|
138
188
|
"HttpWebSocketResponse",
|
|
139
189
|
"JsonPathBody",
|
|
140
190
|
"JsonRpcBody",
|
|
191
|
+
"JsonSchemaBody",
|
|
192
|
+
"Jwt",
|
|
141
193
|
"KeyToMultiValue",
|
|
194
|
+
"MultipartBody",
|
|
195
|
+
"ParameterBody",
|
|
196
|
+
"Protocol",
|
|
197
|
+
"RateLimit",
|
|
198
|
+
"RateLimitAlgorithm",
|
|
199
|
+
"ValidationMode",
|
|
200
|
+
"WasmBody",
|
|
201
|
+
"XmlBody",
|
|
202
|
+
"XmlSchemaBody",
|
|
203
|
+
"XPathBody",
|
|
204
|
+
"LoadCapture",
|
|
205
|
+
"LoadFeeder",
|
|
206
|
+
"LoadPacing",
|
|
142
207
|
"LoadProfile",
|
|
143
208
|
"LoadScenario",
|
|
209
|
+
"LoadShape",
|
|
144
210
|
"LoadStage",
|
|
145
211
|
"LoadStep",
|
|
212
|
+
"LoadThreshold",
|
|
213
|
+
"MockMode",
|
|
146
214
|
"Completion",
|
|
215
|
+
"ContentFilter",
|
|
147
216
|
"ConversationPredicates",
|
|
148
217
|
"EmbeddingResponse",
|
|
149
218
|
"HttpLlmResponse",
|
|
@@ -152,14 +221,17 @@ __all__ = [
|
|
|
152
221
|
"LlmConversationBuilder",
|
|
153
222
|
"LlmFailoverBuilder",
|
|
154
223
|
"LlmMockBuilder",
|
|
224
|
+
"ModerationResponse",
|
|
155
225
|
"NormalizationOptions",
|
|
156
226
|
"Provider",
|
|
227
|
+
"RerankResponse",
|
|
157
228
|
"Role",
|
|
158
229
|
"StreamingPhysics",
|
|
159
230
|
"ToolUse",
|
|
160
231
|
"TurnBuilder",
|
|
161
232
|
"Usage",
|
|
162
233
|
"completion",
|
|
234
|
+
"content_filter",
|
|
163
235
|
"conversation",
|
|
164
236
|
"cookie",
|
|
165
237
|
"embedding",
|
|
@@ -167,7 +239,9 @@ __all__ = [
|
|
|
167
239
|
"llm_failover",
|
|
168
240
|
"llm_mock",
|
|
169
241
|
"llm_response",
|
|
242
|
+
"moderation",
|
|
170
243
|
"query_parameter",
|
|
244
|
+
"rerank",
|
|
171
245
|
"streaming_physics",
|
|
172
246
|
"time_to_first_token",
|
|
173
247
|
"tool_use",
|
|
@@ -177,6 +251,10 @@ __all__ = [
|
|
|
177
251
|
"McpResourceBuilder",
|
|
178
252
|
"McpToolBuilder",
|
|
179
253
|
"mcp_mock",
|
|
254
|
+
"A2aMockBuilder",
|
|
255
|
+
"A2aSkillBuilder",
|
|
256
|
+
"A2aTaskHandlerBuilder",
|
|
257
|
+
"a2a_mock",
|
|
180
258
|
"MockServerCallbackError",
|
|
181
259
|
"MockServerClient",
|
|
182
260
|
"MockServerConnectionError",
|
|
@@ -186,6 +264,7 @@ __all__ = [
|
|
|
186
264
|
"OpenAPIDefinition",
|
|
187
265
|
"OpenAPIExpectation",
|
|
188
266
|
"Ports",
|
|
267
|
+
"RegexBody",
|
|
189
268
|
"RequestDefinition",
|
|
190
269
|
"ResponseMode",
|
|
191
270
|
"SocketAddress",
|
|
@@ -195,6 +274,7 @@ __all__ = [
|
|
|
195
274
|
"Verification",
|
|
196
275
|
"VerificationSequence",
|
|
197
276
|
"VerificationTimes",
|
|
277
|
+
"WebSocketFrameMatcher",
|
|
198
278
|
"WebSocketMessage",
|
|
199
279
|
"MockServerProcess",
|
|
200
280
|
"bundle_base_name",
|