コード例 #1
0
    def test_no_decode_fragmented_binary_frame(self):
        frame1 = Frame(False, OP_TEXT, b"tea ")
        frame2 = Frame(True, OP_CONT, b"time")

        dec_frame1 = self.extension.decode(frame1)
        dec_frame2 = self.extension.decode(frame2)

        self.assertEqual(dec_frame1, frame1)
        self.assertEqual(dec_frame2, frame2)
コード例 #2
0
    def test_encode_decode_binary_frame(self):
        frame = Frame(True, OP_BINARY, b"tea")

        enc_frame = self.extension.encode(frame)

        self.assertEqual(enc_frame, frame._replace(rsv1=True, data=b"*IM\x04\x00"))

        dec_frame = self.extension.decode(enc_frame)

        self.assertEqual(dec_frame, frame)
コード例 #3
0
    def test_encode_decode_text_frame(self):
        frame = Frame(True, OP_TEXT, "café".encode("utf-8"))

        enc_frame = self.extension.encode(frame)

        self.assertEqual(enc_frame, frame._replace(rsv1=True, data=b"JNL;\xbc\x12\x00"))

        dec_frame = self.extension.decode(enc_frame)

        self.assertEqual(dec_frame, frame)
コード例 #4
0
    def test_encode_decode_fragmented_text_frame(self):
        frame1 = Frame(False, OP_TEXT, "café".encode("utf-8"))
        frame2 = Frame(False, OP_CONT, " & ".encode("utf-8"))
        frame3 = Frame(True, OP_CONT, "croissants".encode("utf-8"))

        enc_frame1 = self.extension.encode(frame1)
        enc_frame2 = self.extension.encode(frame2)
        enc_frame3 = self.extension.encode(frame3)

        self.assertEqual(
            enc_frame1,
            frame1._replace(rsv1=True,
                            data=b"JNL;\xbc\x12\x00\x00\x00\xff\xff"),
        )
        self.assertEqual(
            enc_frame2,
            frame2._replace(rsv1=True, data=b"RPS\x00\x00\x00\x00\xff\xff"))
        self.assertEqual(
            enc_frame3,
            frame3._replace(rsv1=True, data=b"J.\xca\xcf,.N\xcc+)\x06\x00"))

        dec_frame1 = self.extension.decode(enc_frame1)
        dec_frame2 = self.extension.decode(enc_frame2)
        dec_frame3 = self.extension.decode(enc_frame3)

        self.assertEqual(dec_frame1, frame1)
        self.assertEqual(dec_frame2, frame2)
        self.assertEqual(dec_frame3, frame3)
コード例 #5
0
    def test_encode_decode_fragmented_text_frame(self):
        frame1 = Frame(False, OP_TEXT, 'café'.encode('utf-8'))
        frame2 = Frame(False, OP_CONT, ' & '.encode('utf-8'))
        frame3 = Frame(True, OP_CONT, 'croissants'.encode('utf-8'))

        enc_frame1 = self.extension.encode(frame1)
        enc_frame2 = self.extension.encode(frame2)
        enc_frame3 = self.extension.encode(frame3)

        self.assertEqual(
            enc_frame1,
            frame1._replace(rsv1=True,
                            data=b'JNL;\xbc\x12\x00\x00\x00\xff\xff'),
        )
        self.assertEqual(
            enc_frame2,
            frame2._replace(rsv1=True, data=b'RPS\x00\x00\x00\x00\xff\xff'))
        self.assertEqual(
            enc_frame3,
            frame3._replace(rsv1=True, data=b'J.\xca\xcf,.N\xcc+)\x06\x00'))

        dec_frame1 = self.extension.decode(enc_frame1)
        dec_frame2 = self.extension.decode(enc_frame2)
        dec_frame3 = self.extension.decode(enc_frame3)

        self.assertEqual(dec_frame1, frame1)
        self.assertEqual(dec_frame2, frame2)
        self.assertEqual(dec_frame3, frame3)
コード例 #6
0
    def test_no_decode_fragmented_text_frame(self):
        frame1 = Frame(False, OP_TEXT, "café".encode("utf-8"))
        frame2 = Frame(False, OP_CONT, " & ".encode("utf-8"))
        frame3 = Frame(True, OP_CONT, "croissants".encode("utf-8"))

        dec_frame1 = self.extension.decode(frame1)
        dec_frame2 = self.extension.decode(frame2)
        dec_frame3 = self.extension.decode(frame3)

        self.assertEqual(dec_frame1, frame1)
        self.assertEqual(dec_frame2, frame2)
        self.assertEqual(dec_frame3, frame3)
コード例 #7
0
    def test_compress_settings(self):
        # Configure an extension so that no compression actually occurs.
        extension = PerMessageDeflate(False, False, 15, 15, {"level": 0})

        frame = Frame(True, OP_TEXT, "café".encode("utf-8"))

        enc_frame = extension.encode(frame)

        self.assertEqual(
            enc_frame,
            frame._replace(
                rsv1=True, data=b"\x00\x05\x00\xfa\xffcaf\xc3\xa9\x00"  # not compressed
            ),
        )
