Exemple #1
0
def test_disconnect_calls_loopstop_on_mqttclient(MockMqttClient):
    mock_mqtt_client = MockMqttClient.return_value

    mqtt_provider = MQTTProvider(fake_device_id, fake_hostname, fake_username)
    mqtt_provider.disconnect()

    mock_mqtt_client.disconnect.assert_called_once_with()
Exemple #2
0
def test_connect_triggers_client_connect(MockMqttClient, MockSsl):
    mqtt_provider = MQTTProvider(fake_device_id, fake_hostname, fake_username)
    mqtt_provider.connect(fake_password)

    MockMqttClient.assert_called_once_with(fake_device_id, False, protocol=4)
    mock_mqtt_client = MockMqttClient.return_value

    MockSsl.assert_called_once_with(ssl.PROTOCOL_TLSv1_2)

    assert mock_mqtt_client.tls_set_context.call_count == 1
    context = mock_mqtt_client.tls_set_context.call_args[0][0]
    assert context.check_hostname is True
    assert context.verify_mode == ssl.CERT_REQUIRED
    context.load_default_certs.assert_called_once_with()
    mock_mqtt_client.tls_insecure_set.assert_called_once_with(False)
    mock_mqtt_client.username_pw_set.assert_called_once_with(
        username=fake_username, password=fake_password)
    mock_mqtt_client.connect.assert_called_once_with(host=fake_hostname,
                                                     port=8883)
    mock_mqtt_client.loop_start.assert_called_once_with()

    assert mock_mqtt_client.on_connect is not None
    assert mock_mqtt_client.on_disconnect is not None
    assert mock_mqtt_client.on_publish is not None
    assert mock_mqtt_client.on_subscribe is not None
Exemple #3
0
def test_connect_triggers_state_machine_connect_which_calls_on_enter_connecting(
        mocker):
    mock_mqtt_client = MagicMock(spec=mqtt.Client)
    mock_constructor_mqtt_client = mocker.patch(
        "azure.iot.hub.devicesdk.transport.mqtt.mqtt_provider.mqtt.Client")
    mock_constructor_mqtt_client.return_value = mock_mqtt_client

    mqtt_provider = MQTTProvider(fake_device_id, fake_hostname, fake_username,
                                 fake_password)
    mocker.patch.object(MQTTProvider, "_emit_connection_status")
    mqtt_provider.connect()

    MQTTProvider._emit_connection_status.assert_called_once_with()

    mock_constructor_mqtt_client.assert_called_once_with(fake_device_id,
                                                         False,
                                                         protocol=4)
    mock_mqtt_client.tls_set.assert_called_once_with(
        ca_certs=os.environ.get("IOTHUB_ROOT_CA_CERT"),
        certfile=None,
        keyfile=None,
        cert_reqs=ssl.CERT_REQUIRED,
        tls_version=ssl.PROTOCOL_TLSv1_2,
        ciphers=None,
    )
    mock_mqtt_client.connect.assert_called_once_with(host=fake_hostname,
                                                     port=8883)
    mock_mqtt_client.loop_start.assert_called_once_with()

    assert mock_mqtt_client.on_connect is not None
    assert mock_mqtt_client.on_disconnect is not None
    assert mock_mqtt_client.on_publish is not None
Exemple #4
0
def test_unsubscribe_calls_unsubscribe_on_mqtt_client(MockMqttClient):
    mock_mqtt_client = MockMqttClient.return_value
    mock_mqtt_client.unsubscribe = MagicMock(return_value=(fake_rc, fake_mid))

    mqtt_provider = MQTTProvider(fake_device_id, fake_hostname, fake_username)
    unsub_mid = mqtt_provider.unsubscribe(fake_topic)

    assert unsub_mid == fake_mid
    mock_mqtt_client.unsubscribe.assert_called_once_with(fake_topic)
