def test_receive_register_response_after_query_time_passes_calls_callback_with_error(
            self, mocker):
        state_based_mqtt = MagicMock()
        mock_request_response_provider = TestRequestResponseProvider(
            state_based_mqtt)
        polling_machine = PollingMachine(state_based_mqtt)
        polling_machine._request_response_provider = mock_request_response_provider

        mocker.patch.object(mock_request_response_provider, "subscribe")
        mocker.patch.object(mock_request_response_provider, "publish")
        mocker.patch.object(mock_request_response_provider, "disconnect")

        # to transition into initializing
        mock_callback = MagicMock()
        polling_machine.register(callback=mock_callback)

        mock_init_uuid = mocker.patch(
            "azure.iot.device.provisioning.internal.polling_machine.uuid.uuid4"
        )
        mock_init_uuid.return_value = fake_request_id

        # to transition into registering
        polling_machine._on_subscribe_completed()

        # sleep so that it times out query
        time.sleep(constant.DEFAULT_TIMEOUT_INTERVAL + 1)

        polling_machine._on_disconnect_completed_error()

        assert mock_request_response_provider.publish.call_count == 1
        assert mock_callback.call_count == 1
        print(mock_callback.call_args)
        assert mock_callback.call_args[0][1].args[
            0] == "Time is up for query timer"
    def test_receive_query_response_failure_calls_callback_of_register_error(
            self, mocker):
        state_based_mqtt = MagicMock()
        mock_request_response_provider = TestRequestResponseProvider(
            state_based_mqtt)
        polling_machine = PollingMachine(state_based_mqtt)
        polling_machine._request_response_provider = mock_request_response_provider

        mocker.patch.object(mock_request_response_provider, "subscribe")
        mocker.patch.object(mock_request_response_provider, "publish")
        mocker.patch.object(mock_request_response_provider, "disconnect")

        # to transition into initializing
        mock_callback = MagicMock()
        polling_machine.register(callback=mock_callback)

        mock_init_uuid = mocker.patch(
            "azure.iot.device.provisioning.internal.polling_machine.uuid.uuid4"
        )
        mock_init_uuid.return_value = fake_request_id

        # to transition into registering
        polling_machine._on_subscribe_completed()

        # reset mock to generate different request id for first query
        mock_init_uuid.reset_mock()
        fake_request_id_query = "Request4567"
        mock_init_uuid.return_value = fake_request_id_query

        fake_register_topic = fake_success_response_topic + "$rid={}".format(
            fake_request_id)
        fake_register_payload_result = ('{"operationId":"' +
                                        fake_operation_id + '","status":"' +
                                        fake_assigning_status + '"}')

        mock_init_polling_timer = mocker.patch(
            "azure.iot.device.provisioning.internal.polling_machine.Timer")

        # Response for register to transition to waiting and polling
        mock_request_response_provider.receive_response(
            fake_register_topic, fake_register_payload_result.encode("utf-8"))

        # call polling timer's time up call to simulate polling
        time_up_call = mock_init_polling_timer.call_args[0][1]
        time_up_call()

        fake_query_topic_1 = fake_failure_response_topic + "$rid={}".format(
            fake_request_id_query)
        fake_query_payload_result = "HelloHogwarts"

        # Response for query
        mock_request_response_provider.receive_response(
            fake_query_topic_1, fake_query_payload_result.encode("utf-8"))

        polling_machine._on_disconnect_completed_error()

        assert mock_callback.call_count == 1
        assert isinstance(mock_callback.call_args[0][1], ValueError)
        assert mock_callback.call_args[0][1].args[
            0] == "Incoming message failure"
