tests/test-wireproto-serverreactor.py
changeset 43076 2372284d9457
parent 41136 a181a1c8af1d
child 45942 89a2afe31e82
--- a/tests/test-wireproto-serverreactor.py	Sat Oct 05 10:29:34 2019 -0400
+++ b/tests/test-wireproto-serverreactor.py	Sun Oct 06 09:45:02 2019 -0400
@@ -7,18 +7,18 @@
     util,
     wireprotoframing as framing,
 )
-from mercurial.utils import (
-    cborutil,
-)
+from mercurial.utils import cborutil
 
 ffs = framing.makeframefromhumanstring
 
 OK = b''.join(cborutil.streamencode({b'status': b'ok'}))
 
+
 def makereactor(deferoutput=False):
     ui = uimod.ui()
     return framing.serverreactor(ui, deferoutput=deferoutput)
 
+
 def sendframes(reactor, gen):
     """Send a generator of frame bytearray to a reactor.
 
@@ -26,21 +26,26 @@
     """
     for frame in gen:
         header = framing.parseheader(frame)
-        payload = frame[framing.FRAME_HEADER_SIZE:]
+        payload = frame[framing.FRAME_HEADER_SIZE :]
         assert len(payload) == header.length
 
-        yield reactor.onframerecv(framing.frame(header.requestid,
-                                                header.streamid,
-                                                header.streamflags,
-                                                header.typeid,
-                                                header.flags,
-                                                payload))
+        yield reactor.onframerecv(
+            framing.frame(
+                header.requestid,
+                header.streamid,
+                header.streamflags,
+                header.typeid,
+                header.flags,
+                payload,
+            )
+        )
+
 
 def sendcommandframes(reactor, stream, rid, cmd, args, datafh=None):
     """Generate frames to run a command and send them to a reactor."""
-    return sendframes(reactor,
-                      framing.createcommandframes(stream, rid, cmd, args,
-                                                  datafh))
+    return sendframes(
+        reactor, framing.createcommandframes(stream, rid, cmd, args, datafh)
+    )
 
 
 class ServerReactorTests(unittest.TestCase):
@@ -67,13 +72,16 @@
         results = list(sendcommandframes(reactor, stream, 1, b'mycommand', {}))
         self.assertEqual(len(results), 1)
         self.assertaction(results[0], b'runcommand')
-        self.assertEqual(results[0][1], {
-            b'requestid': 1,
-            b'command': b'mycommand',
-            b'args': {},
-            b'redirect': None,
-            b'data': None,
-        })
+        self.assertEqual(
+            results[0][1],
+            {
+                b'requestid': 1,
+                b'command': b'mycommand',
+                b'args': {},
+                b'redirect': None,
+                b'data': None,
+            },
+        )
 
         result = reactor.oninputeof()
         self.assertaction(result, b'noop')
@@ -81,53 +89,77 @@
     def test1argument(self):
         reactor = makereactor()
         stream = framing.stream(1)
-        results = list(sendcommandframes(reactor, stream, 41, b'mycommand',
-                                         {b'foo': b'bar'}))
+        results = list(
+            sendcommandframes(
+                reactor, stream, 41, b'mycommand', {b'foo': b'bar'}
+            )
+        )
         self.assertEqual(len(results), 1)
         self.assertaction(results[0], b'runcommand')
-        self.assertEqual(results[0][1], {
-            b'requestid': 41,
-            b'command': b'mycommand',
-            b'args': {b'foo': b'bar'},
-            b'redirect': None,
-            b'data': None,
-        })
+        self.assertEqual(
+            results[0][1],
+            {
+                b'requestid': 41,
+                b'command': b'mycommand',
+                b'args': {b'foo': b'bar'},
+                b'redirect': None,
+                b'data': None,
+            },
+        )
 
     def testmultiarguments(self):
         reactor = makereactor()
         stream = framing.stream(1)
-        results = list(sendcommandframes(reactor, stream, 1, b'mycommand',
-                                         {b'foo': b'bar', b'biz': b'baz'}))
+        results = list(
+            sendcommandframes(
+                reactor,
+                stream,
+                1,
+                b'mycommand',
+                {b'foo': b'bar', b'biz': b'baz'},
+            )
+        )
         self.assertEqual(len(results), 1)
         self.assertaction(results[0], b'runcommand')
