public async Task DeleteDatasourceCredential()
        {
            MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient();

            var credentialName     = Recording.GenerateAlphaNumericId("credential");
            var credentialToCreate = new ServicePrincipalDatasourceCredential(credentialName, "clientId", "clientSecret", "tenantId");

            string credentialId = null;

            try
            {
                DatasourceCredential createdCredential = await adminClient.CreateDatasourceCredentialAsync(credentialToCreate);

                credentialId = createdCredential.Id;

                Assert.That(credentialId, Is.Not.Null.And.Not.Empty);
            }
            finally
            {
                if (credentialId != null)
                {
                    await adminClient.DeleteDatasourceCredentialAsync(credentialId);

                    var errorCause = "credentialId is invalid";
                    Assert.That(async() => await adminClient.GetDatasourceCredentialAsync(credentialId), Throws.InstanceOf <RequestFailedException>().With.Message.Contains(errorCause));
                }
            }
        }
 private void ValidateTestCaseDatasourceCredential(DatasourceCredential credential)
 {
     if (credential is ServicePrincipalDatasourceCredential spCredential)
     {
         Assert.That(spCredential.ClientId, Is.EqualTo(ClientId));
         Assert.That(spCredential.TenantId, Is.EqualTo(TenantId));
     }
     else if (credential is ServicePrincipalInKeyVaultDatasourceCredential kvCredential)
     {
         Assert.That(kvCredential.Endpoint.AbsoluteUri, Is.EqualTo(Endpoint));
         Assert.That(kvCredential.KeyVaultClientId, Is.EqualTo(ClientId));
         Assert.That(kvCredential.TenantId, Is.EqualTo(TenantId));
         Assert.That(kvCredential.SecretNameForClientId, Is.EqualTo(ClientIdSecretName));
         Assert.That(kvCredential.SecretNameForClientSecret, Is.EqualTo(ClientSecretSecretName));
     }
     else if (credential is DataLakeGen2SharedKeyDatasourceCredential ||
              credential is SqlConnectionStringDatasourceCredential)
     {
         // There's nothing to validate since these credential types do not have public properties.
     }
     else
     {
         throw new Exception($"Unknown credential type: {credential.GetType()}");
     }
 }
Esempio n. 3
0
        /// <summary>
        /// Creates a datasource credential using the specified <see cref="MetricsAdvisorAdministrationClient"/>.
        /// A <see cref="DisposableDatasourceCredential"/> instance is returned, from which the created credential
        /// can be obtained. Upon disposal, the created credential will be deleted.
        /// </summary>
        /// <param name="adminClient">The client to use for creating and for deleting the datasource credential.</param>
        /// <param name="credential">Specifies how the created <see cref="DatasourceCredential"/> should be configured.</param>
        /// <returns>A <see cref="DisposableDatasourceCredential"/> instance from which the created credential can be obtained.</returns>
        public static async Task <DisposableDatasourceCredential> CreateDatasourceCredentialAsync(MetricsAdvisorAdministrationClient adminClient, DatasourceCredential credential)
        {
            DatasourceCredential createdCredential = await adminClient.CreateDatasourceCredentialAsync(credential);

            Assert.That(createdCredential, Is.Not.Null);
            Assert.That(createdCredential.Id, Is.Not.Null.And.Not.Empty);

            return(new DisposableDatasourceCredential(adminClient, createdCredential));
        }
