def test_retrieve_token_from_azure_identity(
         self, mock_azure_identity_TokenCredential):
     IoTHubAmqpClientTokenAuth(fake_hostname,
                               mock_azure_identity_TokenCredential,
                               fake_token_scope)
     mock_azure_identity_TokenCredential.get_token.assert_called_once_with(
         fake_token_scope)
    def test_create_JWTTokenAuth_with_bearer_token_default_scope(
            self, mocker, mock_azure_identity_TokenCredential,
            mock_uamqp_SendClient):
        amqp_token_init_mock = mocker.patch.object(uamqp.authentication,
                                                   "JWTTokenAuth")
        amqp_token_mock = amqp_token_init_mock.return_value

        IoTHubAmqpClientTokenAuth(fake_hostname,
                                  mock_azure_identity_TokenCredential)

        # JWTTokenAuth Creation
        assert amqp_token_init_mock.call_count == 1
        assert amqp_token_init_mock.call_args[1][
            "uri"] == "https://" + fake_hostname
        assert amqp_token_init_mock.call_args[1][
            "audience"] == "https://iothubs.azure.net/.default"
        assert amqp_token_init_mock.call_args[1]["token_type"] == b"bearer"
        assert amqp_token_mock.update_token.call_count == 1

        # AMQP SendClient is created
        assert mock_uamqp_SendClient.call_count == 1
        expected_target = "amqps://" + fake_hostname + "/messages/devicebound"
        assert mock_uamqp_SendClient.call_args == mocker.call(
            target=expected_target,
            auth=amqp_token_mock,
            keep_alive_interval=120)
    def test_bearer_token_with_custom_scope(
            self, mocker, mock_azure_identity_TokenCredential,
            mock_uamqp_SendClient):
        amqp_token_init_mock = mocker.patch.object(uamqp.authentication,
                                                   "JWTTokenAuth")
        amqp_token_mock = amqp_token_init_mock.return_value

        IoTHubAmqpClientTokenAuth(fake_hostname,
                                  mock_azure_identity_TokenCredential,
                                  token_scope=fake_token_scope)

        # Bearer Token Creation
        assert amqp_token_init_mock.call_count == 1
        assert amqp_token_init_mock.call_args[1][
            "uri"] == "https://" + fake_hostname
        assert amqp_token_init_mock.call_args[1][
            "audience"] == fake_token_scope
        assert amqp_token_init_mock.call_args[1]["token_type"] == b"bearer"
        assert amqp_token_mock.update_token.call_count == 1

        # AMQP SendClient is created
        assert mock_uamqp_SendClient.call_count == 1
        expected_target = "amqps://" + fake_hostname + "/messages/devicebound"
        assert mock_uamqp_SendClient.call_args == mocker.call(
            target=expected_target, auth=amqp_token_mock)
 def client(self, mock_azure_identity_TokenCredential):
     return IoTHubAmqpClientTokenAuth(
         hostname=fake_hostname,
         token_credential=mock_azure_identity_TokenCredential,
         token_scope=fake_token_scope,
     )