예제 #1
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
예제 #2
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
예제 #3
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)