annotate tests/test-wireproto-serverreactor.py @ 48362:7e6488aa1261

extensions: add a default "*" suboptions prefix This is similar to what we do in other section (e.g. `paths`) and allow to change the behavior for all extensions. Sub options on individual extensions overwrite the default settings. Differential Revision: https://phab.mercurial-scm.org/D11823
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Fri, 26 Nov 2021 17:22:14 +0100
parents 89a2afe31e82
children 6000f5b25c9b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
1 from __future__ import absolute_import, print_function
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
2
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
3 import unittest
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
4
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
5 from mercurial import (
40129
293835e0fff7 wireprotov2: pass ui into clientreactor and serverreactor
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40126
diff changeset
6 ui as uimod,
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
7 util,
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
8 wireprotoframing as framing,
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
9 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
10 from mercurial.utils import cborutil
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
11
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
12 ffs = framing.makeframefromhumanstring
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
13
41136
a181a1c8af1d tests: migrate test-wireproto-serverreactor.py to our internal CBOR
Augie Fackler <augie@google.com>
parents: 40138
diff changeset
14 OK = b''.join(cborutil.streamencode({b'status': b'ok'}))
37725
3ea8323d6f95 wireprotov2: change command response protocol to include a leading map
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37724
diff changeset
15
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
16
37056
861e9d37e56e wireproto: buffer output frames when in half duplex mode
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37055
diff changeset
17 def makereactor(deferoutput=False):
40129
293835e0fff7 wireprotov2: pass ui into clientreactor and serverreactor
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40126
diff changeset
18 ui = uimod.ui()
293835e0fff7 wireprotov2: pass ui into clientreactor and serverreactor
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40126
diff changeset
19 return framing.serverreactor(ui, deferoutput=deferoutput)
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
20
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
21
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
22 def sendframes(reactor, gen):
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
23 """Send a generator of frame bytearray to a reactor.
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
24
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
25 Emits a generator of results from ``onframerecv()`` calls.
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
26 """
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
27 for frame in gen:
37061
884a0c1604ad wireproto: define attr-based classes for representing frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37060
diff changeset
28 header = framing.parseheader(frame)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
29 payload = frame[framing.FRAME_HEADER_SIZE :]
37061
884a0c1604ad wireproto: define attr-based classes for representing frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37060
diff changeset
30 assert len(payload) == header.length
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
31
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
32 yield reactor.onframerecv(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
33 framing.frame(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
34 header.requestid,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
35 header.streamid,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
36 header.streamflags,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
37 header.typeid,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
38 header.flags,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
39 payload,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
40 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
41 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
42
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
43
37285
3ed344546d9e wireproto: start to associate frame generation with a stream
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37284
diff changeset
44 def sendcommandframes(reactor, stream, rid, cmd, args, datafh=None):
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
45 """Generate frames to run a command and send them to a reactor."""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
46 return sendframes(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
47 reactor, framing.createcommandframes(stream, rid, cmd, args, datafh)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
48 )
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
49
37060
0a6c5cc09a88 wireproto: define human output side channel frame
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37058
diff changeset
50
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
51 class ServerReactorTests(unittest.TestCase):
37284
12bfc724217d tests: fix duplicate and failing test
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37063
diff changeset
52 def _sendsingleframe(self, reactor, f):
12bfc724217d tests: fix duplicate and failing test
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37063
diff changeset
53 results = list(sendframes(reactor, [f]))
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
54 self.assertEqual(len(results), 1)
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
55
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
56 return results[0]
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
57
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
58 def assertaction(self, res, expected):
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
59 self.assertIsInstance(res, tuple)
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
60 self.assertEqual(len(res), 2)
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
61 self.assertIsInstance(res[1], dict)
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
62 self.assertEqual(res[0], expected)
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
63
37055
61393f888dfe wireproto: define and implement responses in framing protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37052
diff changeset
64 def assertframesequal(self, frames, framestrings):
61393f888dfe wireproto: define and implement responses in framing protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37052
diff changeset
65 expected = [ffs(s) for s in framestrings]
61393f888dfe wireproto: define and implement responses in framing protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37052
diff changeset
66 self.assertEqual(list(frames), expected)
61393f888dfe wireproto: define and implement responses in framing protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37052
diff changeset
67
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
68 def test1framecommand(self):
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
69 """Receiving a command in a single frame yields request to run it."""
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
70 reactor = makereactor()
37288
9bfcbe4f4745 wireproto: add streams to frame-based protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37285
diff changeset
71 stream = framing.stream(1)
37285
3ed344546d9e wireproto: start to associate frame generation with a stream
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37284
diff changeset
72 results = list(sendcommandframes(reactor, stream, 1, b'mycommand', {}))
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
73 self.assertEqual(len(results), 1)
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
74 self.assertaction(results[0], b'runcommand')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
75 self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
76 results[0][1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
77 {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
78 b'requestid': 1,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
79 b'command': b'mycommand',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
80 b'args': {},
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
81 b'redirect': None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
82 b'data': None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
83 },
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
84 )
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
85
37056
861e9d37e56e wireproto: buffer output frames when in half duplex mode
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37055
diff changeset
86 result = reactor.oninputeof()
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
87 self.assertaction(result, b'noop')
37056
861e9d37e56e wireproto: buffer output frames when in half duplex mode
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37055
diff changeset
88
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
89 def test1argument(self):
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
90 reactor = makereactor()
37288
9bfcbe4f4745 wireproto: add streams to frame-based protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37285
diff changeset
91 stream = framing.stream(1)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
92 results = list(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
93 sendcommandframes(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
94 reactor, stream, 41, b'mycommand', {b'foo': b'bar'}
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
95 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
96 )
37292
3d0e2cd86e05 wireproto: use CBOR for command requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37290
diff changeset
97 self.assertEqual(len(results), 1)
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
98 self.assertaction(results[0], b'runcommand')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
99 self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
100 results[0][1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
101 {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
102 b'requestid': 41,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
103 b'command': b'mycommand',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
104 b'args': {b'foo': b'bar'},
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
105 b'redirect': None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
106 b'data': None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
107 },
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
108 )
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
109
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
110 def testmultiarguments(self):
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
111 reactor = makereactor()
37288
9bfcbe4f4745 wireproto: add streams to frame-based protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37285
diff changeset
112 stream = framing.stream(1)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
113 results = list(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
114 sendcommandframes(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
115 reactor,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
116 stream,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
117 1,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
118 b'mycommand',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
119 {b'foo': b'bar', b'biz': b'baz'},
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
120 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
121 )
37292
3d0e2cd86e05 wireproto: use CBOR for command requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37290
diff changeset
122 self.assertEqual(len(results), 1)
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
123 self.assertaction(results[0], b'runcommand')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
124 self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
125 results[0][1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
126 {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
127 b'requestid': 1,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
128 b'command': b'mycommand',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
129 b'args': {b'foo': b'bar', b'biz': b'baz'},
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
130 b'redirect': None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
131 b'data': None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
132 },
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
133 )
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
134
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
135 def testsimplecommanddata(self):
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
136 reactor = makereactor()
37288
9bfcbe4f4745 wireproto: add streams to frame-based protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37285
diff changeset
137 stream = framing.stream(1)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
138 results = list(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
139 sendcommandframes(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
140 reactor, stream, 1, b'mycommand', {}, util.bytesio(b'data!')
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
141 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
142 )
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
143 self.assertEqual(len(results), 2)
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
144 self.assertaction(results[0], b'wantframe')
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
145 self.assertaction(results[1], b'runcommand')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
146 self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
147 results[1][1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
148 {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
149 b'requestid': 1,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
150 b'command': b'mycommand',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
151 b'args': {},
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
152 b'redirect': None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
153 b'data': b'data!',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
154 },
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
155 )
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
156
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
157 def testmultipledataframes(self):
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
158 frames = [
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
159 ffs(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
160 b'1 1 stream-begin command-request new|have-data '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
161 b"cbor:{b'name': b'mycommand'}"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
162 ),
37288
9bfcbe4f4745 wireproto: add streams to frame-based protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37285
diff changeset
163 ffs(b'1 1 0 command-data continuation data1'),
9bfcbe4f4745 wireproto: add streams to frame-based protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37285
diff changeset
164 ffs(b'1 1 0 command-data continuation data2'),
9bfcbe4f4745 wireproto: add streams to frame-based protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37285
diff changeset
165 ffs(b'1 1 0 command-data eos data3'),
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
166 ]
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
167
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
168 reactor = makereactor()
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
169 results = list(sendframes(reactor, frames))
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
170 self.assertEqual(len(results), 4)
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
171 for i in range(3):
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
172 self.assertaction(results[i], b'wantframe')
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
173 self.assertaction(results[3], b'runcommand')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
174 self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
175 results[3][1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
176 {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
177 b'requestid': 1,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
178 b'command': b'mycommand',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
179 b'args': {},
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
180 b'redirect': None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
181 b'data': b'data1data2data3',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
182 },
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
183 )
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
184
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
185 def testargumentanddata(self):
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
186 frames = [
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
187 ffs(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
188 b'1 1 stream-begin command-request new|have-data '
37292
3d0e2cd86e05 wireproto: use CBOR for command requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37290
diff changeset
189 b"cbor:{b'name': b'command', b'args': {b'key': b'val',"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
190 b"b'foo': b'bar'}}"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
191 ),
37288
9bfcbe4f4745 wireproto: add streams to frame-based protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37285
diff changeset
192 ffs(b'1 1 0 command-data continuation value1'),
9bfcbe4f4745 wireproto: add streams to frame-based protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37285
diff changeset
193 ffs(b'1 1 0 command-data eos value2'),
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
194 ]
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
195
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
196 reactor = makereactor()
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
197 results = list(sendframes(reactor, frames))
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
198
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
199 self.assertaction(results[-1], b'runcommand')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
200 self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
201 results[-1][1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
202 {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
203 b'requestid': 1,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
204 b'command': b'command',
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
205 b'args': {
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
206 b'key': b'val',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
207 b'foo': b'bar',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
208 },
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
209 b'redirect': None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
210 b'data': b'value1value2',
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
211 },
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
212 )
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
213
37292
3d0e2cd86e05 wireproto: use CBOR for command requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37290
diff changeset
214 def testnewandcontinuation(self):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
215 result = self._sendsingleframe(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
216 makereactor(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
217 ffs(b'1 1 stream-begin command-request new|continuation '),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
218 )
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
219 self.assertaction(result, b'error')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
220 self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
221 result[1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
222 {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
223 b'message': b'received command request frame with both new and '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
224 b'continuation flags set',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
225 },
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
226 )
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
227
37292
3d0e2cd86e05 wireproto: use CBOR for command requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37290
diff changeset
228 def testneithernewnorcontinuation(self):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
229 result = self._sendsingleframe(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
230 makereactor(), ffs(b'1 1 stream-begin command-request 0 ')
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
231 )
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
232 self.assertaction(result, b'error')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
233 self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
234 result[1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
235 {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
236 b'message': b'received command request frame with neither new nor '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
237 b'continuation flags set',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
238 },
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
239 )
37058
c5e9c3b47366 wireproto: support for receiving multiple requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
240
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
241 def testunexpectedcommanddata(self):
37292
3d0e2cd86e05 wireproto: use CBOR for command requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37290
diff changeset
242 """Command data frame when not running a command is an error."""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
243 result = self._sendsingleframe(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
244 makereactor(), ffs(b'1 1 stream-begin command-data 0 ignored')
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
245 )
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
246 self.assertaction(result, b'error')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
247 self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
248 result[1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
249 {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
250 b'message': b'expected sender protocol settings or command request '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
251 b'frame; got 2',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
252 },
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
253 )
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
254
37058
c5e9c3b47366 wireproto: support for receiving multiple requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
255 def testunexpectedcommanddatareceiving(self):
c5e9c3b47366 wireproto: support for receiving multiple requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
256 """Same as above except the command is receiving."""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
257 results = list(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
258 sendframes(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
259 makereactor(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
260 [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
261 ffs(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
262 b'1 1 stream-begin command-request new|more '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
263 b"cbor:{b'name': b'ignored'}"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
264 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
265 ffs(b'1 1 0 command-data eos ignored'),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
266 ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
267 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
268 )
37058
c5e9c3b47366 wireproto: support for receiving multiple requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
269
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
270 self.assertaction(results[0], b'wantframe')
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
271 self.assertaction(results[1], b'error')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
272 self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
273 results[1][1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
274 {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
275 b'message': b'received command data frame for request that is not '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
276 b'expecting data: 1',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
277 },
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
278 )
37058
c5e9c3b47366 wireproto: support for receiving multiple requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
279
37284
12bfc724217d tests: fix duplicate and failing test
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37063
diff changeset
280 def testconflictingrequestidallowed(self):
37058
c5e9c3b47366 wireproto: support for receiving multiple requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
281 """Multiple fully serviced commands with same request ID is allowed."""
37284
12bfc724217d tests: fix duplicate and failing test
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37063
diff changeset
282 reactor = makereactor()
12bfc724217d tests: fix duplicate and failing test
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37063
diff changeset
283 results = []
37289
5fadc63ac99f wireproto: explicit API to create outgoing streams
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37288
diff changeset
284 outstream = reactor.makeoutputstream()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
285 results.append(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
286 self._sendsingleframe(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
287 reactor,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
288 ffs(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
289 b'1 1 stream-begin command-request new '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
290 b"cbor:{b'name': b'command'}"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
291 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
292 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
293 )
40135
966b5f7fd30b wireprotov2: remove functions for creating response frames from bytes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40129
diff changeset
294 result = reactor.oncommandresponsereadyobjects(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
295 outstream, 1, [b'response1']
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
296 )
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
297 self.assertaction(result, b'sendframes')
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
298 list(result[1][b'framegen'])
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
299 results.append(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
300 self._sendsingleframe(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
301 reactor,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
302 ffs(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
303 b'1 1 stream-begin command-request new '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
304 b"cbor:{b'name': b'command'}"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
305 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
306 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
307 )
40135
966b5f7fd30b wireprotov2: remove functions for creating response frames from bytes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40129
diff changeset
308 result = reactor.oncommandresponsereadyobjects(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
309 outstream, 1, [b'response2']
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
310 )
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
311 self.assertaction(result, b'sendframes')
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
312 list(result[1][b'framegen'])
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
313 results.append(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
314 self._sendsingleframe(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
315 reactor,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
316 ffs(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
317 b'1 1 stream-begin command-request new '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
318 b"cbor:{b'name': b'command'}"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
319 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
320 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
321 )
40135
966b5f7fd30b wireprotov2: remove functions for creating response frames from bytes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40129
diff changeset
322 result = reactor.oncommandresponsereadyobjects(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
323 outstream, 1, [b'response3']
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
324 )
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
325 self.assertaction(result, b'sendframes')
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
326 list(result[1][b'framegen'])
37284
12bfc724217d tests: fix duplicate and failing test
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37063
diff changeset
327
37058
c5e9c3b47366 wireproto: support for receiving multiple requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
328 for i in range(3):
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
329 self.assertaction(results[i], b'runcommand')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
330 self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
331 results[i][1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
332 {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
333 b'requestid': 1,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
334 b'command': b'command',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
335 b'args': {},
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
336 b'redirect': None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
337 b'data': None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
338 },
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
339 )
37058
c5e9c3b47366 wireproto: support for receiving multiple requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
340
c5e9c3b47366 wireproto: support for receiving multiple requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
341 def testconflictingrequestid(self):
c5e9c3b47366 wireproto: support for receiving multiple requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
342 """Request ID for new command matching in-flight command is illegal."""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
343 results = list(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
344 sendframes(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
345 makereactor(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
346 [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
347 ffs(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
348 b'1 1 stream-begin command-request new|more '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
349 b"cbor:{b'name': b'command'}"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
350 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
351 ffs(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
352 b'1 1 0 command-request new '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
353 b"cbor:{b'name': b'command1'}"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
354 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
355 ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
356 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
357 )
37058
c5e9c3b47366 wireproto: support for receiving multiple requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
358
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
359 self.assertaction(results[0], b'wantframe')
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
360 self.assertaction(results[1], b'error')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
361 self.assertEqual(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
362 results[1][1],
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
363 {
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
364 b'message': b'request with ID 1 already received',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
365 },
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
366 )
37058
c5e9c3b47366 wireproto: support for receiving multiple requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
367
c5e9c3b47366 wireproto: support for receiving multiple requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
368 def testinterleavedcommands(self):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
369 cbor1 = b''.join(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
370 cborutil.streamencode(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
371 {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
372 b'name': b'command1',
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
373 b'args': {
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
374 b'foo': b'bar',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
375 b'key1': b'val',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
376 },
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
377 }
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
378 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
379 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
380 cbor3 = b''.join(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
381 cborutil.streamencode(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
382 {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
383 b'name': b'command3',
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
384 b'args': {
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
385 b'biz': b'baz',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
386 b'key': b'val',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
387 },
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
388 }
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
389 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
390 )
37058
c5e9c3b47366 wireproto: support for receiving multiple requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
391
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
392 results = list(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
393 sendframes(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
394 makereactor(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
395 [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
396 ffs(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
397 b'1 1 stream-begin command-request new|more %s'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
398 % cbor1[0:6]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
399 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
400 ffs(b'3 1 0 command-request new|more %s' % cbor3[0:10]),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
401 ffs(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
402 b'1 1 0 command-request continuation|more %s'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
403 % cbor1[6:9]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
404 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
405 ffs(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
406 b'3 1 0 command-request continuation|more %s'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
407 % cbor3[10:13]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
408 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
409 ffs(b'3 1 0 command-request continuation %s' % cbor3[13:]),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
410 ffs(b'1 1 0 command-request continuation %s' % cbor1[9:]),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
411 ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
412 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
413 )
37058
c5e9c3b47366 wireproto: support for receiving multiple requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
414
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
415 self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
416 [t[0] for t in results],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
417 [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
418 b'wantframe',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
419 b'wantframe',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
420 b'wantframe',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
421 b'wantframe',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
422 b'runcommand',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
423 b'runcommand',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
424 ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
425 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
426
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
427 self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
428 results[4][1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
429 {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
430 b'requestid': 3,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
431 b'command': b'command3',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
432 b'args': {b'biz': b'baz', b'key': b'val'},
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
433 b'redirect': None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
434 b'data': None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
435 },
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
436 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
437 self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
438 results[5][1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
439 {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
440 b'requestid': 1,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
441 b'command': b'command1',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
442 b'args': {b'foo': b'bar', b'key1': b'val'},
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
443 b'redirect': None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
444 b'data': None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
445 },
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
446 )
37058
c5e9c3b47366 wireproto: support for receiving multiple requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
447
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
448 def testmissingcommanddataframe(self):
37058
c5e9c3b47366 wireproto: support for receiving multiple requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
449 # The reactor doesn't currently handle partially received commands.
c5e9c3b47366 wireproto: support for receiving multiple requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
450 # So this test is failing to do anything with request 1.
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
451 frames = [
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
452 ffs(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
453 b'1 1 stream-begin command-request new|have-data '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
454 b"cbor:{b'name': b'command1'}"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
455 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
456 ffs(b'3 1 0 command-request new ' b"cbor:{b'name': b'command2'}"),
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
457 ]
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
458 results = list(sendframes(makereactor(), frames))
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
459 self.assertEqual(len(results), 2)
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
460 self.assertaction(results[0], b'wantframe')
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
461 self.assertaction(results[1], b'runcommand')
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
462
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
463 def testmissingcommanddataframeflags(self):
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
464 frames = [
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
465 ffs(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
466 b'1 1 stream-begin command-request new|have-data '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
467 b"cbor:{b'name': b'command1'}"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
468 ),
37288
9bfcbe4f4745 wireproto: add streams to frame-based protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37285
diff changeset
469 ffs(b'1 1 0 command-data 0 data'),
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
470 ]
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
471 results = list(sendframes(makereactor(), frames))
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
472 self.assertEqual(len(results), 2)
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
473 self.assertaction(results[0], b'wantframe')
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
474 self.assertaction(results[1], b'error')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
475 self.assertEqual(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
476 results[1][1],
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
477 {
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
478 b'message': b'command data frame without flags',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
479 },
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
480 )
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
481
37058
c5e9c3b47366 wireproto: support for receiving multiple requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
482 def testframefornonreceivingrequest(self):
c5e9c3b47366 wireproto: support for receiving multiple requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
483 """Receiving a frame for a command that is not receiving is illegal."""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
484 results = list(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
485 sendframes(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
486 makereactor(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
487 [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
488 ffs(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
489 b'1 1 stream-begin command-request new '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
490 b"cbor:{b'name': b'command1'}"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
491 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
492 ffs(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
493 b'3 1 0 command-request new|have-data '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
494 b"cbor:{b'name': b'command3'}"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
495 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
496 ffs(b'5 1 0 command-data eos ignored'),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
497 ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
498 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
499 )
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
500 self.assertaction(results[2], b'error')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
501 self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
502 results[2][1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
503 {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
504 b'message': b'received frame for request that is not receiving: 5',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
505 },
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
506 )
37058
c5e9c3b47366 wireproto: support for receiving multiple requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
507
37055
61393f888dfe wireproto: define and implement responses in framing protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37052
diff changeset
508 def testsimpleresponse(self):
61393f888dfe wireproto: define and implement responses in framing protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37052
diff changeset
509 """Bytes response to command sends result frames."""
61393f888dfe wireproto: define and implement responses in framing protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37052
diff changeset
510 reactor = makereactor()
37288
9bfcbe4f4745 wireproto: add streams to frame-based protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37285
diff changeset
511 instream = framing.stream(1)
37285
3ed344546d9e wireproto: start to associate frame generation with a stream
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37284
diff changeset
512 list(sendcommandframes(reactor, instream, 1, b'mycommand', {}))
37055
61393f888dfe wireproto: define and implement responses in framing protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37052
diff changeset
513
37289
5fadc63ac99f wireproto: explicit API to create outgoing streams
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37288
diff changeset
514 outstream = reactor.makeoutputstream()
40135
966b5f7fd30b wireprotov2: remove functions for creating response frames from bytes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40129
diff changeset
515 result = reactor.oncommandresponsereadyobjects(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
516 outstream, 1, [b'response']
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
517 )
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
518 self.assertaction(result, b'sendframes')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
519 self.assertframesequal(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
520 result[1][b'framegen'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
521 [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
522 b'1 2 stream-begin stream-settings eos cbor:b"identity"',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
523 b'1 2 encoded command-response continuation %s' % OK,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
524 b'1 2 encoded command-response continuation cbor:b"response"',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
525 b'1 2 0 command-response eos ',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
526 ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
527 )
37055
61393f888dfe wireproto: define and implement responses in framing protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37052
diff changeset
528
61393f888dfe wireproto: define and implement responses in framing protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37052
diff changeset
529 def testmultiframeresponse(self):
61393f888dfe wireproto: define and implement responses in framing protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37052
diff changeset
530 """Bytes response spanning multiple frames is handled."""
61393f888dfe wireproto: define and implement responses in framing protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37052
diff changeset
531 first = b'x' * framing.DEFAULT_MAX_FRAME_SIZE
61393f888dfe wireproto: define and implement responses in framing protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37052
diff changeset
532 second = b'y' * 100
61393f888dfe wireproto: define and implement responses in framing protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37052
diff changeset
533
61393f888dfe wireproto: define and implement responses in framing protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37052
diff changeset
534 reactor = makereactor()
37288
9bfcbe4f4745 wireproto: add streams to frame-based protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37285
diff changeset
535 instream = framing.stream(1)
37285
3ed344546d9e wireproto: start to associate frame generation with a stream
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37284
diff changeset
536 list(sendcommandframes(reactor, instream, 1, b'mycommand', {}))
37055
61393f888dfe wireproto: define and implement responses in framing protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37052
diff changeset
537
37289
5fadc63ac99f wireproto: explicit API to create outgoing streams
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37288
diff changeset
538 outstream = reactor.makeoutputstream()
40135
966b5f7fd30b wireprotov2: remove functions for creating response frames from bytes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40129
diff changeset
539 result = reactor.oncommandresponsereadyobjects(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
540 outstream, 1, [first + second]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
541 )
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
542 self.assertaction(result, b'sendframes')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
543 self.assertframesequal(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
544 result[1][b'framegen'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
545 [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
546 b'1 2 stream-begin stream-settings eos cbor:b"identity"',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
547 b'1 2 encoded command-response continuation %s' % OK,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
548 b'1 2 encoded command-response continuation Y\x80d',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
549 b'1 2 encoded command-response continuation %s' % first,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
550 b'1 2 encoded command-response continuation %s' % second,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
551 b'1 2 0 command-response eos ',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
552 ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
553 )
37055
61393f888dfe wireproto: define and implement responses in framing protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37052
diff changeset
554
37726
0c184ca594bb wireprotov2: change behavior of error frame
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37725
diff changeset
555 def testservererror(self):
37055
61393f888dfe wireproto: define and implement responses in framing protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37052
diff changeset
556 reactor = makereactor()
37288
9bfcbe4f4745 wireproto: add streams to frame-based protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37285
diff changeset
557 instream = framing.stream(1)
37285
3ed344546d9e wireproto: start to associate frame generation with a stream
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37284
diff changeset
558 list(sendcommandframes(reactor, instream, 1, b'mycommand', {}))
37055
61393f888dfe wireproto: define and implement responses in framing protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37052
diff changeset
559
37289
5fadc63ac99f wireproto: explicit API to create outgoing streams
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37288
diff changeset
560 outstream = reactor.makeoutputstream()
37726
0c184ca594bb wireprotov2: change behavior of error frame
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37725
diff changeset
561 result = reactor.onservererror(outstream, 1, b'some message')
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
562 self.assertaction(result, b'sendframes')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
563 self.assertframesequal(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
564 result[1][b'framegen'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
565 [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
566 b"1 2 stream-begin error-response 0 "
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
567 b"cbor:{b'type': b'server', "
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
568 b"b'message': [{b'msg': b'some message'}]}",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
569 ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
570 )
37055
61393f888dfe wireproto: define and implement responses in framing protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37052
diff changeset
571
37056
861e9d37e56e wireproto: buffer output frames when in half duplex mode
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37055
diff changeset
572 def test1commanddeferresponse(self):
861e9d37e56e wireproto: buffer output frames when in half duplex mode
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37055
diff changeset
573 """Responses when in deferred output mode are delayed until EOF."""
861e9d37e56e wireproto: buffer output frames when in half duplex mode
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37055
diff changeset
574 reactor = makereactor(deferoutput=True)
37288
9bfcbe4f4745 wireproto: add streams to frame-based protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37285
diff changeset
575 instream = framing.stream(1)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
576 results = list(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
577 sendcommandframes(reactor, instream, 1, b'mycommand', {})
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
578 )
37056
861e9d37e56e wireproto: buffer output frames when in half duplex mode
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37055
diff changeset
579 self.assertEqual(len(results), 1)
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
580 self.assertaction(results[0], b'runcommand')
37056
861e9d37e56e wireproto: buffer output frames when in half duplex mode
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37055
diff changeset
581
37289
5fadc63ac99f wireproto: explicit API to create outgoing streams
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37288
diff changeset
582 outstream = reactor.makeoutputstream()
40135
966b5f7fd30b wireprotov2: remove functions for creating response frames from bytes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40129
diff changeset
583 result = reactor.oncommandresponsereadyobjects(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
584 outstream, 1, [b'response']
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
585 )
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
586 self.assertaction(result, b'noop')
37056
861e9d37e56e wireproto: buffer output frames when in half duplex mode
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37055
diff changeset
587 result = reactor.oninputeof()
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
588 self.assertaction(result, b'sendframes')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
589 self.assertframesequal(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
590 result[1][b'framegen'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
591 [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
592 b'1 2 stream-begin stream-settings eos cbor:b"identity"',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
593 b'1 2 encoded command-response continuation %s' % OK,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
594 b'1 2 encoded command-response continuation cbor:b"response"',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
595 b'1 2 0 command-response eos ',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
596 ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
597 )
37056
861e9d37e56e wireproto: buffer output frames when in half duplex mode
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37055
diff changeset
598
861e9d37e56e wireproto: buffer output frames when in half duplex mode
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37055
diff changeset
599 def testmultiplecommanddeferresponse(self):
861e9d37e56e wireproto: buffer output frames when in half duplex mode
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37055
diff changeset
600 reactor = makereactor(deferoutput=True)
37288
9bfcbe4f4745 wireproto: add streams to frame-based protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37285
diff changeset
601 instream = framing.stream(1)
37285
3ed344546d9e wireproto: start to associate frame generation with a stream
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37284
diff changeset
602 list(sendcommandframes(reactor, instream, 1, b'command1', {}))
3ed344546d9e wireproto: start to associate frame generation with a stream
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37284
diff changeset
603 list(sendcommandframes(reactor, instream, 3, b'command2', {}))
37056
861e9d37e56e wireproto: buffer output frames when in half duplex mode
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37055
diff changeset
604
37289
5fadc63ac99f wireproto: explicit API to create outgoing streams
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37288
diff changeset
605 outstream = reactor.makeoutputstream()
40135
966b5f7fd30b wireprotov2: remove functions for creating response frames from bytes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40129
diff changeset
606 result = reactor.oncommandresponsereadyobjects(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
607 outstream, 1, [b'response1']
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
608 )
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
609 self.assertaction(result, b'noop')
40135
966b5f7fd30b wireprotov2: remove functions for creating response frames from bytes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40129
diff changeset
610 result = reactor.oncommandresponsereadyobjects(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
611 outstream, 3, [b'response2']
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
612 )
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
613 self.assertaction(result, b'noop')
37056
861e9d37e56e wireproto: buffer output frames when in half duplex mode
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37055
diff changeset
614 result = reactor.oninputeof()
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
615 self.assertaction(result, b'sendframes')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
616 self.assertframesequal(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
617 result[1][b'framegen'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
618 [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
619 b'1 2 stream-begin stream-settings eos cbor:b"identity"',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
620 b'1 2 encoded command-response continuation %s' % OK,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
621 b'1 2 encoded command-response continuation cbor:b"response1"',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
622 b'1 2 0 command-response eos ',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
623 b'3 2 encoded command-response continuation %s' % OK,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
624 b'3 2 encoded command-response continuation cbor:b"response2"',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
625 b'3 2 0 command-response eos ',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
626 ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
627 )
37057
2ec1fb9de638 wireproto: add request IDs to frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37056
diff changeset
628
2ec1fb9de638 wireproto: add request IDs to frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37056
diff changeset
629 def testrequestidtracking(self):
2ec1fb9de638 wireproto: add request IDs to frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37056
diff changeset
630 reactor = makereactor(deferoutput=True)
37288
9bfcbe4f4745 wireproto: add streams to frame-based protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37285
diff changeset
631 instream = framing.stream(1)
37285
3ed344546d9e wireproto: start to associate frame generation with a stream
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37284
diff changeset
632 list(sendcommandframes(reactor, instream, 1, b'command1', {}))
3ed344546d9e wireproto: start to associate frame generation with a stream
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37284
diff changeset
633 list(sendcommandframes(reactor, instream, 3, b'command2', {}))
3ed344546d9e wireproto: start to associate frame generation with a stream
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37284
diff changeset
634 list(sendcommandframes(reactor, instream, 5, b'command3', {}))
37057
2ec1fb9de638 wireproto: add request IDs to frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37056
diff changeset
635
2ec1fb9de638 wireproto: add request IDs to frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37056
diff changeset
636 # Register results for commands out of order.
37289
5fadc63ac99f wireproto: explicit API to create outgoing streams
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37288
diff changeset
637 outstream = reactor.makeoutputstream()
40135
966b5f7fd30b wireprotov2: remove functions for creating response frames from bytes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40129
diff changeset
638 reactor.oncommandresponsereadyobjects(outstream, 3, [b'response3'])
966b5f7fd30b wireprotov2: remove functions for creating response frames from bytes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40129
diff changeset
639 reactor.oncommandresponsereadyobjects(outstream, 1, [b'response1'])
966b5f7fd30b wireprotov2: remove functions for creating response frames from bytes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40129
diff changeset
640 reactor.oncommandresponsereadyobjects(outstream, 5, [b'response5'])
37057
2ec1fb9de638 wireproto: add request IDs to frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37056
diff changeset
641
2ec1fb9de638 wireproto: add request IDs to frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37056
diff changeset
642 result = reactor.oninputeof()
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
643 self.assertaction(result, b'sendframes')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
644 self.assertframesequal(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
645 result[1][b'framegen'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
646 [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
647 b'3 2 stream-begin stream-settings eos cbor:b"identity"',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
648 b'3 2 encoded command-response continuation %s' % OK,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
649 b'3 2 encoded command-response continuation cbor:b"response3"',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
650 b'3 2 0 command-response eos ',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
651 b'1 2 encoded command-response continuation %s' % OK,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
652 b'1 2 encoded command-response continuation cbor:b"response1"',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
653 b'1 2 0 command-response eos ',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
654 b'5 2 encoded command-response continuation %s' % OK,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
655 b'5 2 encoded command-response continuation cbor:b"response5"',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
656 b'5 2 0 command-response eos ',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
657 ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
658 )
37056
861e9d37e56e wireproto: buffer output frames when in half duplex mode
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37055
diff changeset
659
37063
39304dd63589 wireproto: explicitly track which requests are active
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37061
diff changeset
660 def testduplicaterequestonactivecommand(self):
39304dd63589 wireproto: explicitly track which requests are active
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37061
diff changeset
661 """Receiving a request ID that matches a request that isn't finished."""
39304dd63589 wireproto: explicitly track which requests are active
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37061
diff changeset
662 reactor = makereactor()
37288
9bfcbe4f4745 wireproto: add streams to frame-based protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37285
diff changeset
663 stream = framing.stream(1)
37285
3ed344546d9e wireproto: start to associate frame generation with a stream
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37284
diff changeset
664 list(sendcommandframes(reactor, stream, 1, b'command1', {}))
3ed344546d9e wireproto: start to associate frame generation with a stream
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37284
diff changeset
665 results = list(sendcommandframes(reactor, stream, 1, b'command1', {}))
37063
39304dd63589 wireproto: explicitly track which requests are active
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37061
diff changeset
666
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
667 self.assertaction(results[0], b'error')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
668 self.assertEqual(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
669 results[0][1],
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
670 {
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
671 b'message': b'request with ID 1 is already active',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
672 },
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
673 )
37063
39304dd63589 wireproto: explicitly track which requests are active
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37061
diff changeset
674
39304dd63589 wireproto: explicitly track which requests are active
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37061
diff changeset
675 def testduplicaterequestonactivecommandnosend(self):
39304dd63589 wireproto: explicitly track which requests are active
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37061
diff changeset
676 """Same as above but we've registered a response but haven't sent it."""
39304dd63589 wireproto: explicitly track which requests are active
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37061
diff changeset
677 reactor = makereactor()
37288
9bfcbe4f4745 wireproto: add streams to frame-based protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37285
diff changeset
678 instream = framing.stream(1)
37285
3ed344546d9e wireproto: start to associate frame generation with a stream
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37284
diff changeset
679 list(sendcommandframes(reactor, instream, 1, b'command1', {}))
37289
5fadc63ac99f wireproto: explicit API to create outgoing streams
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37288
diff changeset
680 outstream = reactor.makeoutputstream()
40135
966b5f7fd30b wireprotov2: remove functions for creating response frames from bytes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40129
diff changeset
681 reactor.oncommandresponsereadyobjects(outstream, 1, [b'response'])
37063
39304dd63589 wireproto: explicitly track which requests are active
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37061
diff changeset
682
39304dd63589 wireproto: explicitly track which requests are active
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37061
diff changeset
683 # We've registered the response but haven't sent it. From the
39304dd63589 wireproto: explicitly track which requests are active
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37061
diff changeset
684 # perspective of the reactor, the command is still active.
39304dd63589 wireproto: explicitly track which requests are active
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37061
diff changeset
685
37285
3ed344546d9e wireproto: start to associate frame generation with a stream
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37284
diff changeset
686 results = list(sendcommandframes(reactor, instream, 1, b'command1', {}))
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
687 self.assertaction(results[0], b'error')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
688 self.assertEqual(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
689 results[0][1],
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
690 {
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
691 b'message': b'request with ID 1 is already active',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
692 },
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
693 )
37063
39304dd63589 wireproto: explicitly track which requests are active
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37061
diff changeset
694
39304dd63589 wireproto: explicitly track which requests are active
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37061
diff changeset
695 def testduplicaterequestaftersend(self):
39304dd63589 wireproto: explicitly track which requests are active
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37061
diff changeset
696 """We can use a duplicate request ID after we've sent the response."""
39304dd63589 wireproto: explicitly track which requests are active
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37061
diff changeset
697 reactor = makereactor()
37288
9bfcbe4f4745 wireproto: add streams to frame-based protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37285
diff changeset
698 instream = framing.stream(1)
37285
3ed344546d9e wireproto: start to associate frame generation with a stream
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37284
diff changeset
699 list(sendcommandframes(reactor, instream, 1, b'command1', {}))
37289
5fadc63ac99f wireproto: explicit API to create outgoing streams
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37288
diff changeset
700 outstream = reactor.makeoutputstream()
40135
966b5f7fd30b wireprotov2: remove functions for creating response frames from bytes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40129
diff changeset
701 res = reactor.oncommandresponsereadyobjects(outstream, 1, [b'response'])
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
702 list(res[1][b'framegen'])
37063
39304dd63589 wireproto: explicitly track which requests are active
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37061
diff changeset
703
37285
3ed344546d9e wireproto: start to associate frame generation with a stream
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37284
diff changeset
704 results = list(sendcommandframes(reactor, instream, 1, b'command1', {}))
37682
cb71e0f9ac6f tests: add all missing b prefixes in reactor tests
Augie Fackler <augie@google.com>
parents: 37542
diff changeset
705 self.assertaction(results[0], b'runcommand')
37063
39304dd63589 wireproto: explicitly track which requests are active
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37061
diff changeset
706
40126
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
707 def testprotocolsettingsnoflags(self):
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
708 result = self._sendsingleframe(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
709 makereactor(), ffs(b'0 1 stream-begin sender-protocol-settings 0 ')
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
710 )
40126
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
711 self.assertaction(result, b'error')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
712 self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
713 result[1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
714 {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
715 b'message': b'sender protocol settings frame must have '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
716 b'continuation or end of stream flag set',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
717 },
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
718 )
40126
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
719
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
720 def testprotocolsettingsconflictflags(self):
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
721 result = self._sendsingleframe(
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
722 makereactor(),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
723 ffs(b'0 1 stream-begin sender-protocol-settings continuation|eos '),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
724 )
40126
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
725 self.assertaction(result, b'error')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
726 self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
727 result[1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
728 {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
729 b'message': b'sender protocol settings frame cannot have both '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
730 b'continuation and end of stream flags set',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
731 },
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
732 )
40126
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
733
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
734 def testprotocolsettingsemptypayload(self):
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
735 result = self._sendsingleframe(
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
736 makereactor(),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
737 ffs(b'0 1 stream-begin sender-protocol-settings eos '),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
738 )
40126
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
739 self.assertaction(result, b'error')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
740 self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
741 result[1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
742 {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
743 b'message': b'sender protocol settings frame did not contain CBOR '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
744 b'data',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
745 },
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
746 )
40126
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
747
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
748 def testprotocolsettingsmultipleobjects(self):
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
749 result = self._sendsingleframe(
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
750 makereactor(),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
751 ffs(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
752 b'0 1 stream-begin sender-protocol-settings eos '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
753 b'\x46foobar\x43foo'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
754 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
755 )
40126
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
756 self.assertaction(result, b'error')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
757 self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
758 result[1],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
759 {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
760 b'message': b'sender protocol settings frame contained multiple '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
761 b'CBOR values',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
762 },
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
763 )
40126
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
764
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
765 def testprotocolsettingscontentencodings(self):
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
766 reactor = makereactor()
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
767
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
768 result = self._sendsingleframe(
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
769 reactor,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
770 ffs(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
771 b'0 1 stream-begin sender-protocol-settings eos '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
772 b'cbor:{b"contentencodings": [b"a", b"b"]}'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
773 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
774 )
40126
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
775 self.assertaction(result, b'wantframe')
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
776
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
777 self.assertEqual(reactor._state, b'idle')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
778 self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
779 reactor._sendersettings[b'contentencodings'], [b'a', b'b']
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
780 )
40126
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
781
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
782 def testprotocolsettingsmultipleframes(self):
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
783 reactor = makereactor()
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
784
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
785 data = b''.join(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
786 cborutil.streamencode(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
787 {
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
788 b'contentencodings': [b'value1', b'value2'],
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
789 }
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
790 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
791 )
40126
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
792
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
793 results = list(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
794 sendframes(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
795 reactor,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
796 [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
797 ffs(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
798 b'0 1 stream-begin sender-protocol-settings continuation %s'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
799 % data[0:5]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
800 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
801 ffs(b'0 1 0 sender-protocol-settings eos %s' % data[5:]),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
802 ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
803 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
804 )
40126
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
805
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
806 self.assertEqual(len(results), 2)
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
807
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
808 self.assertaction(results[0], b'wantframe')
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
809 self.assertaction(results[1], b'wantframe')
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
810
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
811 self.assertEqual(reactor._state, b'idle')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
812 self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
813 reactor._sendersettings[b'contentencodings'], [b'value1', b'value2']
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
814 )
40126
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
815
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
816 def testprotocolsettingsbadcbor(self):
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
817 result = self._sendsingleframe(
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
818 makereactor(),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
819 ffs(b'0 1 stream-begin sender-protocol-settings eos badvalue'),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
820 )
40126
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
821 self.assertaction(result, b'error')
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
822
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
823 def testprotocolsettingsnoninitial(self):
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
824 # Cannot have protocol settings frames as non-initial frames.
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
825 reactor = makereactor()
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
826
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
827 stream = framing.stream(1)
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
828 results = list(sendcommandframes(reactor, stream, 1, b'mycommand', {}))
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
829 self.assertEqual(len(results), 1)
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
830 self.assertaction(results[0], b'runcommand')
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
831
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
832 result = self._sendsingleframe(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
833 reactor, ffs(b'0 1 0 sender-protocol-settings eos ')
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
834 )
40126
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
835 self.assertaction(result, b'error')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
836 self.assertEqual(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
837 result[1],
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
838 {
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
839 b'message': b'expected command request frame; got 8',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43076
diff changeset
840 },
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
841 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
842
40126
327d40b94bed wireprotov2: handle sender protocol settings frames
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40025
diff changeset
843
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
844 if __name__ == '__main__':
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
845 import silenttestrunner
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41136
diff changeset
846
37052
8c3c47362934 wireproto: implement basic frame reading and processing
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
847 silenttestrunner.main(__name__)