private async Task <(HttpRequestMessage HttpRequest, Guid Correlationid)> RunAcquireTokenForClientAsync( AcquireTokenForClientOutcome outcome, bool forceRefresh = false) { MockHttpMessageHandler tokenRequestHandler = null; Guid correlationId = default; switch (outcome) { case AcquireTokenForClientOutcome.Success: tokenRequestHandler = _harness.HttpManager.AddSuccessTokenResponseMockHandlerForPost(authority: TestConstants.AuthorityRegional); var authResult = await _app .AcquireTokenForClient(TestConstants.s_scope) .WithAzureRegion(true) .WithForceRefresh(forceRefresh) .ExecuteAsync() .ConfigureAwait(false); correlationId = authResult.CorrelationId; break; case AcquireTokenForClientOutcome.AADUnavailableError: correlationId = Guid.NewGuid(); tokenRequestHandler = new MockHttpMessageHandler() { ExpectedMethod = HttpMethod.Post, ResponseMessage = MockHelpers.CreateFailureMessage( System.Net.HttpStatusCode.GatewayTimeout, "gateway timeout") }; var tokenRequestHandler2 = new MockHttpMessageHandler() { ExpectedMethod = HttpMethod.Post, ResponseMessage = MockHelpers.CreateFailureMessage( System.Net.HttpStatusCode.GatewayTimeout, "gateway timeout") }; // 2 of these are needed because MSAL has a "retry once" policy for 5xx errors _harness.HttpManager.AddMockHandler(tokenRequestHandler2); _harness.HttpManager.AddMockHandler(tokenRequestHandler); var serviceEx = await AssertException.TaskThrowsAsync <MsalServiceException>(() => _app .AcquireTokenForClient(TestConstants.s_scope) .WithAzureRegion(true) .WithForceRefresh(true) .WithCorrelationId(correlationId) .ExecuteAsync()) .ConfigureAwait(false); break; default: throw new NotImplementedException(); } Assert.AreEqual(0, _harness.HttpManager.QueueSize); return(tokenRequestHandler?.ActualRequestMessage, correlationId); }
private async Task <(HttpRequestMessage HttpRequest, Guid Correlationid)> RunAcquireTokenForClientAsync( AcquireTokenForClientOutcome outcome, bool forceRefresh = false, bool serializeCache = false) { MockHttpMessageHandler tokenRequestHandler = null; Guid correlationId = default; switch (outcome) { case AcquireTokenForClientOutcome.Success: var app = ConfidentialClientApplicationBuilder.Create(TestConstants.ClientId) .WithAuthority(AzureCloudInstance.AzurePublic, TestConstants.TenantId, false) .WithClientSecret(TestConstants.ClientSecret) .WithHttpManager(_harness.HttpManager) .WithAzureRegion() .WithExperimentalFeatures(true) .BuildConcrete(); if (serializeCache) { InMemoryTokenCache mem = new InMemoryTokenCache(); mem.Bind(app.AppTokenCache); } tokenRequestHandler = _harness.HttpManager.AddSuccessTokenResponseMockHandlerForPost(authority: TestConstants.AuthorityRegional); var authResult = await app .AcquireTokenForClient(TestConstants.s_scope) .WithForceRefresh(forceRefresh) .ExecuteAsync() .ConfigureAwait(false); correlationId = authResult.CorrelationId; break; case AcquireTokenForClientOutcome.FallbackToGlobal: _harness.HttpManager.AddInstanceDiscoveryMockHandler(); tokenRequestHandler = _harness.HttpManager.AddSuccessTokenResponseMockHandlerForPost(authority: TestConstants.AuthorityTenant); var app2 = ConfidentialClientApplicationBuilder.Create(TestConstants.ClientId) .WithAuthority(AzureCloudInstance.AzurePublic, TestConstants.TenantId, false) .WithClientSecret(TestConstants.ClientSecret) .WithHttpManager(_harness.HttpManager) .WithAzureRegion() .WithExperimentalFeatures(true) .BuildConcrete(); authResult = await app2 .AcquireTokenForClient(TestConstants.s_scope) .WithForceRefresh(forceRefresh) .ExecuteAsync() .ConfigureAwait(false); correlationId = authResult.CorrelationId; break; case AcquireTokenForClientOutcome.UserProvidedRegion: tokenRequestHandler = _harness.HttpManager.AddSuccessTokenResponseMockHandlerForPost(authority: TestConstants.AuthorityRegional); var app3 = ConfidentialClientApplicationBuilder.Create(TestConstants.ClientId) .WithAuthority(AzureCloudInstance.AzurePublic, TestConstants.TenantId, false) .WithClientSecret(TestConstants.ClientSecret) .WithHttpManager(_harness.HttpManager) .WithAzureRegion(TestConstants.Region) .WithExperimentalFeatures(true) .BuildConcrete(); authResult = await app3 .AcquireTokenForClient(TestConstants.s_scope) .WithForceRefresh(forceRefresh) .ExecuteAsync() .ConfigureAwait(false); correlationId = authResult.CorrelationId; break; case AcquireTokenForClientOutcome.AADUnavailableError: correlationId = Guid.NewGuid(); var app5 = ConfidentialClientApplicationBuilder.Create(TestConstants.ClientId) .WithAuthority(AzureCloudInstance.AzurePublic, TestConstants.TenantId, false) .WithClientSecret(TestConstants.ClientSecret) .WithHttpManager(_harness.HttpManager) .WithAzureRegion() .WithExperimentalFeatures(true) .BuildConcrete(); tokenRequestHandler = new MockHttpMessageHandler() { ExpectedMethod = HttpMethod.Post, ResponseMessage = MockHelpers.CreateFailureMessage( System.Net.HttpStatusCode.GatewayTimeout, "gateway timeout") }; var tokenRequestHandler2 = new MockHttpMessageHandler() { ExpectedMethod = HttpMethod.Post, ResponseMessage = MockHelpers.CreateFailureMessage( System.Net.HttpStatusCode.GatewayTimeout, "gateway timeout") }; // 2 of these are needed because MSAL has a "retry once" policy for 5xx errors _harness.HttpManager.AddMockHandler(tokenRequestHandler2); _harness.HttpManager.AddMockHandler(tokenRequestHandler); var serviceEx = await AssertException.TaskThrowsAsync <MsalServiceException>(() => app5 .AcquireTokenForClient(TestConstants.s_scope) .WithForceRefresh(true) .WithCorrelationId(correlationId) .ExecuteAsync()) .ConfigureAwait(false); break; default: throw new NotImplementedException(); } Assert.AreEqual(0, _harness.HttpManager.QueueSize); return(tokenRequestHandler?.ActualRequestMessage, correlationId); }