-        self.assertEqual(results[0][1], {
-            b'requestid': 1,
-            b'command': b'mycommand',
-            b'args': {b'foo': b'bar', b'biz': b'baz'},
-            b'redirect': None,
-            b'data': None,
-        })
+        self.assertEqual(
+            results[0][1],
+            {
+                b'requestid': 1,
+                b'command': b'mycommand',
+                b'args': {b'foo': b'bar', b'biz': b'baz'},
+                b'redirect': None,
+                b'data': None,
+            },
+        )
 
     def testsimplecommanddata(self):
         reactor = makereactor()
         stream = framing.stream(1)
-        results = list(sendcommandframes(reactor, stream, 1, b'mycommand', {},
-                                         util.bytesio(b'data!')))
+        results = list(
+            sendcommandframes(
+                reactor, stream, 1, b'mycommand', {}, util.bytesio(b'data!')
+            )
+        )
         self.assertEqual(len(results), 2)
         self.assertaction(results[0], b'wantframe')
         self.assertaction(results[1], b'runcommand')
-        self.assertEqual(results[1][1], {
-            b'requestid': 1,
-            b'command': b'mycommand',
-            b'args': {},
-            b'redirect': None,
-            b'data': b'data!',
-        })
+        self.assertEqual(
+            results[1][1],
+            {
+                b'requestid': 1,
+                b'command': b'mycommand',
+                b'args': {},
+                b'redirect': None,
+                b'data': b'data!',
+            },
+        )
 
     def testmultipledataframes(self):
         frames = [
-            ffs(b'1 1 stream-begin command-request new|have-data '
-                b"cbor:{b'name': b'mycommand'}"),
+            ffs(
+                b'1 1 stream-begin command-request new|have-data '
+                b"cbor:{b'name': b'mycommand'}"
+            ),
             ffs(b'1 1 0 command-data continuation data1'),
             ffs(b'1 1 0 command-data continuation data2'),
             ffs(b'1 1 0 command-data eos data3'),
@@ -139,19 +171,24 @@
         for i in range(3):
             self.assertaction(results[i], b'wantframe')
         self.assertaction(results[3], b'runcommand')
-        self.assertEqual(results[3][1], {
-            b'requestid': 1,
-            b'command': b'mycommand',
-            b'args': {},
-            b'redirect': None,
-            b'data': b'data1data2data3',
-        })
+        self.assertEqual(
+            results[3][1],
+            {
+                b'requestid': 1,
+                b'command': b'mycommand',
+                b'args': {},
+                b'redirect': None,
+                b'data': b'data1data2data3',
+            },
+        )
 
     def testargumentanddata(self):
         frames = [
-            ffs(b'1 1 stream-begin command-request new|have-data '
+            ffs(
+                b'1 1 stream-begin command-request new|have-data '
                 b"cbor:{b'name': b'command', b'args': {b'key': b'val',"
-                b"b'foo': b'bar'}}"),
+                b"b'foo': b'bar'}}"
+            ),
             ffs(b'1 1 0 command-data continuation value1'),
             ffs(b'1 1 0 command-data eos value2'),
         ]
@@ -160,169 +197,251 @@
         results = list(sendframes(reactor, frames))
 
         self.assertaction(results[-1], b'runcommand')
-        self.assertEqual(results[-1][1], {
-            b'requestid': 1,
-            b'command': b'command',
-            b'args': {
-                b'key': b'val',
-                b'foo': b'bar',
+        self.assertEqual(
+            results[-1][1],
+            {
+                b'requestid': 1,
+                b'command': b'command',
+                b'args': {b'key': b'val', b'foo': b'bar',},
+                b'redirect': None,
+                b'data': b'value1value2',
             },
-            b'redirect': None,
-            b'data': b'value1value2',
-        })
+        )
 
     def testnewandcontinuation(self):
-        result = self._sendsingleframe(makereactor(),
-            ffs(b'1 1 stream-begin command-request new|continuation '))
+        result = self._sendsingleframe(
+            makereactor(),
+            ffs(b'1 1 stream-begin command-request new|continuation '),
+        )
         self.assertaction(result, b'error')
-        self.assertEqual(result[1], {
-            b'message': b'received command request frame with both new and '
-                        b'continuation flags set',
-        })
+        self.assertEqual(
+            result[1],
+            {
+                b'message': b'received command request frame with both new and '
+                b'continuation flags set',
+            },
+        )
 
     def testneithernewnorcontinuation(self):
-        result = self._sendsingleframe(makereactor(),
-            ffs(b'1 1 stream-begin command-request 0 '))
+        result = self._sendsingleframe(
+            makereactor(), ffs(b'1 1 stream-begin command-request 0 ')
+        )
         self.assertaction(result, b'error')
-        self.assertEqual(result[1], {
-            b'message': b'received command request frame with neither new nor '
-                        b'continuation flags set',
-        })
+        self.assertEqual(
+            result[1],
+            {
+                b'message': b'received command request frame with neither new nor '
+                b'continuation flags set',
+            },
+        )
 
     def testunexpectedcommanddata(self):
         """Command data frame when not running a command is an error."""
-        result = self._sendsingleframe(makereactor(),
-            ffs(b'1 1 stream-begin command-data 0 ignored'))
+        result = self._sendsingleframe(
+            makereactor(), ffs(b'1 1 stream-begin command-data 0 ignored')
+        )
         self.assertaction(result, b'error')
-        self.assertEqual(result[1], {
-            b'message': b'expected sender protocol settings or command request '
-                        b'frame; got 2',
-        })
+        self.assertEqual(
+            result[1],
+            {
+                b'message': b'expected sender protocol settings or command request '
+                b'frame; got 2',
+            },
+        )
 
     def testunexpectedcommanddatareceiving(self):
         """Same as above except the command is receiving."""
-        results = list(sendframes(makereactor(), [
-            ffs(b'1 1 stream-begin command-request new|more '
-                b"cbor:{b'name': b'ignored'}"),
-            ffs(b'1 1 0 command-data eos ignored'),
-        ]))
+        results = list(
+            sendframes(
+                makereactor(),
+                [
+                    ffs(
+                        b'1 1 stream-begin command-request new|more '
+                        b"cbor:{b'name': b'ignored'}"
+                    ),
+                    ffs(b'1 1 0 command-data eos ignored'),
+                ],
+            )
+        )
 
         self.assertaction(results[0], b'wantframe')
         self.assertaction(results[1], b'error')
-        self.assertEqual(results[1][1], {
-            b'message': b'received command data frame for request that is not '
-                        b'expecting data: 1',
-        })
+        self.assertEqual(
+            results[1][1],
+            {
+                b'message': b'received command data frame for request that is not '
+                b'expecting data: 1',
+            },
+        )
 
     def testconflictingrequestidallowed(self):
         """Multiple fully serviced commands with same request ID is allowed."""
         reactor = makereactor()
         results = []
         outstream = reactor.makeoutputstream()
-        results.append(self._sendsingleframe(
-            reactor, ffs(b'1 1 stream-begin command-request new '
-                         b"cbor:{b'name': b'command'}")))
+        results.append(
+            self._sendsingleframe(
+                reactor,
+                ffs(
+                    b'1 1 stream-begin command-request new '
+                    b"cbor:{b'name': b'command'}"
+                ),
+            )
+        )
         result = reactor.oncommandresponsereadyobjects(
-            outstream, 1, [b'response1'])
+            outstream, 1, [b'response1']
+        )
         self.assertaction(result, b'sendframes')
         list(result[1][b'framegen'])
-        results.append(self._sendsingleframe(
-            reactor, ffs(b'1 1 stream-begin command-request new '
-                         b"cbor:{b'name': b'command'}")))
+        results.append(
+            self._sendsingleframe(
+                reactor,
+                ffs(
+                    b'1 1 stream-begin command-request new '
+                    b"cbor:{b'name': b'command'}"
+                ),
+            )
+        )
         result = reactor.oncommandresponsereadyobjects(
-            outstream, 1, [b'response2'])
+            outstream, 1, [b'response2']
+        )
         self.assertaction(result, b'sendframes')
         list(result[1][b'framegen'])
