Repository navigation
Expand file tree
/
Copy pathmatrix.json
More file actions
99 lines (99 loc) · 4.57 KB
/
Copy pathmatrix.json
File metadata and controls
99 lines (99 loc) · 4.57 KB
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
{
"comment": "Input of GenConfigs.java: languages, pairs, transports, profiles and transport facts. Generated cells are configs/x-<client>-<agent>-<transport>[-unstable].json (and self-<lang>-<transport>[-unstable].json with --self). A language's cells are generated only while it is enabled; a language package enables its row when its programs land. See README.md, Contracts.",
"version": 1,
"stepSelection": "all",
"transports": ["stdio", "http", "ws"],
"profiles": {
"stable": { "suffix": "" },
"unstable": { "suffix": "-unstable" }
},
"languages": {
"java": {
"enabled": true,
"dir": "programs/java",
"peers": [],
"env": {},
"transports": ["stdio", "http", "ws"],
"readyTimeoutSec": 60
},
"typescript": {
"enabled": true,
"dir": "programs/node",
"peers": ["typescript-sdk"],
"env": { "TS_SDK": "${peer.typescript-sdk}" },
"transports": ["stdio", "http", "ws"],
"readyTimeoutSec": 60
},
"rust": {
"enabled": true,
"dir": "programs/rust",
"peers": ["rust-sdk"],
"env": { "RUST_SDK": "${peer.rust-sdk}", "CARGO_TARGET_DIR": "${CACHE}/build/${peerKey.rust-sdk}" },
"transports": ["stdio", "http", "ws"],
"readyTimeoutSec": 60
},
"python": {
"enabled": true,
"dir": "programs/python",
"peers": ["python-sdk"],
"env": { "PY_SDK": "${peer.python-sdk}", "PYTHONUNBUFFERED": "1" },
"transports": ["stdio", "http", "ws"],
"readyTimeoutSec": 60
},
"kotlin": {
"enabled": true,
"dir": "programs/kotlin",
"peers": ["kotlin-sdk"],
"env": { "KOTLIN_SDK": "${peer.kotlin-sdk}" },
"transports": ["stdio", "ws"],
"readyTimeoutSec": 90
}
},
"pairs": [
["java", "java"],
["java", "typescript"], ["typescript", "java"],
["java", "rust"], ["rust", "java"],
["java", "python"], ["python", "java"],
["java", "kotlin"], ["kotlin", "java"]
],
"self": ["typescript", "rust", "python", "kotlin"],
"facts": [
{
"comment": "Java client -> Java agent on HTTP negotiates h2c on every request (carried over from the retired interop-java-java).",
"when": { "client": "java", "agent": "java", "transport": "http" },
"requiredOutput": { "client": ["negotiated HTTP_2"] },
"forbiddenOutput": { "client": ["negotiated HTTP_1_1"], "agent": [" /acp HTTP/1.1 "] },
"requiredPatterns": { "agent": ["\\[http\\] POST /acp HTTP/2\\.0 .*-> 200", "\\[http\\] DELETE /acp HTTP/2\\.0 .*-> 202"] }
},
{
"comment": "The Java client -> TypeScript or Rust agent on HTTP: neither server speaks h2c, so the Java client's probe falls back to HTTP/1.1 and every request is HTTP/1.1; DELETE is answered 202 (carried over from interop-ts-server and interop-rust-server).",
"when": { "client": "java", "agent": ["typescript", "rust"], "transport": "http" },
"requiredOutput": { "client": ["negotiated HTTP_1_1"] },
"forbiddenOutput": { "client": ["negotiated HTTP_2"] },
"requiredPatterns": { "agent": ["\\[http\\] POST /acp HTTP/1\\.1 .*-> 200", "\\[http\\] DELETE /acp HTTP/1\\.1 .*-> 202"] }
},
{
"comment": "The Java client -> Python agent on HTTP negotiates h2c; DELETE is answered 202 (carried over from interop-python-server).",
"when": { "client": "java", "agent": "python", "transport": "http" },
"requiredOutput": { "client": ["negotiated HTTP_2"] },
"forbiddenOutput": { "client": ["negotiated HTTP_1_1"] },
"requiredPatterns": { "agent": ["\\[http\\] POST /acp HTTP/2(\\.0)? .*-> 200", "\\[http\\] DELETE /acp HTTP/2(\\.0)? .*-> 202"] }
},
{
"comment": "TypeScript, Rust and Python clients -> Java agent on HTTP stay on HTTP/1.1 (no h2c upgrade) (carried over from interop-{ts,rust,python}-client).",
"when": { "client": ["typescript", "rust", "python"], "agent": "java", "transport": "http" },
"forbiddenOutput": { "agent": [" /acp HTTP/2.0 "] },
"requiredPatterns": { "agent": ["\\[http\\] POST /acp HTTP/1\\.1 .*-> 200", "\\[http\\] DELETE /acp HTTP/1\\.1 .*-> 202"] }
},
{
"comment": "Any client closing an HTTP connection to the Java agent sends DELETE, answered 202.",
"when": { "agent": "java", "transport": "http" },
"requiredPatterns": { "agent": ["\\[http\\] DELETE /acp HTTP/\\S+ .*-> 202"] }
},
{
"comment": "A WebSocket connection to the Java agent is a GET upgrade answered 101.",
"when": { "agent": "java", "transport": "ws" },
"requiredPatterns": { "agent": ["\\[http\\] GET /acp HTTP/1\\.1 -> 101 .*upgrade=\"websocket\""] }
}
]
}