def test_decompress_broken(): frames = [Frame(1, b'hello', fin=0), Frame(0, b' world!', fin=1)] def decompress(frames): raise ValueError('broken') with pytest.raises(CriticalProtocolError): Message.decompress_frames(frames, decompress)
def test_build_control_messages(opcode, message_class, attrname): frames = [ Frame(opcode) ] msg = Message.build(frames) assert isinstance(msg, message_class) # check if the message passes is_{type} attribute test assert getattr(msg, attrname) is True # also, check if the message doesn't pass any other is_{type} attribute # test props = filter( lambda prop: prop != attrname and prop.startswith('is_'), dir(msg) ) for prop in props: assert getattr(msg, prop) is False # let's check the repr as well if opcode not in (Opcode.TEXT, Opcode.CLOSE): assert repr(msg) == "<message %s %s>" % ( Opcode.to_str(opcode), repr(b'') )
def test_compression(): data = [b'Hello ', b'World!', b'foo', b'bar', b'baz'] deflate = Deflate(15, 8, True, True) for raw in data: compressed_data = deflate.compress(raw) frames = [Frame(1, compressed_data, fin=1)] assert deflate.decompress(frames) == raw
def test_prohibit_masked_frames(): parser = ClientFrameParser() frame = Frame(1, b'hello') with pytest.raises(ProtocolError): parser.on_frame(frame)
def test_repr_for_text(): msg = Message.build([Frame(Opcode.TEXT)]) assert repr(msg) == "<message TEXT %s>" % repr(u'')
def test_build_regular_message(): msg = Message.build([Frame(Opcode.CONTINUATION)]) assert isinstance(msg, Message)
def test_masking_key(): frame_bytes = Frame.build(Opcode.TEXT, b'Hello, World', masking_key=b'\xaa\xf7\x7f\x00') expected = b'\x81\x8c\xaa\xf7\x7f\x00\xe2\x92\x13l\xc5\xdb_W\xc5\x85\x13d' assert frame_bytes == expected
def test_validate_frame(init_params, expected_error): with pytest.raises(ProtocolError) as e: Frame(**init_params) assert str(e.value) == expected_error
def test_calling_build_close_payload_requires_status(): assert Frame.build_close_payload(None) == b''
def inner(opcode=Opcode.TEXT, payload=b'', fin=1): return Frame(opcode, payload, fin=fin)