public async Task DefaultAzureCredential_UseAzureCliCredential_ParallelCalls() { var options = Recording.InstrumentClientOptions(new DefaultAzureCredentialOptions { ExcludeEnvironmentCredential = true, ExcludeInteractiveBrowserCredential = true, ExcludeSharedTokenCacheCredential = true, VisualStudioCodeTenantId = TestEnvironment.TestTenantId }); var(expectedToken, expectedExpiresOn, processOutput) = CredentialTestHelpers.CreateTokenForAzureCli(); var processService = new TestProcessService { CreateHandler = psi => new TestProcess { Output = processOutput } }; var vscAdapter = new TestVscAdapter(ExpectedServiceName, "Azure", null); var fileSystem = CredentialTestHelpers.CreateFileSystemForVisualStudioCode(TestEnvironment); var factory = new TestDefaultAzureCredentialFactory(options, fileSystem, processService, vscAdapter); var credential = InstrumentClient(new DefaultAzureCredential(factory, options)); var tasks = new List <Task <AccessToken> >(); for (int i = 0; i < 10; i++) { tasks.Add(Task.Run(async() => await credential.GetTokenAsync(new TokenRequestContext(new[] { "https://vault.azure.net/.default" }), CancellationToken.None))); } await Task.WhenAll(tasks); foreach (Task <AccessToken> task in tasks) { Assert.AreEqual(task.Result.Token, expectedToken); Assert.AreEqual(task.Result.ExpiresOn, expectedExpiresOn); } }
public async Task DefaultAzureCredential_UseAzureCliCredential() { var options = Recording.InstrumentClientOptions(new DefaultAzureCredentialOptions { ExcludeEnvironmentCredential = true, ExcludeInteractiveBrowserCredential = true, ExcludeSharedTokenCacheCredential = true, VisualStudioCodeTenantId = TestEnvironment.TestTenantId }); var(expectedToken, expectedExpiresOn, processOutput) = CredentialTestHelpers.CreateTokenForAzureCli(); var testProcess = new TestProcess { Output = processOutput }; var vscAdapter = new TestVscAdapter(ExpectedServiceName, "Azure", null); var fileSystem = CredentialTestHelpers.CreateFileSystemForVisualStudioCode(TestEnvironment); var factory = new TestDefaultAzureCredentialFactory(options, fileSystem, new TestProcessService(testProcess), vscAdapter); var credential = InstrumentClient(new DefaultAzureCredential(factory, options)); AccessToken token; List <ClientDiagnosticListener.ProducedDiagnosticScope> scopes; using (ClientDiagnosticListener diagnosticListener = new ClientDiagnosticListener(s => s.StartsWith("Azure.Identity"))) { token = await credential.GetTokenAsync(new TokenRequestContext(new[] { "https://vault.azure.net/.default" }), CancellationToken.None); scopes = diagnosticListener.Scopes; } Assert.AreEqual(token.Token, expectedToken); Assert.AreEqual(token.ExpiresOn, expectedExpiresOn); Assert.AreEqual(2, scopes.Count); Assert.AreEqual($"{nameof(DefaultAzureCredential)}.{nameof(DefaultAzureCredential.GetToken)}", scopes[0].Name); Assert.AreEqual($"{nameof(AzureCliCredential)}.{nameof(AzureCliCredential.GetToken)}", scopes[1].Name); }
public void DefaultAzureCredential_AllCredentialsHaveFailed_CredentialUnavailableException() { var options = InstrumentClientOptions(new DefaultAzureCredentialOptions { ExcludeEnvironmentCredential = true, ExcludeInteractiveBrowserCredential = true, ExcludeManagedIdentityCredential = true, ExcludeSharedTokenCacheCredential = true, }); var vscAdapter = new TestVscAdapter(ExpectedServiceName, "AzureCloud", "{}"); var factory = new TestDefaultAzureCredentialFactory(options, new TestFileSystemService(), new TestProcessService(new TestProcess { Error = "'az' is not recognized" }, new TestProcess { Error = "'PowerShell' is not recognized" }), vscAdapter) { ManagedIdentitySourceFactory = () => default }; var credential = InstrumentClient(new DefaultAzureCredential(factory, options)); List <ClientDiagnosticListener.ProducedDiagnosticScope> scopes; using (ClientDiagnosticListener diagnosticListener = new ClientDiagnosticListener(s => s.StartsWith("Azure.Identity"))) { Assert.CatchAsync <CredentialUnavailableException>(async() => await credential.GetTokenAsync(new TokenRequestContext(new[] { "https://vault.azure.net/.default" }), CancellationToken.None)); scopes = diagnosticListener.Scopes; } Assert.AreEqual(5, scopes.Count); Assert.AreEqual($"{nameof(DefaultAzureCredential)}.{nameof(DefaultAzureCredential.GetToken)}", scopes[0].Name); Assert.AreEqual($"{nameof(VisualStudioCredential)}.{nameof(VisualStudioCredential.GetToken)}", scopes[1].Name); Assert.AreEqual($"{nameof(VisualStudioCodeCredential)}.{nameof(VisualStudioCodeCredential.GetToken)}", scopes[2].Name); Assert.AreEqual($"{nameof(AzureCliCredential)}.{nameof(AzureCliCredential.GetToken)}", scopes[3].Name); Assert.AreEqual($"{nameof(AzurePowerShellCredential)}.{nameof(AzurePowerShellCredential.GetToken)}", scopes[4].Name); }