-        results.append(self._sendsingleframe(
-            reactor, ffs(b'1 1 stream-begin command-request new '
-                         b"cbor:{b'name': b'command'}")))
+        results.append(
+            self._sendsingleframe(
+                reactor,
+                ffs(
+                    b'1 1 stream-begin command-request new '
+                    b"cbor:{b'name': b'command'}"
+                ),
+            )
+        )
         result = reactor.oncommandresponsereadyobjects(
-            outstream, 1, [b'response3'])
+            outstream, 1, [b'response3']
+        )
         self.assertaction(result, b'sendframes')
         list(result[1][b'framegen'])
 
         for i in range(3):
             self.assertaction(results[i], b'runcommand')
-            self.assertEqual(results[i][1], {
-                b'requestid': 1,
-                b'command': b'command',
-                b'args': {},
-                b'redirect': None,
-                b'data': None,
-            })
+            self.assertEqual(
+                results[i][1],
+                {
+                    b'requestid': 1,
+                    b'command': b'command',
+                    b'args': {},
+                    b'redirect': None,
+                    b'data': None,
+                },
+            )
 
     def testconflictingrequestid(self):
         """Request ID for new command matching in-flight command is illegal."""
-        results = list(sendframes(makereactor(), [
-            ffs(b'1 1 stream-begin command-request new|more '
-                b"cbor:{b'name': b'command'}"),
-            ffs(b'1 1 0 command-request new '
-                b"cbor:{b'name': b'command1'}"),
-        ]))
+        results = list(
+            sendframes(
+                makereactor(),
+                [
+                    ffs(
+                        b'1 1 stream-begin command-request new|more '
+                        b"cbor:{b'name': b'command'}"
+                    ),
+                    ffs(
+                        b'1 1 0 command-request new '
+                        b"cbor:{b'name': b'command1'}"
+                    ),
+                ],
+            )
+        )
 
         self.assertaction(results[0], b'wantframe')
         self.assertaction(results[1], b'error')