Пример #3
0
    def test_receive_register_response_failure_calls_callback_of_register_error(
            self, mocker):
        state_based_mqtt = MagicMock()
        mock_request_response_provider = SomeRequestResponseProvider(
            state_based_mqtt)
        polling_machine = PollingMachine(state_based_mqtt)
        polling_machine._request_response_provider = mock_request_response_provider

        mocker.patch.object(mock_request_response_provider, "enable_responses")
        mocker.patch.object(state_based_mqtt, "send_request")
        mocker.patch.object(mock_request_response_provider, "disconnect")

        # to transition into initializing
        mock_callback = MagicMock()
        polling_machine.register(callback=mock_callback)

        mock_init_uuid = mocker.patch(
            "azure.iot.device.provisioning.internal.polling_machine.uuid.uuid4"
        )
        mock_init_uuid.return_value = fake_request_id
        key_value_dict = {}
        key_value_dict["request_id"] = [fake_request_id, " "]

        # to transition into registering
        polling_machine._on_subscribe_completed()

        fake_payload_result = "HelloHogwarts"
        mock_request_response_provider.receive_response(
            fake_request_id, "400", key_value_dict, fake_payload_result)

        polling_machine._on_disconnect_completed_error()

        assert state_based_mqtt.send_request.call_count == 1
        assert state_based_mqtt.send_request.call_args_list[0][1][
            "request_id"] == fake_request_id
        assert state_based_mqtt.send_request.call_args_list[0][1][
            "request_payload"] == " "

        assert mock_callback.call_count == 1
        assert isinstance(mock_callback.call_args[1]["error"], ValueError)
        assert mock_callback.call_args[1]["error"].args[
            0] == "Incoming message failure"
Пример #4
0
    def test_receive_register_response_some_unknown_status_calls_callback_of_register_error(
            self, mocker):
        state_based_mqtt = MagicMock()
        mock_request_response_provider = SomeRequestResponseProvider(
            state_based_mqtt)
        polling_machine = PollingMachine(state_based_mqtt)
        polling_machine._request_response_provider = mock_request_response_provider

        mocker.patch.object(mock_request_response_provider, "enable_responses")
        mocker.patch.object(state_based_mqtt, "send_request")
        mocker.patch.object(mock_request_response_provider, "disconnect")

        # to transition into initializing
        mock_callback = MagicMock()
        polling_machine.register(callback=mock_callback)

        mock_init_uuid = mocker.patch(
            "azure.iot.device.provisioning.internal.polling_machine.uuid.uuid4"
        )
        mock_init_uuid.return_value = fake_request_id
        key_value_dict = {}
        key_value_dict["request_id"] = [fake_request_id, " "]

        # to transition into registering
        polling_machine._on_subscribe_completed()

        fake_unknown_status = "disabled"
        fake_payload_result = ('{"operationId":"' + fake_operation_id +
                               '","status":"' + fake_unknown_status + '"}')

        mock_request_response_provider.receive_response(
            fake_request_id, "200", key_value_dict, fake_payload_result)

        polling_machine._on_disconnect_completed_error()

        assert mock_callback.call_count == 1
        assert isinstance(mock_callback.call_args[1]["error"], ValueError)
        assert (mock_callback.call_args[1]["error"].args[0] ==
                "Other types of failure have occurred.")
        assert mock_callback.call_args[1]["error"].args[
            1] == fake_payload_result
    def test_receive_register_response_some_unknown_status_calls_callback_of_register_error(
            self, mocker):
        state_based_mqtt = MagicMock()
        mock_request_response_provider = TestRequestResponseProvider(
            state_based_mqtt)
        polling_machine = PollingMachine(state_based_mqtt)
        polling_machine._request_response_provider = mock_request_response_provider

        mocker.patch.object(mock_request_response_provider, "subscribe")
        mocker.patch.object(mock_request_response_provider, "publish")
        mocker.patch.object(mock_request_response_provider, "disconnect")

        # to transition into initializing
        mock_callback = MagicMock()
        polling_machine.register(callback=mock_callback)

        mock_init_uuid = mocker.patch(
            "azure.iot.device.provisioning.internal.polling_machine.uuid.uuid4"
        )
        mock_init_uuid.return_value = fake_request_id

        # to transition into registering
        polling_machine._on_subscribe_completed()

        fake_unknown_status = "disabled"
        fake_topic = fake_success_response_topic + "$rid={}".format(
            fake_request_id)
        fake_payload_result = ('{"operationId":"' + fake_operation_id +
                               '","status":"' + fake_unknown_status + '"}')

        mock_request_response_provider.receive_response(
            fake_topic, fake_payload_result.encode("utf-8"))

        polling_machine._on_disconnect_completed_error()

        assert mock_callback.call_count == 1
        assert isinstance(mock_callback.call_args[0][1], ValueError)
        assert mock_callback.call_args[0][1].args[
            0] == "Other types of failure have occurred."
        assert mock_callback.call_args[0][1].args[1] == fake_payload_result
    def test_receive_register_response_failure_calls_callback_of_register_error(
            self, mocker):
        state_based_mqtt = MagicMock()
        mock_request_response_provider = TestRequestResponseProvider(
            state_based_mqtt)
        polling_machine = PollingMachine(state_based_mqtt)
        polling_machine._request_response_provider = mock_request_response_provider

        mocker.patch.object(mock_request_response_provider, "subscribe")
        mocker.patch.object(mock_request_response_provider, "publish")
        mocker.patch.object(mock_request_response_provider, "disconnect")

        # to transition into initializing
        mock_callback = MagicMock()
        polling_machine.register(callback=mock_callback)

        mock_init_uuid = mocker.patch(
            "azure.iot.device.provisioning.internal.polling_machine.uuid.uuid4"
        )
        mock_init_uuid.return_value = fake_request_id

        # to transition into registering
        polling_machine._on_subscribe_completed()

        fake_topic = fake_failure_response_topic + "$rid={}".format(
            fake_request_id)

        fake_payload_result = "HelloHogwarts"
        mock_request_response_provider.receive_response(
            fake_topic, fake_payload_result.encode("utf-8"))

        polling_machine._on_disconnect_completed_error()

        assert mock_callback.call_count == 1
        assert isinstance(mock_callback.call_args[0][1], ValueError)
        assert mock_callback.call_args[0][1].args[
            0] == "Incoming message failure"