Exemple #5
0
def test_reconnect_calls_username_pw_set_and_reconnect_on_mqtt_client(
        MockMqttClient):
    mock_mqtt_client = MockMqttClient.return_value

    mqtt_provider = MQTTProvider(fake_device_id, fake_hostname, fake_username)
    mqtt_provider.reconnect(new_fake_password)

    mock_mqtt_client.username_pw_set.assert_called_once_with(
        username=fake_username, password=new_fake_password)
    mock_mqtt_client.reconnect.assert_called_once_with()
Exemple #6
0
def test_publish_calls_publish_on_mqtt_client(MockMqttClient):
    mock_mqtt_client = MockMqttClient.return_value
    mock_mqtt_client.publish = MagicMock(
        return_value=mqtt.MQTTMessageInfo(fake_mid))

    topic = "topic/"
    event = "Tarantallegra"

    mqtt_provider = MQTTProvider(fake_device_id, fake_hostname, fake_username)
    pub_mid = mqtt_provider.publish(topic, event)

    assert pub_mid == fake_mid
    mock_mqtt_client.publish.assert_called_once_with(topic=topic,
                                                     payload=event,
                                                     qos=1)
Exemple #7
0
def test_mqtt_client_connect_callback_triggers_state_machine_on_connect_which_calls_handler(
        mocker):
    mock_mqtt_client = MagicMock(spec=mqtt.Client)
    mock_constructor_mqtt_client = mocker.patch(
        "azure.iot.hub.devicesdk.transport.mqtt.mqtt_provider.mqtt.Client")
    mock_constructor_mqtt_client.return_value = mock_mqtt_client

    mqtt_provider = MQTTProvider(fake_device_id, fake_hostname, fake_username,
                                 fake_password)
    stub_on_mqtt_connected = mocker.stub(name="on_mqtt_connected")
    mqtt_provider.on_mqtt_connected = stub_on_mqtt_connected

    mqtt_provider.connect()
    mock_mqtt_client.on_connect(None, None, None, 0)

    connected_state = "connected"
    stub_on_mqtt_connected.assert_called_once_with(connected_state)
Exemple #8
0
def test_mqtt_client_callback_triggers_provider_callback(
    MockMqttClient,
    client_callback_name,
    client_callback_args,
    provider_callback_name,
    provider_callback_args,
):
    mock_mqtt_client = MockMqttClient.return_value

    mqtt_provider = MQTTProvider(fake_device_id, fake_hostname, fake_username)
    stub_provider_callback = MagicMock()
    setattr(mqtt_provider, provider_callback_name, stub_provider_callback)

    getattr(mock_mqtt_client, client_callback_name)(*client_callback_args)

    stub_provider_callback.assert_called_once_with(*provider_callback_args)
Exemple #9
0
def test_disconnect_calls_loopstop_on_mqttclient(mocker):
    mock_mqtt_client = MagicMock(spec=mqtt.Client)
    mock_constructor_mqtt_client = mocker.patch(
        "azure.iot.hub.devicesdk.transport.mqtt.mqtt_provider.mqtt.Client")
    mock_constructor_mqtt_client.return_value = mock_mqtt_client
    mocker.patch.object(mock_mqtt_client, "loop_stop")

    mqtt_provider = MQTTProvider(fake_device_id, fake_hostname, fake_username,
                                 fake_password)
    mqtt_provider._on_enter_connecting()
    mqtt_provider.disconnect()

    mock_mqtt_client.loop_stop.assert_called_once_with()
Exemple #10
0
def test_publish_calls_publish_on_mqtt_client(mocker):
    topic = "topic/"
    event = "Tarantallegra"

    mock_mqtt_client = MagicMock(spec=mqtt.Client)
    mock_constructor_mqtt_client = mocker.patch(
        "azure.iot.hub.devicesdk.transport.mqtt.mqtt_provider.mqtt.Client")
    mock_constructor_mqtt_client.return_value = mock_mqtt_client
    mocker.patch.object(mock_mqtt_client, "publish")

    mqtt_provider = MQTTProvider(fake_device_id, fake_hostname, fake_username,
                                 fake_password)
    mqtt_provider._on_enter_connecting()
    mqtt_provider.publish(topic, event)

    mock_mqtt_client.publish.assert_called_once_with(topic=topic,
                                                     payload=event,
                                                     qos=1)