-        self.assertEqual(results[1][1], {
-            b'message': b'request with ID 1 already received',
-        })
+        self.assertEqual(
+            results[1][1], {b'message': b'request with ID 1 already received',}
+        )
 
     def testinterleavedcommands(self):
-        cbor1 = b''.join(cborutil.streamencode({
-            b'name': b'command1',
-            b'args': {
-                b'foo': b'bar',
-                b'key1': b'val',
-            }
-        }))
-        cbor3 = b''.join(cborutil.streamencode({
-            b'name': b'command3',
-            b'args': {
-                b'biz': b'baz',
-                b'key': b'val',
-            },
-        }))
-
-        results = list(sendframes(makereactor(), [
-            ffs(b'1 1 stream-begin command-request new|more %s' % cbor1[0:6]),
-            ffs(b'3 1 0 command-request new|more %s' % cbor3[0:10]),
-            ffs(b'1 1 0 command-request continuation|more %s' % cbor1[6:9]),
-            ffs(b'3 1 0 command-request continuation|more %s' % cbor3[10:13]),
-            ffs(b'3 1 0 command-request continuation %s' % cbor3[13:]),
-            ffs(b'1 1 0 command-request continuation %s' % cbor1[9:]),
-        ]))
+        cbor1 = b''.join(
+            cborutil.streamencode(
+                {
+                    b'name': b'command1',
+                    b'args': {b'foo': b'bar', b'key1': b'val',},
+                }
+            )
+        )
+        cbor3 = b''.join(
+            cborutil.streamencode(
+                {
+                    b'name': b'command3',
+                    b'args': {b'biz': b'baz', b'key': b'val',},
+                }
+            )
+        )
 
-        self.assertEqual([t[0] for t in results], [
-            b'wantframe',
-            b'wantframe',
-            b'wantframe',
-            b'wantframe',
-            b'runcommand',
-            b'runcommand',
-        ])
+        results = list(
+            sendframes(
+                makereactor(),
+                [
+                    ffs(
+                        b'1 1 stream-begin command-request new|more %s'
+                        % cbor1[0:6]
+                    ),
+                    ffs(b'3 1 0 command-request new|more %s' % cbor3[0:10]),
+                    ffs(
+                        b'1 1 0 command-request continuation|more %s'
+                        % cbor1[6:9]
+                    ),
+                    ffs(
+                        b'3 1 0 command-request continuation|more %s'
+                        % cbor3[10:13]
+                    ),
+                    ffs(b'3 1 0 command-request continuation %s' % cbor3[13:]),
+                    ffs(b'1 1 0 command-request continuation %s' % cbor1[9:]),
+                ],
+            )
+        )
 
