191 """Command data frame when not running a command is an error.""" |
194 """Command data frame when not running a command is an error.""" |
192 result = self._sendsingleframe(makereactor(), |
195 result = self._sendsingleframe(makereactor(), |
193 ffs(b'1 1 stream-begin command-data 0 ignored')) |
196 ffs(b'1 1 stream-begin command-data 0 ignored')) |
194 self.assertaction(result, b'error') |
197 self.assertaction(result, b'error') |
195 self.assertEqual(result[1], { |
198 self.assertEqual(result[1], { |
196 b'message': b'expected command request frame; got 2', |
199 b'message': b'expected sender protocol settings or command request ' |
|
200 b'frame; got 2', |
197 }) |
201 }) |
198 |
202 |
199 def testunexpectedcommanddatareceiving(self): |
203 def testunexpectedcommanddatareceiving(self): |
200 """Same as above except the command is receiving.""" |
204 """Same as above except the command is receiving.""" |
201 results = list(sendframes(makereactor(), [ |
205 results = list(sendframes(makereactor(), [ |
492 list(res[1][b'framegen']) |
496 list(res[1][b'framegen']) |
493 |
497 |
494 results = list(sendcommandframes(reactor, instream, 1, b'command1', {})) |
498 results = list(sendcommandframes(reactor, instream, 1, b'command1', {})) |
495 self.assertaction(results[0], b'runcommand') |
499 self.assertaction(results[0], b'runcommand') |
496 |
500 |
|
501 def testprotocolsettingsnoflags(self): |
|
502 result = self._sendsingleframe( |
|
503 makereactor(), |
|
504 ffs(b'0 1 stream-begin sender-protocol-settings 0 ')) |
|
505 self.assertaction(result, b'error') |
|
506 self.assertEqual(result[1], { |
|
507 b'message': b'sender protocol settings frame must have ' |
|
508 b'continuation or end of stream flag set', |
|
509 }) |
|
510 |
|
511 def testprotocolsettingsconflictflags(self): |
|
512 result = self._sendsingleframe( |
|
513 makereactor(), |
|
514 ffs(b'0 1 stream-begin sender-protocol-settings continuation|eos ')) |
|
515 self.assertaction(result, b'error') |
|
516 self.assertEqual(result[1], { |
|
517 b'message': b'sender protocol settings frame cannot have both ' |
|
518 b'continuation and end of stream flags set', |
|
519 }) |
|
520 |
|
521 def testprotocolsettingsemptypayload(self): |
|
522 result = self._sendsingleframe( |
|
523 makereactor(), |
|
524 ffs(b'0 1 stream-begin sender-protocol-settings eos ')) |
|
525 self.assertaction(result, b'error') |
|
526 self.assertEqual(result[1], { |
|
527 b'message': b'sender protocol settings frame did not contain CBOR ' |
|
528 b'data', |
|
529 }) |
|
530 |
|
531 def testprotocolsettingsmultipleobjects(self): |
|
532 result = self._sendsingleframe( |
|
533 makereactor(), |
|
534 ffs(b'0 1 stream-begin sender-protocol-settings eos ' |
|
535 b'\x46foobar\x43foo')) |
|
536 self.assertaction(result, b'error') |
|
537 self.assertEqual(result[1], { |
|
538 b'message': b'sender protocol settings frame contained multiple ' |
|
539 b'CBOR values', |
|
540 }) |
|
541 |
|
542 def testprotocolsettingscontentencodings(self): |
|
543 reactor = makereactor() |
|
544 |
|
545 result = self._sendsingleframe( |
|
546 reactor, |
|
547 ffs(b'0 1 stream-begin sender-protocol-settings eos ' |
|
548 b'cbor:{b"contentencodings": [b"a", b"b"]}')) |
|
549 self.assertaction(result, b'wantframe') |
|
550 |
|
551 self.assertEqual(reactor._state, b'idle') |
|
552 self.assertEqual(reactor._sendersettings[b'contentencodings'], |
|
553 [b'a', b'b']) |
|
554 |
|
555 def testprotocolsettingsmultipleframes(self): |
|
556 reactor = makereactor() |
|
557 |
|
558 data = b''.join(cborutil.streamencode({ |
|
559 b'contentencodings': [b'value1', b'value2'], |
|
560 })) |
|
561 |
|
562 results = list(sendframes(reactor, [ |
|
563 ffs(b'0 1 stream-begin sender-protocol-settings continuation %s' % |
|
564 data[0:5]), |
|
565 ffs(b'0 1 0 sender-protocol-settings eos %s' % data[5:]), |
|
566 ])) |
|
567 |
|
568 self.assertEqual(len(results), 2) |
|
569 |
|
570 self.assertaction(results[0], b'wantframe') |
|
571 self.assertaction(results[1], b'wantframe') |
|
572 |
|
573 self.assertEqual(reactor._state, b'idle') |
|
574 self.assertEqual(reactor._sendersettings[b'contentencodings'], |
|
575 [b'value1', b'value2']) |
|
576 |
|
577 def testprotocolsettingsbadcbor(self): |
|
578 result = self._sendsingleframe( |
|
579 makereactor(), |
|
580 ffs(b'0 1 stream-begin sender-protocol-settings eos badvalue')) |
|
581 self.assertaction(result, b'error') |
|
582 |
|
583 def testprotocolsettingsnoninitial(self): |
|
584 # Cannot have protocol settings frames as non-initial frames. |
|
585 reactor = makereactor() |
|
586 |
|
587 stream = framing.stream(1) |
|
588 results = list(sendcommandframes(reactor, stream, 1, b'mycommand', {})) |
|
589 self.assertEqual(len(results), 1) |
|
590 self.assertaction(results[0], b'runcommand') |
|
591 |
|
592 result = self._sendsingleframe( |
|
593 reactor, |
|
594 ffs(b'0 1 0 sender-protocol-settings eos ')) |
|
595 self.assertaction(result, b'error') |
|
596 self.assertEqual(result[1], { |
|
597 b'message': b'expected command request frame; got 8', |
|
598 }) |
|
599 |
497 if __name__ == '__main__': |
600 if __name__ == '__main__': |
498 import silenttestrunner |
601 import silenttestrunner |
499 silenttestrunner.main(__name__) |
602 silenttestrunner.main(__name__) |