Ejemplo n.º 1
0
def test_mqtt_handle_on_message_delete_device_data(app_and_ctx, capsys):
    device_id = 23
    tid_bi = 'b209eba637a54f1f617cf5a6f925e4eb9fc083e66029061018b369e64b9864d7'  # blind_index(hex_to_key("622c23fe2623e54ba103c13b88072ca3fdc5836fc459cb2b5c31d8df3f07ebc2"), "8")
    topic = b"d:%a/server/remove_data" % device_id
    payload = b"{'added': 6987, 'num_data': 31164, 'data': 'gAAAAABcTFAz9Wr5ZsnMcVYbQiXlnZCvT36MfDatZNyLwDpm_ixbzkZhM1NA4w7MN2p3CW3gyTA8gYtuKtDTomhulszvLTFfPA==', 'tid': 'encrypted_tid(8)', 'tid_bi': '%b', 'correctness_hash': '$2b$12$9hxKg4pjXbm0kpbItQTd2uMICAGn2ntRw1qQskHIL/7tLa3ISIlmO'}" % tid_bi.encode(
    )
    msg = MQTTMessage(topic=topic)
    msg.payload = payload
    from app.mqtt.mqtt import handle_on_message
    app, ctx = app_and_ctx
    with app.app_context():
        device_data = db.session.query(DeviceData).filter(
            and_(
                DeviceData.tid_bi == tid_bi,
                DeviceData.device_id == device_id,
            )).first()  # should be already present from previous test
        assert device_data is not None, "Previous test probably failed to insert data."

        handle_on_message(None, None, msg, app, db)

        device_data = db.session.query(DeviceData).filter(
            and_(
                DeviceData.tid_bi == tid_bi,
                DeviceData.device_id == device_id,
            )).first()
        assert device_data is None, "Data was not removed."
Ejemplo n.º 2
0
def test_mqtt_handle_on_message_invalid_message(app_and_ctx, capsys):
    msg = MQTTMessage(topic=b"anything")
    msg.payload = b"invalid"
    from app.mqtt.mqtt import handle_on_message
    app, ctx = app_and_ctx
    with app.app_context():
        handle_on_message(None, None, msg, app, db)
        captured = capsys.readouterr()
        assert f"Received invalid message '" in captured.out
Ejemplo n.º 3
0
def test_mqtt_handle_on_message_receive_pk_user_doesnt_have_this_device(
        app_and_ctx, capsys):
    pk = b'-----BEGIN PUBLIC KEY-----\\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE2rD6Bhju8WSEFogdBxZt/N+n7ziUPi5C\\nQU1gSQQDNm57fdDuYNDOR7Wwb1fq5tSl2TC1D6WRTIt1gzzCsApGpZ3PIs7Wdbil\\neJL/ETGa2Sqwav7JDH4r0V30sF4NqDok\\n-----END PUBLIC KEY-----\\n'
    user_id = 1
    device_id = 34
    msg = MQTTMessage(topic=b"d:%a/server/" % device_id)
    msg.payload = b"{'user_id': %a, " \
                  b"'device_public_key': '%b'}" % (user_id, pk)
    from app.mqtt.mqtt import handle_on_message
    app, ctx = app_and_ctx
    with app.app_context():
        handle_on_message(None, None, msg, app, db)
        captured = capsys.readouterr()
        assert f"This User can't access device {device_id}" in captured.out
Ejemplo n.º 4
0
def test_mqtt_handle_on_message_receive_pk(app_and_ctx):
    pk = b'-----BEGIN PUBLIC KEY-----\\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE2rD6Bhju8WSEFogdBxZt/N+n7ziUPi5C\\nQU1gSQQDNm57fdDuYNDOR7Wwb1fq5tSl2TC1D6WRTIt1gzzCsApGpZ3PIs7Wdbil\\neJL/ETGa2Sqwav7JDH4r0V30sF4NqDok\\n-----END PUBLIC KEY-----\\n'
    user_id = 1
    device_id = 23
    msg = MQTTMessage(topic=b"d:%a/server/" % device_id)
    msg.payload = b"{'user_id': %a, " \
                  b"'device_public_key': '%b'}" % (user_id, pk)
    from app.mqtt.mqtt import handle_on_message
    app, ctx = app_and_ctx
    with app.app_context():
        user_device = db.session.query(UserDevice)\
            .filter(and_(UserDevice.device_id == device_id,
                         UserDevice.user_id == user_id)).first()
        assert user_device.device_public_session_key is None
        assert user_device.added is None

        handle_on_message(None, None, msg, app, db)
        user_device = db.session.query(UserDevice)\
            .filter(and_(UserDevice.device_id == device_id,
                         UserDevice.user_id == user_id)).first()

        assert user_device.device_public_session_key == pk.decode().replace(
            "\\n", "\n")
        assert isinstance(user_device.added, datetime)
Ejemplo n.º 5
0
def test_mqtt_handle_on_message_save_device_data(app_and_ctx, capsys):
    device_id = 9999  # not present
    tid_bi = 'b209eba637a54f1f617cf5a6f925e4eb9fc083e66029061018b369e64b9864d7'  # blind_index(hex_to_key("622c23fe2623e54ba103c13b88072ca3fdc5836fc459cb2b5c31d8df3f07ebc2"), "8")
    payload = b"{'added': 6987, 'num_data': 31164, 'data': 'gAAAAABcTFAz9Wr5ZsnMcVYbQiXlnZCvT36MfDatZNyLwDpm_ixbzkZhM1NA4w7MN2p3CW3gyTA8gYtuKtDTomhulszvLTFfPA==', 'tid': 'encrypted_tid(8)', 'tid_bi': '%b', 'correctness_hash': '$2b$12$9hxKg4pjXbm0kpbItQTd2uMICAGn2ntRw1qQskHIL/7tLa3ISIlmO'}" % tid_bi.encode(
    )

    topic = b"d:%a/server/save_data" % device_id
    msg = MQTTMessage(topic=topic)
    msg.payload = payload

    invalid_topic = b"d:%a/server/invalid" % device_id
    msg_invalid = MQTTMessage(topic=invalid_topic)
    msg_invalid.payload = payload

    from app.mqtt.mqtt import handle_on_message
    app, ctx = app_and_ctx
    with app.app_context():
        handle_on_message(None, None, msg_invalid, app, db)
        captured = capsys.readouterr()
        assert f"Invalid topic: {msg_invalid.topic}" in captured.out

        handle_on_message(None, None, msg, app, db)
        captured = capsys.readouterr()
        assert f"Device with id: {device_id} doesn't exist." in captured.out
        device_data = db.session.query(DeviceData).filter(
            and_(
                DeviceData.tid_bi == tid_bi,
                DeviceData.device_id == device_id,
            )).first()
        assert device_data is None
        msg.payload = payload  # reassign, because `handle_on_message` causes side-effect and converts it to `dict`
        device_id = 23
        topic = b"d:%a/server/save_data" % device_id
        msg.topic = topic

        handle_on_message(None, None, msg, app, db)

        device_data = db.session.query(DeviceData).filter(
            and_(
                DeviceData.tid_bi == tid_bi,
                DeviceData.device_id == device_id,
            )).first()
        assert device_data is not None
        assert device_data.added == 6987
        assert device_data.num_data == 31164