-        self.assertEqual(results[4][1], {
-            b'requestid': 3,
-            b'command': b'command3',
-            b'args': {b'biz': b'baz', b'key': b'val'},
-            b'redirect': None,
-            b'data': None,
-        })
-        self.assertEqual(results[5][1], {
-            b'requestid': 1,
-            b'command': b'command1',
-            b'args': {b'foo': b'bar', b'key1': b'val'},
-            b'redirect': None,
-            b'data': None,
-        })
+        self.assertEqual(
+            [t[0] for t in results],
+            [
+                b'wantframe',
+                b'wantframe',
+                b'wantframe',
+                b'wantframe',
+                b'runcommand',
+                b'runcommand',
+            ],
+        )
+
+        self.assertEqual(
+            results[4][1],
+            {
+                b'requestid': 3,
+                b'command': b'command3',
+                b'args': {b'biz': b'baz', b'key': b'val'},
+                b'redirect': None,
+                b'data': None,
+            },
+        )
+        self.assertEqual(
+            results[5][1],
+            {
+                b'requestid': 1,
+                b'command': b'command1',
+                b'args': {b'foo': b'bar', b'key1': b'val'},
+                b'redirect': None,
+                b'data': None,
+            },
+        )
 
     def testmissingcommanddataframe(self):
         # The reactor doesn't currently handle partially received commands.
         # So this test is failing to do anything with request 1.
         frames = [
-            ffs(b'1 1 stream-begin command-request new|have-data '
-                b"cbor:{b'name': b'command1'}"),
-            ffs(b'3 1 0 command-request new '
-                b"cbor:{b'name': b'command2'}"),
+            ffs(
+                b'1 1 stream-begin command-request new|have-data '
+                b"cbor:{b'name': b'command1'}"
+            ),
+            ffs(b'3 1 0 command-request new ' b"cbor:{b'name': b'command2'}"),
         ]
         results = list(sendframes(makereactor(), frames))
         self.assertEqual(len(results), 2)
@@ -331,31 +450,45 @@
 
     def testmissingcommanddataframeflags(self):
         frames = [
-            ffs(b'1 1 stream-begin command-request new|have-data '
-                b"cbor:{b'name': b'command1'}"),
+            ffs(
+                b'1 1 stream-begin command-request new|have-data '
+                b"cbor:{b'name': b'command1'}"
+            ),
             ffs(b'1 1 0 command-data 0 data'),
         ]
         results = list(sendframes(makereactor(), frames))
         self.assertEqual(len(results), 2)
         self.assertaction(results[0], b'wantframe')
         self.assertaction(results[1], b'error')
-        self.assertEqual(results[1][1], {
-            b'message': b'command data frame without flags',
-        })
+        self.assertEqual(
+            results[1][1], {b'message': b'command data frame without flags',}
+        )
 
     def testframefornonreceivingrequest(self):
         """Receiving a frame for a command that is not receiving is illegal."""
-        results = list(sendframes(makereactor(), [
-            ffs(b'1 1 stream-begin command-request new '
-                b"cbor:{b'name': b'command1'}"),
-            ffs(b'3 1 0 command-request new|have-data '
-                b"cbor:{b'name': b'command3'}"),
-            ffs(b'5 1 0 command-data eos ignored'),
-        ]))
+        results = list(
+            sendframes(
+                makereactor(),
+                [
+                    ffs(
+                        b'1 1 stream-begin command-request new '
+                        b"cbor:{b'name': b'command1'}"
+                    ),
+                    ffs(
+                        b'3 1 0 command-request new|have-data '
+                        b"cbor:{b'name': b'command3'}"
+                    ),
+                    ffs(b'5 1 0 command-data eos ignored'),
+                ],
+            )
+        )
         self.assertaction(results[2], b'error')
-        self.assertEqual(results[2][1], {
-            b'message': b'received frame for request that is not receiving: 5',
-        })
+        self.assertEqual(
+            results[2][1],
+            {
+                b'message': b'received frame for request that is not receiving: 5',
+            },
+        )
 
     def testsimpleresponse(self):
         """Bytes response to command sends result frames."""
@@ -365,14 +498,18 @@
 
         outstream = reactor.makeoutputstream()
         result = reactor.oncommandresponsereadyobjects(
-            outstream, 1, [b'response'])
+            outstream, 1, [b'response']
+        )
         self.assertaction(result, b'sendframes')
-        self.assertframesequal(result[1][b'framegen'], [
-            b'1 2 stream-begin stream-settings eos cbor:b"identity"',
-            b'1 2 encoded command-response continuation %s' % OK,
-            b'1 2 encoded command-response continuation cbor:b"response"',
-            b'1 2 0 command-response eos ',
-        ])
+        self.assertframesequal(
+            result[1][b'framegen'],
+            [
+                b'1 2 stream-begin stream-settings eos cbor:b"identity"',
+                b'1 2 encoded command-response continuation %s' % OK,
+                b'1 2 encoded command-response continuation cbor:b"response"',
+                b'1 2 0 command-response eos ',
+            ],
+        )
 
     def testmultiframeresponse(self):
         """Bytes response spanning multiple frames is handled."""
@@ -385,16 +522,20 @@
 
         outstream = reactor.makeoutputstream()
         result = reactor.oncommandresponsereadyobjects(
-            outstream, 1, [first + second])
+            outstream, 1, [first + second]
+        )
         self.assertaction(result, b'sendframes')
