コード例 #1
0
def test_parse_puback_invalid():
    """
    A invalid puback raises an error.
    """
    data = bytearray()
    data.extend(binascii.unhexlify(b'400130'))
    msgs = []
    with pytest.raises(MQTTInvalidPacketError):
        _parsing.parse(data, msgs)
コード例 #2
0
def test_parse_five_byte(capture_len):
    """
    A five byte encoded remaining length is considered an error.
    """
    data = bytearray()
    data.extend(binascii.unhexlify(b'30ffffffff7f'))
    msgs = []
    with pytest.raises(MQTTParseError):
        _parsing.parse(data, msgs)
コード例 #3
0
def test_parse_four_byte(capture_len):
    """
    A four byte encoded remaining length is properly parsed.
    """
    data = bytearray()
    data.extend(binascii.unhexlify(b'30ffffff7f1a'))
    msgs = []
    _parsing.parse(data, msgs)
    assert capture_len[0] == 268435455
コード例 #4
0
def test_parse_only_fixed_header(capture_len):
    """
    A single byte remaining length is properly parsed even it 
    """
    data = bytearray()
    data.extend(binascii.unhexlify(b'3000'))
    msgs = []
    _parsing.parse(data, msgs)
    assert capture_len[0] == 0
コード例 #5
0
def test_parse_single_byte_remaining_length(capture_len):
    """
    A single byte remaining length is properly parsed.
    """
    data = bytearray()
    data.extend(
        binascii.unhexlify(b'31150004746573747b2274657374223a2274657374227d'))
    msgs = []
    _parsing.parse(data, msgs)
    assert capture_len[0] == 0x15
コード例 #6
0
def test_parse_two_byte(capture_len):
    """
    A two byte encoded remaining length is properly parsed.
    """
    data = bytearray()
    data.extend(binascii.unhexlify(b'30ff7f1a'))
    msgs = []
    _parsing.parse(data, msgs)
    assert capture_len[0] == 16383

    data = bytearray()
    data.extend(binascii.unhexlify(b'3080011a'))
    msgs = []
    _parsing.parse(data, msgs)
    assert capture_len[1] == 128
コード例 #7
0
def test_parse_pingresp():
    """
    A ping response returns an appropriate packet.
    """
    msgs = []
    r = _parsing.parse(bytearray(b'\xd0\x00'), msgs)
    assert msgs[0].pkt_type == _constants.MQTT_PACKET_PINGRESP
コード例 #8
0
def test_parse_disconnect():
    """
    A disconnect packet is successfully parsed.
    """
    msgs = []
    r = _parsing.parse(bytearray(disconnect()), msgs)
    assert msgs[0].pkt_type == _constants.MQTT_PACKET_DISCONNECT
コード例 #9
0
def test_parse_puback():
    """
    A valid puback is successfully parsed.
    """
    data = bytearray()
    data.extend(binascii.unhexlify(b'40023039'))
    msgs = []
    r = _parsing.parse(data, msgs)
    assert msgs[0].pkt_type == _constants.MQTT_PACKET_PUBACK
    assert msgs[0].packet_id == 12345
コード例 #10
0
def test_parse_connack():
    """
    A CONNACK for a successful connect is successfuly parsed.
    """
    data = bytearray()
    data.extend(binascii.unhexlify(b'20020000'))
    msgs = []
    c = _parsing.parse(data, msgs)
    assert len(data) == c
    assert msgs[0].return_code == 0
    assert msgs[0].session_present == 0
    assert msgs[0].pkt_type == _constants.MQTT_PACKET_CONNACK
コード例 #11
0
def test_parse_publish_in_pieces():
    """
    A publish received in chunks is not successfully parsed until all
    data received.
    """
    data = bytearray()
    data.extend(
        binascii.unhexlify(b'31150004746573747b2274657374223a2274657374227d'))
    msgs = []

    assert _parsing.parse(data[:len(data) - 1], msgs) == 0
    assert not msgs
コード例 #12
0
def test_parse_suback():
    """
    A suback for a single successful subscribe is successfully parsed
    to a single MQTTPacket and all bytes are consumed.
    """
    data = bytearray()
    data.extend(binascii.unhexlify(b'9003000100'))
    msgs = []
    c = _parsing.parse(data, msgs)
    assert len(data) == c
    assert len(msgs) == 1
    assert msgs[0].packet_id == 1
    assert msgs[0].return_codes == [0]
    assert msgs[0].pkt_type == _constants.MQTT_PACKET_SUBACK
コード例 #13
0
def test_parse_publish_simple():
    """
    A simple publish with QoS of 0 is successfully parsed.
    """
    data = bytearray()
    data.extend(
        binascii.unhexlify(b'31150004746573747b2274657374223a2274657374227d'))
    msgs = []
    c = _parsing.parse(data, msgs)
    assert len(data) == c
    assert len(msgs) == 1
    payload = msgs[0].payload.decode('utf-8')
    res = json.loads(payload)
    assert res == {"test": "test"}
    assert msgs[0].packetid is None
    assert msgs[0].topic == u'test'
    assert msgs[0].pkt_type == _constants.MQTT_PACKET_PUBLISH
    assert msgs[0].qos == 0
    assert not msgs[0].dup
    assert msgs[0].retain