def test_receive_register_response_assigned_completes_registration( 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, " "] key_value_dict["retry-after"] = [fake_retry_after, " "] # to transition into registering polling_machine._on_subscribe_completed() fake_registration_state = ('{"registrationId":"' + fake_registration_id + '","assignedHub":"' + fake_assigned_hub + '","deviceId":"' + fake_device_id + '","substatus":"' + fake_sub_status + '"}') fake_payload_result = ('{"operationId":"' + fake_operation_id + '","status":"' + fake_assigned_status + '","registrationState":' + fake_registration_state + "}") mock_request_response_provider.receive_response( fake_request_id, "200", key_value_dict, fake_payload_result) polling_machine._on_disconnect_completed_register() 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]["result"], RegistrationResult) registration_result = mock_callback.call_args[1]["result"] registration_result.request_id == fake_request_id registration_result.operation_id == fake_operation_id registration_result.status == fake_assigned_status registration_result.registration_state.device_id == fake_device_id registration_result.registration_state.sub_status == fake_sub_status
def test_receive_register_response_assigned_completes_registration( 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_success_response_topic + "$rid={}&retry-after={}".format( fake_request_id, fake_retry_after) fake_registration_state = ('{"registrationId":"' + fake_registration_id + '","assignedHub":"' + fake_assigned_hub + '","deviceId":"' + fake_device_id + '","substatus":"' + fake_sub_status + '"}') fake_payload_result = ('{"operationId":"' + fake_operation_id + '","status":"' + fake_assigned_status + '","registrationState":' + fake_registration_state + "}") mock_request_response_provider.receive_response( fake_topic, fake_payload_result.encode("utf-8")) polling_machine._on_disconnect_completed_register() assert mock_request_response_provider.publish.call_count == 1 # assert polling_machine.on_registration_complete.call_count == 1 assert mock_callback.call_count == 1 assert isinstance(mock_callback.call_args[0][0], RegistrationResult) registration_result = mock_callback.call_args[0][0] registration_result.request_id == fake_request_id registration_result.operation_id == fake_operation_id registration_result.status == fake_assigned_status registration_result.registration_state.device_id == fake_device_id registration_result.registration_state.sub_status == fake_sub_status
def test_receive_query_response_assigned_completes_registration( 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_success_response_topic + "$rid={}".format( fake_request_id_query) fake_registration_state = ('{"registrationId":"' + fake_registration_id + '","assignedHub":"' + fake_assigned_hub + '","deviceId":"' + fake_device_id + '","substatus":"' + fake_sub_status + '"}') fake_query_payload_result = ('{"operationId":"' + fake_operation_id + '","status":"' + fake_assigned_status + '","registrationState":' + fake_registration_state + "}") # 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_register() assert mock_request_response_provider.publish.call_count == 2 assert mock_callback.call_count == 1 assert isinstance(mock_callback.call_args[0][0], RegistrationResult)
def test_receive_query_response_assigned_completes_registration( 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_registration_state = ('{"registrationId":"' + fake_registration_id + '","assignedHub":"' + fake_assigned_hub + '","deviceId":"' + fake_device_id + '","substatus":"' + fake_sub_status + '"}') fake_query_payload_result = ('{"operationId":"' + fake_operation_id + '","status":"' + fake_assigned_status + '","registrationState":' + fake_registration_state + "}") # Response for query mock_request_response_provider.receive_response( fake_request_id_query, "200", key_value_dict_2, fake_query_payload_result) polling_machine._on_disconnect_completed_register() 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]["result"], RegistrationResult)