-        self.assertframesequal(result[1][b'framegen'], [
-            b'1 2 stream-begin stream-settings eos cbor:b"identity"',
-            b'1 2 encoded command-response continuation %s' % OK,
-            b'1 2 encoded command-response continuation Y\x80d',
-            b'1 2 encoded command-response continuation %s' % first,
-            b'1 2 encoded command-response continuation %s' % second,
-            b'1 2 0 command-response eos '
-        ])
+        self.assertframesequal(
+            result[1][b'framegen'],
+            [
+                b'1 2 stream-begin stream-settings eos cbor:b"identity"',
+                b'1 2 encoded command-response continuation %s' % OK,
+                b'1 2 encoded command-response continuation Y\x80d',
+                b'1 2 encoded command-response continuation %s' % first,
+                b'1 2 encoded command-response continuation %s' % second,
+                b'1 2 0 command-response eos ',
+            ],
+        )
 
     def testservererror(self):
         reactor = makereactor()
@@ -404,33 +545,41 @@
         outstream = reactor.makeoutputstream()
         result = reactor.onservererror(outstream, 1, b'some message')
         self.assertaction(result, b'sendframes')
-        self.assertframesequal(result[1][b'framegen'], [
-            b"1 2 stream-begin error-response 0 "
-            b"cbor:{b'type': b'server', "
-            b"b'message': [{b'msg': b'some message'}]}",
-        ])
+        self.assertframesequal(
+            result[1][b'framegen'],
+            [
+                b"1 2 stream-begin error-response 0 "
+                b"cbor:{b'type': b'server', "
+                b"b'message': [{b'msg': b'some message'}]}",
+            ],
+        )
 
     def test1commanddeferresponse(self):
         """Responses when in deferred output mode are delayed until EOF."""
         reactor = makereactor(deferoutput=True)
         instream = framing.stream(1)
-        results = list(sendcommandframes(reactor, instream, 1, b'mycommand',
-                                         {}))
+        results = list(
+            sendcommandframes(reactor, instream, 1, b'mycommand', {})
+        )
         self.assertEqual(len(results), 1)
         self.assertaction(results[0], b'runcommand')
 
         outstream = reactor.makeoutputstream()
         result = reactor.oncommandresponsereadyobjects(
-            outstream, 1, [b'response'])
+            outstream, 1, [b'response']
+        )
         self.assertaction(result, b'noop')
         result = reactor.oninputeof()
         self.assertaction(result, b'sendframes')
-        self.assertframesequal(result[1][b'framegen'], [
-            b'1 2 stream-begin stream-settings eos cbor:b"identity"',
-            b'1 2 encoded command-response continuation %s' % OK,
-            b'1 2 encoded command-response continuation cbor:b"response"',
-            b'1 2 0 command-response eos ',
-        ])
+        self.assertframesequal(
+            result[1][b'framegen'],
+            [
+                b'1 2 stream-begin stream-settings eos cbor:b"identity"',
+                b'1 2 encoded command-response continuation %s' % OK,
+                b'1 2 encoded command-response continuation cbor:b"response"',
+                b'1 2 0 command-response eos ',
+            ],
+        )
 
     def testmultiplecommanddeferresponse(self):
         reactor = makereactor(deferoutput=True)
@@ -440,22 +589,27 @@
 
         outstream = reactor.makeoutputstream()
         result = reactor.oncommandresponsereadyobjects(
-            outstream, 1, [b'response1'])
+            outstream, 1, [b'response1']
+        )
         self.assertaction(result, b'noop')
         result = reactor.oncommandresponsereadyobjects(
-            outstream, 3, [b'response2'])
+            outstream, 3, [b'response2']
+        )
         self.assertaction(result, b'noop')
         result = reactor.oninputeof()
         self.assertaction(result, b'sendframes')
-        self.assertframesequal(result[1][b'framegen'], [
-            b'1 2 stream-begin stream-settings eos cbor:b"identity"',
-            b'1 2 encoded command-response continuation %s' % OK,
-            b'1 2 encoded command-response continuation cbor:b"response1"',
-            b'1 2 0 command-response eos ',
-            b'3 2 encoded command-response continuation %s' % OK,
-            b'3 2 encoded command-response continuation cbor:b"response2"',
-            b'3 2 0 command-response eos ',
-        ])
+        self.assertframesequal(
+            result[1][b'framegen'],
+            [
+                b'1 2 stream-begin stream-settings eos cbor:b"identity"',
+                b'1 2 encoded command-response continuation %s' % OK,
+                b'1 2 encoded command-response continuation cbor:b"response1"',
+                b'1 2 0 command-response eos ',
+                b'3 2 encoded command-response continuation %s' % OK,
+                b'3 2 encoded command-response continuation cbor:b"response2"',
+                b'3 2 0 command-response eos ',
+            ],
+        )
 
     def testrequestidtracking(self):
         reactor = makereactor(deferoutput=True)
