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"
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"
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"
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"