コード例 #8
0
    def test_context_takeover(self):
        frame = Frame(True, OP_TEXT, 'café'.encode('utf-8'))

        enc_frame1 = self.extension.encode(frame)
        enc_frame2 = self.extension.encode(frame)

        self.assertEqual(enc_frame1.data, b'JNL;\xbc\x12\x00')
        self.assertEqual(enc_frame2.data, b'J\x06\x11\x00\x00')
コード例 #9
0
    def test_context_takeover(self):
        frame = Frame(True, OP_TEXT, "café".encode("utf-8"))

        enc_frame1 = self.extension.encode(frame)
        enc_frame2 = self.extension.encode(frame)

        self.assertEqual(enc_frame1.data, b"JNL;\xbc\x12\x00")
        self.assertEqual(enc_frame2.data, b"J\x06\x11\x00\x00")
コード例 #10
0
    def test_decompress_max_size(self):
        frame = Frame(True, OP_TEXT, ("a" * 20).encode("utf-8"))

        enc_frame = self.extension.encode(frame)

        self.assertEqual(enc_frame.data, b"JL\xc4\x04\x00\x00")

        with self.assertRaises(PayloadTooBig):
            self.extension.decode(enc_frame, max_size=10)
コード例 #11
0
    def test_local_no_context_takeover(self):
        # No context takeover when encoding and decoding messages.
        self.extension = PerMessageDeflate(True, True, 15, 15)

        frame = Frame(True, OP_TEXT, "café".encode("utf-8"))

        enc_frame1 = self.extension.encode(frame)
        enc_frame2 = self.extension.encode(frame)

        self.assertEqual(enc_frame1.data, b"JNL;\xbc\x12\x00")
        self.assertEqual(enc_frame2.data, b"JNL;\xbc\x12\x00")

        dec_frame1 = self.extension.decode(enc_frame1)
        dec_frame2 = self.extension.decode(enc_frame2)

        self.assertEqual(dec_frame1, frame)
        self.assertEqual(dec_frame2, frame)
コード例 #12
0
    def test_remote_no_context_takeover(self):
        # No context takeover when decoding messages.
        self.extension = PerMessageDeflate(True, False, 15, 15)

        frame = Frame(True, OP_TEXT, "café".encode("utf-8"))

        enc_frame1 = self.extension.encode(frame)
        enc_frame2 = self.extension.encode(frame)

        self.assertEqual(enc_frame1.data, b"JNL;\xbc\x12\x00")
        self.assertEqual(enc_frame2.data, b"J\x06\x11\x00\x00")

        dec_frame1 = self.extension.decode(enc_frame1)
        self.assertEqual(dec_frame1, frame)

        with self.assertRaises(zlib.error) as exc:
            self.extension.decode(enc_frame2)
        self.assertIn("invalid distance too far back", str(exc.exception))
コード例 #13
0
    def test_encode_decode_fragmented_binary_frame(self):
        frame1 = Frame(False, OP_TEXT, b"tea ")
        frame2 = Frame(True, OP_CONT, b"time")

        enc_frame1 = self.extension.encode(frame1)
        enc_frame2 = self.extension.encode(frame2)

        self.assertEqual(
            enc_frame1,
            frame1._replace(rsv1=True, data=b"*IMT\x00\x00\x00\x00\xff\xff"))
        self.assertEqual(
            enc_frame2, frame2._replace(rsv1=True, data=b"*\xc9\xccM\x05\x00"))

        dec_frame1 = self.extension.decode(enc_frame1)
        dec_frame2 = self.extension.decode(enc_frame2)

        self.assertEqual(dec_frame1, frame1)
        self.assertEqual(dec_frame2, frame2)
コード例 #14
0
    def test_no_encode_decode_pong_frame(self):
        frame = Frame(True, OP_PONG, b"")

        self.assertEqual(self.extension.encode(frame), frame)

        self.assertEqual(self.extension.decode(frame), frame)
コード例 #15
0
    def test_no_encode_decode_close_frame(self):
        frame = Frame(True, OP_CLOSE, serialize_close(1000, ""))

        self.assertEqual(self.extension.encode(frame), frame)

        self.assertEqual(self.extension.decode(frame), frame)
コード例 #16
0
    def test_no_decode_text_frame(self):
        frame = Frame(True, OP_TEXT, "café".encode("utf-8"))

        # Try decoding a frame that wasn't encoded.
        self.assertEqual(self.extension.decode(frame), frame)
コード例 #17
0
    def test_no_decode_binary_frame(self):
        frame = Frame(True, OP_TEXT, b"tea")

        # Try decoding a frame that wasn't encoded.
        self.assertEqual(self.extension.decode(frame), frame)