@@ -472,18 +626,21 @@
 
         result = reactor.oninputeof()
         self.assertaction(result, b'sendframes')
-        self.assertframesequal(result[1][b'framegen'], [
-            b'3 2 stream-begin stream-settings eos cbor:b"identity"',
-            b'3 2 encoded command-response continuation %s' % OK,
-            b'3 2 encoded command-response continuation cbor:b"response3"',
-            b'3 2 0 command-response eos ',
-            b'1 2 encoded command-response continuation %s' % OK,
-            b'1 2 encoded command-response continuation cbor:b"response1"',
-            b'1 2 0 command-response eos ',
-            b'5 2 encoded command-response continuation %s' % OK,
-            b'5 2 encoded command-response continuation cbor:b"response5"',
-            b'5 2 0 command-response eos ',
-        ])
+        self.assertframesequal(
+            result[1][b'framegen'],
+            [
+                b'3 2 stream-begin stream-settings eos cbor:b"identity"',
+                b'3 2 encoded command-response continuation %s' % OK,
+                b'3 2 encoded command-response continuation cbor:b"response3"',
+                b'3 2 0 command-response eos ',
+                b'1 2 encoded command-response continuation %s' % OK,
+                b'1 2 encoded command-response continuation cbor:b"response1"',
+                b'1 2 0 command-response eos ',
+                b'5 2 encoded command-response continuation %s' % OK,
+                b'5 2 encoded command-response continuation cbor:b"response5"',
+                b'5 2 0 command-response eos ',
+            ],
+        )
 
     def testduplicaterequestonactivecommand(self):
         """Receiving a request ID that matches a request that isn't finished."""
@@ -493,9 +650,9 @@
         results = list(sendcommandframes(reactor, stream, 1, b'command1', {}))
 
         self.assertaction(results[0], b'error')
-        self.assertEqual(results[0][1], {
-            b'message': b'request with ID 1 is already active',
-        })
+        self.assertEqual(
+            results[0][1], {b'message': b'request with ID 1 is already active',}
+        )
 
     def testduplicaterequestonactivecommandnosend(self):
         """Same as above but we've registered a response but haven't sent it."""
@@ -510,9 +667,9 @@
 
         results = list(sendcommandframes(reactor, instream, 1, b'command1', {}))
         self.assertaction(results[0], b'error')
-        self.assertEqual(results[0][1], {
-            b'message': b'request with ID 1 is already active',
-        })
+        self.assertEqual(
+            results[0][1], {b'message': b'request with ID 1 is already active',}
+        )
 
     def testduplicaterequestaftersend(self):
         """We can use a duplicate request ID after we've sent the response."""
@@ -528,70 +685,100 @@
 
     def testprotocolsettingsnoflags(self):
         result = self._sendsingleframe(
-            makereactor(),
-            ffs(b'0 1 stream-begin sender-protocol-settings 0 '))
+            makereactor(), ffs(b'0 1 stream-begin sender-protocol-settings 0 ')
+        )
         self.assertaction(result, b'error')
-        self.assertEqual(result[1], {
-            b'message': b'sender protocol settings frame must have '
-                        b'continuation or end of stream flag set',
-        })
+        self.assertEqual(
+            result[1],
+            {
+                b'message': b'sender protocol settings frame must have '
+                b'continuation or end of stream flag set',
+            },
+        )
 
     def testprotocolsettingsconflictflags(self):
         result = self._sendsingleframe(
             makereactor(),
-            ffs(b'0 1 stream-begin sender-protocol-settings continuation|eos '))
+            ffs(b'0 1 stream-begin sender-protocol-settings continuation|eos '),
+        )
         self.assertaction(result, b'error')
-        self.assertEqual(result[1], {
-            b'message': b'sender protocol settings frame cannot have both '
-                        b'continuation and end of stream flags set',
-        })
+        self.assertEqual(
+            result[1],
+            {
+                b'message': b'sender protocol settings frame cannot have both '
+                b'continuation and end of stream flags set',
+            },
+        )
 
     def testprotocolsettingsemptypayload(self):
         result = self._sendsingleframe(
             makereactor(),
-            ffs(b'0 1 stream-begin sender-protocol-settings eos '))
+            ffs(b'0 1 stream-begin sender-protocol-settings eos '),
+        )
         self.assertaction(result, b'error')
