Skip to content

Commit 82b5475

Browse files
Add capacity for self-closing messages
1 parent 15d333e commit 82b5475

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

tests/v2/datagrams.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from dataclasses import dataclass
22
from typing import (
33
Any,
4+
Literal,
45
NewType,
56
TypeAlias,
67
)
@@ -30,13 +31,17 @@ class ValueSet:
3031
create_alias: StreamAlias | None = None
3132
stream_alias: StreamAlias | None = None
3233
payload: Datagram | None = None
34+
stream_closed: Literal[True] | None = None
3335

3436

3537
@dataclass(frozen=True)
3638
class FromClient:
3739
handshake_request: tuple[ClientId, ServerId, SessionId] | ValueSet | None = None
38-
stream_open: tuple[ClientId, ServerId, str, str, StreamId] | ValueSet | None = None
40+
stream_open: (
41+
tuple[ClientId, ServerId, str, str, StreamId, Datagram] | ValueSet | None
42+
) = None
3943
stream_frame: tuple[ClientId, ServerId, int, int, Datagram] | ValueSet | None = None
44+
stream_closed: Literal[True] | None = None
4045

4146

4247
@dataclass(frozen=True)
@@ -75,7 +80,12 @@ def decode_FromClient(datagram: dict[str, Any]) -> FromClient:
7580
datagram["serviceName"],
7681
datagram["procedureName"],
7782
StreamId(datagram["streamId"]),
83+
datagram["payload"],
84+
),
85+
stream_closed=(
86+
datagram["controlFlags"] & 0b01000 > 0 # STREAM_CLOSED_BIT
7887
)
88+
or None,
7989
)
8090
elif datagram:
8191
return FromClient(

tests/v2/interpreter.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ def from_client_interpreter(
7373
payload=_build_handshake_resp(session_id),
7474
)
7575
elif isinstance(received.stream_open, tuple):
76-
(from_, to, service_name, procedure_name, stream_id) = received.stream_open
76+
(from_, to, service_name, procedure_name, stream_id, payload) = received.stream_open
7777
assert isinstance(expected.stream_open, ValueSet), "Expected ValueSet 2"
7878
assert expected.stream_open.from_ == to, (
7979
f"Expected {expected.stream_open.from_} == {to}"
@@ -90,6 +90,13 @@ def from_client_interpreter(
9090
assert expected.stream_open.create_alias, (
9191
"Expected create_alias to be a StreamAlias"
9292
)
93+
if expected.stream_open.payload is not None and payload is not None:
94+
assert expected.stream_open.payload == payload, (
95+
f"Expected {expected.stream_open.payload} == {payload}"
96+
)
97+
assert expected.stream_open.stream_closed or not received.stream_closed, (
98+
f"Are we self-closing? {expected.stream_open.stream_closed} or not {received.stream_closed}"
99+
)
93100
# Do it all again because mypy can't infer correctly
94101
alias_mapping: tuple[ClientId, ServerId, StreamId] = (
95102
ClientId(from_),

0 commit comments

Comments
 (0)