gabriel / muse public
test_mpack_frames.py python
354 lines 13.0 KB
Raw
sha256:b636f72dcba9e190afb980bece906fa5b717fbde014b76ef023df8cb96e01eb9 docs: expand cache plan with all seven testing tiers and do… Sonnet 4.6 131 days ago
1 """Tests for MPack frame TypedDicts and protocol constants.
2
3 Coverage tiers
4 --------------
5 - Constants: MPACK_VERSION, MPACK_CONTENT_TYPE, all frame tag values
6 - Frame TypedDicts: required fields, type annotations, total/partial flags
7 - Frame tag registry: every tag maps to a TypedDict
8 - Canonical signature payload: deterministic bytes, field coverage
9 - Forward-compatibility: unknown frame tags are single ASCII characters
10 """
11 from __future__ import annotations
12
13 import msgpack
14 from typing import get_type_hints
15
16
17 # ---------------------------------------------------------------------------
18 # Constants
19 # ---------------------------------------------------------------------------
20
21
22 class TestConstants:
23 def test_mpack_version(self) -> None:
24 from muse.core.mpack import MPACK_VERSION
25 assert MPACK_VERSION == "mpack/1.0"
26
27 def test_mpack_content_type(self) -> None:
28 from muse.core.mpack import MPACK_CONTENT_TYPE
29 assert MPACK_CONTENT_TYPE == "application/x-muse-mpack"
30
31 def test_frame_tags_are_single_uppercase_ascii(self) -> None:
32 from muse.core.mpack import (
33 FRAME_HEADER, FRAME_OBJECT, FRAME_COMMIT_PACK, FRAME_END,
34 FRAME_PROGRESS, FRAME_ERROR, FRAME_RESULT, FRAME_ACK,
35 )
36 for tag in (FRAME_HEADER, FRAME_OBJECT, FRAME_COMMIT_PACK, FRAME_END,
37 FRAME_PROGRESS, FRAME_ERROR, FRAME_RESULT, FRAME_ACK):
38 assert isinstance(tag, str) and len(tag) == 1 and tag.isupper(), (
39 f"Frame tag {tag!r} must be a single uppercase ASCII character"
40 )
41
42 def test_frame_tags_are_distinct(self) -> None:
43 from muse.core.mpack import (
44 FRAME_HEADER, FRAME_OBJECT, FRAME_COMMIT_PACK, FRAME_END,
45 FRAME_PROGRESS, FRAME_ERROR, FRAME_RESULT, FRAME_ACK,
46 )
47 tags = [FRAME_HEADER, FRAME_OBJECT, FRAME_COMMIT_PACK, FRAME_END,
48 FRAME_PROGRESS, FRAME_ERROR, FRAME_RESULT, FRAME_ACK]
49 assert len(set(tags)) == len(tags), "All frame tags must be unique"
50
51 def test_frame_header_tag_is_H(self) -> None:
52 from muse.core.mpack import FRAME_HEADER
53 assert FRAME_HEADER == "H"
54
55 def test_frame_object_tag_is_O(self) -> None:
56 from muse.core.mpack import FRAME_OBJECT
57 assert FRAME_OBJECT == "O"
58
59 def test_frame_commit_pack_tag_is_C(self) -> None:
60 from muse.core.mpack import FRAME_COMMIT_PACK
61 assert FRAME_COMMIT_PACK == "C"
62
63 def test_frame_end_tag_is_E(self) -> None:
64 from muse.core.mpack import FRAME_END
65 assert FRAME_END == "E"
66
67 def test_frame_progress_tag_is_P(self) -> None:
68 from muse.core.mpack import FRAME_PROGRESS
69 assert FRAME_PROGRESS == "P"
70
71 def test_frame_error_tag_is_X(self) -> None:
72 from muse.core.mpack import FRAME_ERROR
73 assert FRAME_ERROR == "X"
74
75 def test_frame_result_tag_is_R(self) -> None:
76 from muse.core.mpack import FRAME_RESULT
77 assert FRAME_RESULT == "R"
78
79 def test_frame_ack_tag_is_A(self) -> None:
80 from muse.core.mpack import FRAME_ACK
81 assert FRAME_ACK == "A"
82
83
84 # ---------------------------------------------------------------------------
85 # Frame TypedDicts — field annotations
86 # ---------------------------------------------------------------------------
87
88
89 class TestMPackHeaderFrame:
90 def test_exists(self) -> None:
91 from muse.core.mpack import MPackHeaderFrame
92 assert MPackHeaderFrame is not None
93
94 def test_has_t_field(self) -> None:
95 from muse.core.mpack import MPackHeaderFrame
96 hints = get_type_hints(MPackHeaderFrame)
97 assert "t" in hints
98
99 def test_has_version_field(self) -> None:
100 from muse.core.mpack import MPackHeaderFrame
101 hints = get_type_hints(MPackHeaderFrame)
102 assert "v" in hints
103
104 def test_has_op_field(self) -> None:
105 from muse.core.mpack import MPackHeaderFrame
106 hints = get_type_hints(MPackHeaderFrame)
107 assert "op" in hints
108
109 def test_has_branch_field(self) -> None:
110 from muse.core.mpack import MPackHeaderFrame
111 hints = get_type_hints(MPackHeaderFrame)
112 assert "branch" in hints
113
114 def test_has_n_objects_field(self) -> None:
115 from muse.core.mpack import MPackHeaderFrame
116 hints = get_type_hints(MPackHeaderFrame)
117 assert "n_objects" in hints
118
119 def test_has_n_commits_field(self) -> None:
120 from muse.core.mpack import MPackHeaderFrame
121 hints = get_type_hints(MPackHeaderFrame)
122 assert "n_commits" in hints
123
124 def test_has_objects_bytes_field(self) -> None:
125 from muse.core.mpack import MPackHeaderFrame
126 hints = get_type_hints(MPackHeaderFrame)
127 assert "objects_bytes" in hints
128
129 def test_has_agent_id_field(self) -> None:
130 from muse.core.mpack import MPackHeaderFrame
131 hints = get_type_hints(MPackHeaderFrame)
132 assert "agent_id" in hints
133
134 def test_has_model_id_field(self) -> None:
135 from muse.core.mpack import MPackHeaderFrame
136 hints = get_type_hints(MPackHeaderFrame)
137 assert "model_id" in hints
138
139 def test_has_signer_key_field(self) -> None:
140 from muse.core.mpack import MPackHeaderFrame
141 hints = get_type_hints(MPackHeaderFrame)
142 assert "signer_key" in hints
143
144 def test_has_signature_field(self) -> None:
145 from muse.core.mpack import MPackHeaderFrame
146 hints = get_type_hints(MPackHeaderFrame)
147 assert "signature" in hints
148
149 def test_has_domains_field(self) -> None:
150 from muse.core.mpack import MPackHeaderFrame
151 hints = get_type_hints(MPackHeaderFrame)
152 assert "domains" in hints
153
154 def test_has_have_field(self) -> None:
155 from muse.core.mpack import MPackHeaderFrame
156 hints = get_type_hints(MPackHeaderFrame)
157 assert "have" in hints
158
159
160 class TestMPackObjectFrame:
161 def test_exists(self) -> None:
162 from muse.core.mpack import MPackObjectFrame
163 assert MPackObjectFrame is not None
164
165 def test_has_t_field(self) -> None:
166 from muse.core.mpack import MPackObjectFrame
167 hints = get_type_hints(MPackObjectFrame)
168 assert "t" in hints
169
170 def test_has_id_field(self) -> None:
171 from muse.core.mpack import MPackObjectFrame
172 hints = get_type_hints(MPackObjectFrame)
173 assert "id" in hints
174
175 def test_has_content_field(self) -> None:
176 from muse.core.mpack import MPackObjectFrame
177 hints = get_type_hints(MPackObjectFrame)
178 assert "content" in hints
179
180 def test_has_enc_field(self) -> None:
181 from muse.core.mpack import MPackObjectFrame
182 hints = get_type_hints(MPackObjectFrame)
183 assert "enc" in hints
184
185 def test_has_sz_field(self) -> None:
186 """sz = uncompressed byte size — receiver budgets before decode."""
187 from muse.core.mpack import MPackObjectFrame
188 hints = get_type_hints(MPackObjectFrame)
189 assert "sz" in hints
190
191 def test_has_dom_field(self) -> None:
192 """dom = domain: code | midi | audio | model-weights | ..."""
193 from muse.core.mpack import MPackObjectFrame
194 hints = get_type_hints(MPackObjectFrame)
195 assert "dom" in hints
196
197 def test_has_path_field(self) -> None:
198 from muse.core.mpack import MPackObjectFrame
199 hints = get_type_hints(MPackObjectFrame)
200 assert "path" in hints
201
202
203 class TestMPackCommitPackFrame:
204 def test_exists(self) -> None:
205 from muse.core.mpack import MPackCommitPackFrame
206 assert MPackCommitPackFrame is not None
207
208 def test_has_required_fields(self) -> None:
209 from muse.core.mpack import MPackCommitPackFrame
210 hints = get_type_hints(MPackCommitPackFrame)
211 for f in ("t", "commits", "snapshots"):
212 assert f in hints, f"MPackCommitPackFrame missing field {f!r}"
213
214
215 class TestMPackEndFrame:
216 def test_exists(self) -> None:
217 from muse.core.mpack import MPackEndFrame
218 assert MPackEndFrame is not None
219
220 def test_has_n_objects_for_integrity_check(self) -> None:
221 from muse.core.mpack import MPackEndFrame
222 hints = get_type_hints(MPackEndFrame)
223 assert "n_objects" in hints
224
225 def test_has_n_commits_for_integrity_check(self) -> None:
226 from muse.core.mpack import MPackEndFrame
227 hints = get_type_hints(MPackEndFrame)
228 assert "n_commits" in hints
229
230
231 class TestMPackProgressFrame:
232 def test_has_pct_field(self) -> None:
233 """pct enables real progress bars (0.0–100.0), not just text."""
234 from muse.core.mpack import MPackProgressFrame
235 hints = get_type_hints(MPackProgressFrame)
236 assert "pct" in hints
237
238 def test_has_msg_field(self) -> None:
239 from muse.core.mpack import MPackProgressFrame
240 hints = get_type_hints(MPackProgressFrame)
241 assert "msg" in hints
242
243
244 class TestMPackErrorFrame:
245 def test_has_msg_and_code(self) -> None:
246 from muse.core.mpack import MPackErrorFrame
247 hints = get_type_hints(MPackErrorFrame)
248 assert "msg" in hints
249 assert "code" in hints
250
251
252 class TestMPackResultFrame:
253 def test_has_ok_msg_heads_head(self) -> None:
254 from muse.core.mpack import MPackResultFrame
255 hints = get_type_hints(MPackResultFrame)
256 for f in ("ok", "msg", "heads", "head"):
257 assert f in hints, f"MPackResultFrame missing field {f!r}"
258
259
260 class TestMPackAckFrame:
261 def test_has_ack_common_ready(self) -> None:
262 from muse.core.mpack import MPackAckFrame
263 hints = get_type_hints(MPackAckFrame)
264 for f in ("ack", "common", "ready"):
265 assert f in hints, f"MPackAckFrame missing field {f!r}"
266
267
268 # ---------------------------------------------------------------------------
269 # Canonical signature payload
270 # ---------------------------------------------------------------------------
271
272
273 class TestCanonicalHeaderPayload:
274 def test_returns_bytes(self) -> None:
275 from muse.core.mpack import _canonical_header_payload
276 result = _canonical_header_payload(
277 op="push", branch="main", n_objects=10, n_commits=5,
278 agent_id="claude-code", model_id="claude-sonnet-4-6",
279 )
280 assert isinstance(result, bytes)
281
282 def test_is_valid_msgpack(self) -> None:
283 from muse.core.mpack import _canonical_header_payload
284 payload = _canonical_header_payload(
285 op="push", branch="main", n_objects=10, n_commits=5,
286 agent_id="claude-code", model_id="claude-sonnet-4-6",
287 )
288 decoded = msgpack.unpackb(payload, raw=False)
289 assert isinstance(decoded, dict)
290
291 def test_contains_version(self) -> None:
292 from muse.core.mpack import _canonical_header_payload, MPACK_VERSION
293 payload = _canonical_header_payload(
294 op="push", branch="main", n_objects=10, n_commits=5,
295 agent_id="", model_id="",
296 )
297 decoded = msgpack.unpackb(payload, raw=False)
298 assert decoded["v"] == MPACK_VERSION
299
300 def test_covers_all_signing_fields(self) -> None:
301 from muse.core.mpack import _canonical_header_payload
302 payload = _canonical_header_payload(
303 op="push", branch="dev", n_objects=3, n_commits=1,
304 agent_id="claude-code", model_id="claude-sonnet-4-6",
305 )
306 decoded = msgpack.unpackb(payload, raw=False)
307 for field in ("v", "op", "branch", "n_objects", "n_commits", "agent_id", "model_id"):
308 assert field in decoded, f"Canonical payload missing field {field!r}"
309
310 def test_deterministic_across_calls(self) -> None:
311 from muse.core.mpack import _canonical_header_payload
312 kwargs = dict(op="push", branch="main", n_objects=5, n_commits=2,
313 agent_id="claude-code", model_id="claude-sonnet-4-6")
314 a = _canonical_header_payload(**kwargs)
315 b = _canonical_header_payload(**kwargs)
316 assert a == b, "Canonical payload must be deterministic"
317
318 def test_different_inputs_produce_different_payloads(self) -> None:
319 from muse.core.mpack import _canonical_header_payload
320 a = _canonical_header_payload(
321 op="push", branch="main", n_objects=5, n_commits=2,
322 agent_id="claude-code", model_id="claude-sonnet-4-6",
323 )
324 b = _canonical_header_payload(
325 op="fetch", branch="dev", n_objects=10, n_commits=3,
326 agent_id="agentception", model_id="claude-opus-4-6",
327 )
328 assert a != b
329
330
331 # ---------------------------------------------------------------------------
332 # Docstring
333 # ---------------------------------------------------------------------------
334
335
336 class TestDocstring:
337 def _doc(self) -> str:
338 import muse.core.mpack as mod
339 return mod.__doc__ or ""
340
341 def test_documents_frame_sequence(self) -> None:
342 assert "H" in self._doc() and "O" in self._doc() and "C" in self._doc()
343
344 def test_documents_mpack_version(self) -> None:
345 assert "mpack/1.0" in self._doc()
346
347 def test_documents_content_type(self) -> None:
348 assert "application/x-muse-mpack" in self._doc()
349
350 def test_documents_provenance(self) -> None:
351 assert "agent_id" in self._doc() or "provenance" in self._doc().lower()
352
353 def test_documents_compression(self) -> None:
354 assert "zstd" in self._doc() or "zlib" in self._doc()
File History 2 commits
sha256:b636f72dcba9e190afb980bece906fa5b717fbde014b76ef023df8cb96e01eb9 docs: expand cache plan with all seven testing tiers and do… Sonnet 4.6 131 days ago
sha256:7f9e2ef5286aedad9c1e6011b4c46ca27f39dbdad6e3409357e36b26e46b3b7c docs: docstring sprint for-each-ref→hotspots — idiomatic ru… Sonnet 4.6 patch 137 days ago