Esempio n. 4
0
        /// <summary>
        /// Creates a datasource credential using the specified <see cref="MetricsAdvisorAdministrationClient"/>.
        /// A <see cref="DisposableDatasourceCredential"/> instance is returned, from which the created credential can
        /// be obtained. Except for the name, all of its required properties are initialized with mock values. Upon disposal,
        /// the created credential will be deleted.
        /// </summary>
        /// <param name="adminClient">The client to use for creating and for deleting the datasource credential.</param>
        /// <param name="name">The name of the datasource credential to be created.</param>
        /// <param name="authenticationType">Specifies which type of <see cref="DatasourceCredential"/> should be created.</param>
        /// <returns>A <see cref="DisposableDatasourceCredential"/> instance from which the created credential can be obtained.</returns>
        public static async Task <DisposableDatasourceCredential> CreateDatasourceCredentialAsync(MetricsAdvisorAdministrationClient adminClient, string name, string authenticationType)
        {
            DatasourceCredential credential = authenticationType switch
            {
                "ServicePrincipal" => new ServicePrincipalDatasourceCredential(name, "mock", "mock", "mock"),
                "ServicePrincipalInKeyVault" => new ServicePrincipalInKeyVaultDatasourceCredential(name, new Uri("https://mock.com/"), "mock", "mock", "mock", "mock", "mock"),
                "SharedKey" => new DataLakeGen2SharedKeyDatasourceCredential(name, "mock"),
                "SqlConnectionString" => new SqlConnectionStringDatasourceCredential(name, "mock"),
                _ => throw new ArgumentOutOfRangeException($"Invalid datasource credential type: {authenticationType}")
            };

            return(await CreateDatasourceCredentialAsync(adminClient, credential).ConfigureAwait(false));
        }
        public async Task CreateAndGetDatasourceCredentialWithDescription(string credentialTypeName)
        {
            MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient();

            string credentialName      = Recording.GenerateAlphaNumericId("credential");
            string expectedDescription = "This is a description";

            DatasourceCredential credentialToCreate = GetDatasourceCredentialTestCase(credentialTypeName, credentialName);

            credentialToCreate.Description = expectedDescription;

            await using var disposableCredential = await DisposableDatasourceCredential.CreateDatasourceCredentialAsync(adminClient, credentialToCreate);

            DatasourceCredential createdCredential = disposableCredential.Credential;

            Assert.That(createdCredential.Description, Is.EqualTo(expectedDescription));
        }
        public async Task CreateAndGetDatasourceCredential(string credentialTypeName)
        {
            MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient();

            string credentialName = Recording.GenerateAlphaNumericId("credential");
            DatasourceCredential credentialToCreate = GetDatasourceCredentialTestCase(credentialTypeName, credentialName);

            await using var disposableCredential = await DisposableDatasourceCredential.CreateDatasourceCredentialAsync(adminClient, credentialToCreate);

            DatasourceCredential createdCredential = disposableCredential.Credential;

            Assert.That(createdCredential.Id, Is.Not.Empty.And.Not.Null);
            Assert.That(createdCredential.Name, Is.EqualTo(credentialName));
            Assert.That(createdCredential.Description, Is.Empty);

            ValidateTestCaseDatasourceCredential(createdCredential);
        }
        public async Task DatasourceCredentialSendsSecretDuringCreation(DatasourceCredential credential, string expectedSubstring)
        {
            MockResponse createResponse = new MockResponse(201);

            createResponse.AddHeader(new HttpHeader("Location", $"https://fakeresource.cognitiveservices.azure.com/metricsadvisor/v1.0/credentials/{FakeGuid}"));

            MockResponse getResponse = new MockResponse(200);

            getResponse.SetContent(DatasourceCredentialResponseContent);

            MockTransport mockTransport = new MockTransport(createResponse, getResponse);
            MetricsAdvisorAdministrationClient adminClient = CreateInstrumentedAdministrationClient(mockTransport);

            await adminClient.CreateDatasourceCredentialAsync(credential);

            MockRequest request = mockTransport.Requests.First();
            string      content = ReadContent(request);

            Assert.That(content, Contains.Substring(expectedSubstring));
        }
        public async Task UpdateDatasourceCredentialCommonProperties(string credentialTypeName)
        {
            MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient();

            string credentialName = Recording.GenerateAlphaNumericId("credential");

            DatasourceCredential credentialToCreate = GetDatasourceCredentialTestCase(credentialTypeName, credentialName);

            await using var disposableCredential = await DisposableDatasourceCredential.CreateDatasourceCredentialAsync(adminClient, credentialToCreate);

            DatasourceCredential credentialToUpdate = disposableCredential.Credential;

            string expectedName        = Recording.GenerateAlphaNumericId("credential");
            string expectedDescription = "This description was created by a .NET test";

            credentialToUpdate.Name        = expectedName;
            credentialToUpdate.Description = expectedDescription;

            DatasourceCredential updatedCredential = await adminClient.UpdateDatasourceCredentialAsync(credentialToUpdate);

            Assert.That(updatedCredential.Name, Is.EqualTo(expectedName));
            Assert.That(updatedCredential.Description, Is.EqualTo(expectedDescription));
        }
Esempio n. 9
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DisposableDatasourceCredential"/> class.
 /// </summary>
 /// <param name="adminClient">The client to use for deleting the credential entity upon disposal.</param>
 /// <param name="credential">The datasource credential this instance is associated with.</param>
 private DisposableDatasourceCredential(MetricsAdvisorAdministrationClient adminClient, DatasourceCredential credential)
 {
     _adminClient = adminClient;
     Credential   = credential;
 }
        /// <summary>
        /// Creates a datasource credential using the specified <see cref="MetricsAdvisorAdministrationClient"/>.
        /// A <see cref="DisposableDatasourceCredential"/> instance is returned, from which the created credential
        /// can be obtained. Upon disposal, the created credential will be deleted.
        /// </summary>
        /// <param name="adminClient">The client to use for creating and for deleting the datasource credential.</param>
        /// <param name="credential">Specifies how the created <see cref="DatasourceCredential"/> should be configured.</param>
        /// <returns>A <see cref="DisposableDatasourceCredential"/> instance from which the created credential can be obtained.</returns>
        public static async Task <DisposableDatasourceCredential> CreateDatasourceCredentialAsync(MetricsAdvisorAdministrationClient adminClient, DatasourceCredential credential)
        {
            DatasourceCredential createdCredential = await adminClient.CreateDatasourceCredentialAsync(credential);

            return(new DisposableDatasourceCredential(adminClient, createdCredential));
        }