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()
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
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
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)
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()
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)
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)
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)
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()
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)