Exemple #1
0
    def test_register_and_cancel_clears_timers_and_disconnects(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
        polling_machine.register(callback=MagicMock())

        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 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_payload_result = (
            '{"operationId":"' + fake_operation_id + '","status":"' + fake_assigning_status + '"}'
        )

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

        polling_timer = polling_machine._polling_timer
        query_timer = polling_machine._query_timer
        poling_timer_cancel = mocker.patch.object(polling_timer, "cancel")
        query_timer_cancel = mocker.patch.object(query_timer, "cancel")

        mock_cancel_callback = MagicMock()
        polling_machine.cancel(mock_cancel_callback)

        assert poling_timer_cancel.call_count == 1
        assert query_timer_cancel.call_count == 1

        assert mock_request_response_provider.disconnect.call_count == 1
        polling_machine._on_disconnect_completed_cancel()

        assert mock_cancel_callback.call_count == 1
    def test_register_and_cancel_clears_timers_and_disconnects(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
        polling_machine.register(callback=MagicMock())

        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 query
        mock_init_uuid.reset_mock()
        fake_request_id_query = "Request4567"
        mock_init_uuid.return_value = fake_request_id_query

        fake_topic = fake_success_response_topic + "$rid={}&retry-after={}".format(
            fake_request_id, fake_retry_after)
        fake_payload_result = ('{"operationId":"' + fake_operation_id +
                               '","status":"' + fake_assigning_status + '"}')

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

        polling_timer = polling_machine._polling_timer
        query_timer = polling_machine._query_timer
        poling_timer_cancel = mocker.patch.object(polling_timer, "cancel")
        query_timer_cancel = mocker.patch.object(query_timer, "cancel")

        mock_cancel_callback = MagicMock()
        polling_machine.cancel(mock_cancel_callback)

        assert poling_timer_cancel.call_count == 1
        assert query_timer_cancel.call_count == 1

        mock_request_response_provider.disconnect.assert_called_once_with(
            callback=polling_machine._on_disconnect_completed_cancel)
        polling_machine._on_disconnect_completed_cancel()

        assert mock_cancel_callback.call_count == 1