Пример #7
0
    def test_receive_query_response_failure_calls_callback_of_register_error(
            self, mocker):
        state_based_mqtt = MagicMock()
        mock_request_response_provider = SomeRequestResponseProvider(
            state_based_mqtt)
        polling_machine = PollingMachine(state_based_mqtt)
        polling_machine._request_response_provider = mock_request_response_provider

        mocker.patch.object(mock_request_response_provider, "enable_responses")
        mocker.patch.object(state_based_mqtt, "send_request")
        mocker.patch.object(mock_request_response_provider, "disconnect")

        # to transition into initializing
        mock_callback = MagicMock()
        polling_machine.register(callback=mock_callback)

        mock_init_uuid = mocker.patch(
            "azure.iot.device.provisioning.internal.polling_machine.uuid.uuid4"
        )
        mock_init_uuid.return_value = fake_request_id
        key_value_dict = {}
        key_value_dict["request_id"] = [fake_request_id, " "]

        # to transition into registering
        polling_machine._on_subscribe_completed()

        # reset mock to generate different request id for first query
        mock_init_uuid.reset_mock()
        fake_request_id_query = "Request4567"
        mock_init_uuid.return_value = fake_request_id_query
        key_value_dict_2 = {}
        key_value_dict_2["request_id"] = [fake_request_id_query, " "]

        fake_register_payload_result = ('{"operationId":"' +
                                        fake_operation_id + '","status":"' +
                                        fake_assigning_status + '"}')

        mock_init_polling_timer = mocker.patch(
            "azure.iot.device.provisioning.internal.polling_machine.Timer")

        # Response for register to transition to waiting and polling
        mock_request_response_provider.receive_response(
            fake_request_id, "200", key_value_dict,
            fake_register_payload_result)

        # call polling timer's time up call to simulate polling
        time_up_call = mock_init_polling_timer.call_args[0][1]
        time_up_call()

        fake_query_payload_result = "HelloHogwarts"

        # Response for query
        mock_request_response_provider.receive_response(
            fake_request_id_query, "400", key_value_dict_2,
            fake_query_payload_result)

        polling_machine._on_disconnect_completed_error()

        assert state_based_mqtt.send_request.call_count == 2
        assert state_based_mqtt.send_request.call_args_list[0][1][
            "request_id"] == fake_request_id
        assert state_based_mqtt.send_request.call_args_list[0][1][
            "request_payload"] == " "

        assert (state_based_mqtt.send_request.call_args_list[1][1]
                ["request_id"] == fake_request_id_query)
        assert (state_based_mqtt.send_request.call_args_list[1][1]
                ["operation_id"] == fake_operation_id)
        assert state_based_mqtt.send_request.call_args_list[1][1][
            "request_payload"] == " "

        assert mock_callback.call_count == 1
        assert isinstance(mock_callback.call_args[1]["error"], ValueError)
        assert mock_callback.call_args[1]["error"].args[
            0] == "Incoming message failure"