-        self.assertEqual(result[1], {
-            b'message': b'sender protocol settings frame did not contain CBOR '
-                        b'data',
-        })
+        self.assertEqual(
+            result[1],
+            {
+                b'message': b'sender protocol settings frame did not contain CBOR '
+                b'data',
+            },
+        )
 
     def testprotocolsettingsmultipleobjects(self):
         result = self._sendsingleframe(
             makereactor(),
-            ffs(b'0 1 stream-begin sender-protocol-settings eos '
-                b'\x46foobar\x43foo'))
+            ffs(
+                b'0 1 stream-begin sender-protocol-settings eos '
+                b'\x46foobar\x43foo'
+            ),
+        )
         self.assertaction(result, b'error')
-        self.assertEqual(result[1], {
-            b'message': b'sender protocol settings frame contained multiple '
-                        b'CBOR values',
-        })
+        self.assertEqual(
+            result[1],
+            {
+                b'message': b'sender protocol settings frame contained multiple '
+                b'CBOR values',
+            },
+        )
 
     def testprotocolsettingscontentencodings(self):
         reactor = makereactor()
 
         result = self._sendsingleframe(
             reactor,
-            ffs(b'0 1 stream-begin sender-protocol-settings eos '
-                b'cbor:{b"contentencodings": [b"a", b"b"]}'))
+            ffs(
+                b'0 1 stream-begin sender-protocol-settings eos '
+                b'cbor:{b"contentencodings": [b"a", b"b"]}'
+            ),
+        )
         self.assertaction(result, b'wantframe')
 
         self.assertEqual(reactor._state, b'idle')
-        self.assertEqual(reactor._sendersettings[b'contentencodings'],
-                         [b'a', b'b'])
+        self.assertEqual(
+            reactor._sendersettings[b'contentencodings'], [b'a', b'b']
+        )
 
     def testprotocolsettingsmultipleframes(self):
         reactor = makereactor()
 
-        data = b''.join(cborutil.streamencode({
-            b'contentencodings': [b'value1', b'value2'],
-        }))
+        data = b''.join(
+            cborutil.streamencode(
+                {b'contentencodings': [b'value1', b'value2'],}
+            )
+        )
 
-        results = list(sendframes(reactor, [
-            ffs(b'0 1 stream-begin sender-protocol-settings continuation %s' %
-                data[0:5]),
-            ffs(b'0 1 0 sender-protocol-settings eos %s' % data[5:]),
-        ]))
+        results = list(
+            sendframes(
+                reactor,
+                [
+                    ffs(
+                        b'0 1 stream-begin sender-protocol-settings continuation %s'
+                        % data[0:5]
+                    ),
+                    ffs(b'0 1 0 sender-protocol-settings eos %s' % data[5:]),
+                ],
+            )
+        )
 
         self.assertEqual(len(results), 2)
 
@@ -599,13 +786,15 @@
         self.assertaction(results[1], b'wantframe')
 
         self.assertEqual(reactor._state, b'idle')
-        self.assertEqual(reactor._sendersettings[b'contentencodings'],
-                         [b'value1', b'value2'])
+        self.assertEqual(
+            reactor._sendersettings[b'contentencodings'], [b'value1', b'value2']
+        )
 
     def testprotocolsettingsbadcbor(self):
         result = self._sendsingleframe(
             makereactor(),
-            ffs(b'0 1 stream-begin sender-protocol-settings eos badvalue'))
+            ffs(b'0 1 stream-begin sender-protocol-settings eos badvalue'),
+        )
         self.assertaction(result, b'error')
 
     def testprotocolsettingsnoninitial(self):
@@ -618,13 +807,15 @@
         self.assertaction(results[0], b'runcommand')
 
         result = self._sendsingleframe(
-            reactor,
-            ffs(b'0 1 0 sender-protocol-settings eos '))
+            reactor, ffs(b'0 1 0 sender-protocol-settings eos ')
+        )
         self.assertaction(result, b'error')
-        self.assertEqual(result[1], {
-            b'message': b'expected command request frame; got 8',
-        })
+        self.assertEqual(
+            result[1], {b'message': b'expected command request frame; got 8',}
+        )
+
 
 if __name__ == '__main__':
     import silenttestrunner
+
     silenttestrunner.main(__name__)