Skip to content

Commit

Permalink
More unit testing in progerss
Browse files Browse the repository at this point in the history
  • Loading branch information
bgavrilMS committed Mar 27, 2021
1 parent b70360f commit 4cb3c10
Show file tree
Hide file tree
Showing 2 changed files with 512 additions and 492 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,22 +42,24 @@ public override void TestInitialize()
_harness = base.CreateTestHarness();
_httpManager = _harness.HttpManager;
_userCancellationTokenSource = new CancellationTokenSource();
_testRequestContext = new RequestContext(_harness.ServiceBundle, Guid.NewGuid(), _userCancellationTokenSource.Token);
_testRequestContext = new RequestContext(
_harness.ServiceBundle,
Guid.NewGuid(),
_userCancellationTokenSource.Token);
_apiEvent = new ApiEvent(
_harness.ServiceBundle.DefaultLogger,
_harness.ServiceBundle.PlatformProxy.CryptographyManager,
Guid.NewGuid().AsMatsCorrelationId());
_testRequestContext.ApiEvent = _apiEvent;
_regionDiscoveryProvider = new RegionDiscoveryProvider(_httpManager);
_regionDiscoveryProvider = new RegionDiscoveryProvider(_httpManager, true);
}

[TestCleanup]
public override void TestCleanup()
{
Environment.SetEnvironmentVariable(TestConstants.RegionName, "");
_testRequestContext.ServiceBundle.Config.AuthorityInfo.RegionToUse = "";
_harness?.Dispose();
_regionDiscoveryProvider.Clear();
_regionDiscoveryProvider = new RegionDiscoveryProvider(_httpManager, true);
base.TestCleanup();
}

Expand All @@ -66,17 +68,25 @@ public async Task SuccessfulResponseFromEnvironmentVariableAsync()
{
Environment.SetEnvironmentVariable(TestConstants.RegionName, TestConstants.Region);

InstanceDiscoveryMetadataEntry regionalMetadata = await _regionDiscoveryProvider.TryGetMetadataAsync(new Uri("https://login.microsoftonline.com/common/"), _testRequestContext).ConfigureAwait(false);
_testRequestContext.ServiceBundle.Config.AzureRegion = null; // not configured

ValidateInstanceMetadata(regionalMetadata);
InstanceDiscoveryMetadataEntry regionalMetadata = await _regionDiscoveryProvider.GetMetadataAsync(
new Uri("https://login.microsoftonline.com/common/"), _testRequestContext)
.ConfigureAwait(false);

Assert.IsNull(regionalMetadata);
}

[TestMethod]
public async Task SuccessfulResponseFromLocalImdsAsync()
{
AddMockedResponse(MockHelpers.CreateSuccessResponseMessage(TestConstants.Region));

_testRequestContext.ServiceBundle.Config.AzureRegion =
ConfidentialClientApplication.AttemptRegionDiscovery;

InstanceDiscoveryMetadataEntry regionalMetadata = await _regionDiscoveryProvider.TryGetMetadataAsync(new Uri("https://login.microsoftonline.com/common/"), _testRequestContext).ConfigureAwait(false);
InstanceDiscoveryMetadataEntry regionalMetadata = await _regionDiscoveryProvider.GetMetadataAsync(
new Uri("https://login.microsoftonline.com/common/"), _testRequestContext).ConfigureAwait(false);

ValidateInstanceMetadata(regionalMetadata);
}
Expand All @@ -86,12 +96,16 @@ public async Task FetchRegionFromLocalImdsThenGetMetadataFromCacheAsync()
{
AddMockedResponse(MockHelpers.CreateSuccessResponseMessage(TestConstants.Region));

InstanceDiscoveryMetadataEntry regionalMetadata = await _regionDiscoveryProvider.TryGetMetadataAsync(new Uri("https://login.microsoftonline.com/common/"), _testRequestContext).ConfigureAwait(false);
_testRequestContext.ServiceBundle.Config.AzureRegion =
ConfidentialClientApplication.AttemptRegionDiscovery;

InstanceDiscoveryMetadataEntry regionalMetadata =
await _regionDiscoveryProvider.GetMetadataAsync(new Uri("https://login.microsoftonline.com/common/"), _testRequestContext).ConfigureAwait(false);

ValidateInstanceMetadata(regionalMetadata);

//get metadata from the instance metadata cache
regionalMetadata = await _regionDiscoveryProvider.TryGetMetadataAsync(new Uri("https://login.microsoftonline.com/common/"), _testRequestContext).ConfigureAwait(false);
regionalMetadata = await _regionDiscoveryProvider.GetMetadataAsync(new Uri("https://login.microsoftonline.com/common/"), _testRequestContext).ConfigureAwait(false);

ValidateInstanceMetadata(regionalMetadata);
}
Expand All @@ -100,42 +114,49 @@ public async Task FetchRegionFromLocalImdsThenGetMetadataFromCacheAsync()
public async Task SuccessfulResponseFromUserProvidedRegionAsync()
{
AddMockedResponse(MockHelpers.CreateNullMessage(System.Net.HttpStatusCode.NotFound));
_testRequestContext.ServiceBundle.Config.AuthorityInfo.RegionToUse = TestConstants.Region;

IRegionDiscoveryProvider regionDiscoveryProvider = new RegionDiscoveryProvider(_httpManager, new NetworkCacheMetadataProvider());
InstanceDiscoveryMetadataEntry regionalMetadata = await regionDiscoveryProvider.TryGetMetadataAsync(new Uri("https://login.microsoftonline.com/common/"), _testRequestContext).ConfigureAwait(false);
_testRequestContext.ServiceBundle.Config.AzureRegion = TestConstants.Region;

IRegionDiscoveryProvider regionDiscoveryProvider = new RegionDiscoveryProvider(_httpManager, true);
InstanceDiscoveryMetadataEntry regionalMetadata = await regionDiscoveryProvider.GetMetadataAsync(
new Uri("https://login.microsoftonline.com/common/"), _testRequestContext).ConfigureAwait(false);

Assert.IsNotNull(regionalMetadata);
Assert.AreEqual("centralus.login.microsoft.com", regionalMetadata.PreferredNetwork);
regionDiscoveryProvider.Clear();

Assert.AreEqual(TestConstants.Region, _testRequestContext.ApiEvent.RegionDiscovered);
Assert.AreEqual(TestConstants.Region, _testRequestContext.ApiEvent.RegionSource);
Assert.AreEqual(TestConstants.Region, _testRequestContext.ApiEvent.UserProvidedRegion);
Assert.AreEqual(TestConstants.Region, _testRequestContext.ApiEvent.IsValidUserProvidedRegion);
Assert.AreEqual(TestConstants.Region, _testRequestContext.ApiEvent.FallbackToGlobal);
}

[TestMethod]
public async Task ResponseFromUserProvidedRegionSameAsRegionDetectedAsync()
{
Environment.SetEnvironmentVariable(TestConstants.RegionName, TestConstants.Region);
_testRequestContext.ServiceBundle.Config.AuthorityInfo.RegionToUse = TestConstants.Region;
_testRequestContext.ServiceBundle.Config.AzureRegion = TestConstants.Region;

IRegionDiscoveryProvider regionDiscoveryProvider = new RegionDiscoveryProvider(_httpManager, new NetworkCacheMetadataProvider());
InstanceDiscoveryMetadataEntry regionalMetadata = await regionDiscoveryProvider.TryGetMetadataAsync(new Uri("https://login.microsoftonline.com/common/"), _testRequestContext).ConfigureAwait(false);
// IRegionDiscoveryProvider regionDiscoveryProvider = new RegionDiscoveryProvider(_httpManager);
InstanceDiscoveryMetadataEntry regionalMetadata = await _regionDiscoveryProvider.GetMetadataAsync(new Uri("https://login.microsoftonline.com/common/"), _testRequestContext).ConfigureAwait(false);

Assert.IsNotNull(regionalMetadata);
Assert.AreEqual("centralus.login.microsoft.com", regionalMetadata.PreferredNetwork);
regionDiscoveryProvider.Clear();

}

[TestMethod]
public async Task ResponseFromUserProvidedRegionDifferentFromRegionDetectedAsync()
{
Environment.SetEnvironmentVariable(TestConstants.RegionName, "eastus");
_testRequestContext.ServiceBundle.Config.AuthorityInfo.RegionToUse = TestConstants.Region;
//_testRequestContext.ServiceBundle.Config.AuthorityInfo.RegionToUse = TestConstants.Region;

IRegionDiscoveryProvider regionDiscoveryProvider = new RegionDiscoveryProvider(_httpManager, new NetworkCacheMetadataProvider());
InstanceDiscoveryMetadataEntry regionalMetadata = await regionDiscoveryProvider.TryGetMetadataAsync(new Uri("https://login.microsoftonline.com/common/"), _testRequestContext).ConfigureAwait(false);
//IRegionDiscoveryProvider regionDiscoveryProvider = new RegionDiscoveryProvider(_httpManager, new NetworkCacheMetadataProvider());
InstanceDiscoveryMetadataEntry regionalMetadata = await _regionDiscoveryProvider.GetMetadataAsync(new Uri("https://login.microsoftonline.com/common/"), _testRequestContext).ConfigureAwait(false);

Assert.IsNotNull(regionalMetadata);
Assert.AreEqual("eastus.login.microsoft.com", regionalMetadata.PreferredNetwork);
regionDiscoveryProvider.Clear();
// regionDiscoveryProvider.Clear();
}

[TestMethod]
Expand All @@ -144,10 +165,10 @@ public async Task SuccessfulResponseFromRegionalizedAuthorityAsync()
var regionalizedAuthority = new Uri($"https://{TestConstants.Region}.login.microsoft.com/common/");

Environment.SetEnvironmentVariable(TestConstants.RegionName, TestConstants.Region);
// In the instance discovery flow, TryGetMetadataAsync is always called with a known authority first, then with regionalized.
await _regionDiscoveryProvider.TryGetMetadataAsync(new Uri("https://login.microsoftonline.com/common/"), _testRequestContext).ConfigureAwait(false);
InstanceDiscoveryMetadataEntry regionalMetadata = await _regionDiscoveryProvider.TryGetMetadataAsync(regionalizedAuthority, _testRequestContext).ConfigureAwait(false);

// In the instance discovery flow, GetMetadataAsync is always called with a known authority first, then with regionalized.
await _regionDiscoveryProvider.GetMetadataAsync(new Uri("https://login.microsoftonline.com/common/"), _testRequestContext).ConfigureAwait(false);
InstanceDiscoveryMetadataEntry regionalMetadata = await _regionDiscoveryProvider.GetMetadataAsync(regionalizedAuthority, _testRequestContext).ConfigureAwait(false);

ValidateInstanceMetadata(regionalMetadata);
}
Expand Down Expand Up @@ -193,51 +214,51 @@ protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage
}
}

[TestMethod]
public async Task NoImdsCancellation_UserCancelled_Async()
{
var httpManager = new HttpManager(new SimpleHttpClientFactory());
//[TestMethod]
//public async Task NoImdsCancellation_UserCancelled_Async()
//{
// var httpManager = new HttpManager(new SimpleHttpClientFactory());

IRegionDiscoveryProvider regionDiscoveryProvider = new RegionDiscoveryProvider(
httpManager,
new NetworkCacheMetadataProvider());
// IRegionDiscoveryProvider regionDiscoveryProvider = new RegionDiscoveryProvider(
// httpManager,
// new NetworkCacheMetadataProvider());

_userCancellationTokenSource.Cancel();
// _userCancellationTokenSource.Cancel();

var ex = await AssertException.TaskThrowsAsync<MsalServiceException>(() => regionDiscoveryProvider.TryGetMetadataAsync(
new Uri("https://login.microsoftonline.com/common/"),
_testRequestContext))
.ConfigureAwait(false);
// var ex = await AssertException.TaskThrowsAsync<MsalServiceException>(() => regionDiscoveryProvider.GetMetadataAsync(
// new Uri("https://login.microsoftonline.com/common/"),
// _testRequestContext))
// .ConfigureAwait(false);

Assert.AreEqual(MsalError.RegionDiscoveryFailed, ex.ErrorCode);
regionDiscoveryProvider.Clear();
}
// Assert.AreEqual(MsalError.RegionDiscoveryFailed, ex.ErrorCode);
// regionDiscoveryProvider.Clear();
//}

[TestMethod]
public async Task ImdsTimeout_Async()
{
var httpManager = new HttpManager(new SimpleHttpClientFactory());
//[TestMethod]
//public async Task ImdsTimeout_Async()
//{
// var httpManager = new HttpManager(new SimpleHttpClientFactory());

IRegionDiscoveryProvider regionDiscoveryProvider = new RegionDiscoveryProvider(
httpManager,
new NetworkCacheMetadataProvider(),
imdsCallTimeout: 0);
// IRegionDiscoveryProvider regionDiscoveryProvider = new RegionDiscoveryProvider(
// httpManager,
// new NetworkCacheMetadataProvider(),
// imdsCallTimeout: 0);

var ex = await AssertException.TaskThrowsAsync<MsalServiceException>(() => regionDiscoveryProvider.TryGetMetadataAsync(
new Uri("https://login.microsoftonline.com/common/"),
_testRequestContext))
.ConfigureAwait(false);
// var ex = await AssertException.TaskThrowsAsync<MsalServiceException>(() => regionDiscoveryProvider.GetMetadataAsync(
// new Uri("https://login.microsoftonline.com/common/"),
// _testRequestContext))
// .ConfigureAwait(false);

Assert.AreEqual(MsalError.RegionDiscoveryFailed, ex.ErrorCode);
regionDiscoveryProvider.Clear();
}
// Assert.AreEqual(MsalError.RegionDiscoveryFailed, ex.ErrorCode);
// // regionDiscoveryProvider.Clear();
//}

[TestMethod]
public async Task NonPublicCloudTestAsync()
{
Environment.SetEnvironmentVariable(TestConstants.RegionName, TestConstants.Region);

InstanceDiscoveryMetadataEntry regionalMetadata = await _regionDiscoveryProvider.TryGetMetadataAsync(new Uri("https://login.someenv.com/common/"), _testRequestContext).ConfigureAwait(false);
InstanceDiscoveryMetadataEntry regionalMetadata = await _regionDiscoveryProvider.GetMetadataAsync(new Uri("https://login.someenv.com/common/"), _testRequestContext).ConfigureAwait(false);

Assert.IsNotNull(regionalMetadata);
Assert.AreEqual("centralus.login.someenv.com", regionalMetadata.PreferredNetwork);
Expand All @@ -250,7 +271,7 @@ public async Task ResponseMissingRegionFromLocalImdsAsync()

try
{
InstanceDiscoveryMetadataEntry regionalMetadata = await _regionDiscoveryProvider.TryGetMetadataAsync(new Uri("https://login.microsoftonline.com/common/"), _testRequestContext).ConfigureAwait(false);
InstanceDiscoveryMetadataEntry regionalMetadata = await _regionDiscoveryProvider.GetMetadataAsync(new Uri("https://login.microsoftonline.com/common/"), _testRequestContext).ConfigureAwait(false);

Assert.Fail("Exception should be thrown.");
}
Expand All @@ -269,7 +290,7 @@ public async Task ErrorResponseFromLocalImdsAsync()

try
{
InstanceDiscoveryMetadataEntry regionalMetadata = await _regionDiscoveryProvider.TryGetMetadataAsync(new Uri("https://login.microsoftonline.com/common/"), _testRequestContext).ConfigureAwait(false);
InstanceDiscoveryMetadataEntry regionalMetadata = await _regionDiscoveryProvider.GetMetadataAsync(new Uri("https://login.microsoftonline.com/common/"), _testRequestContext).ConfigureAwait(false);

Assert.Fail("Exception should be thrown.");
}
Expand All @@ -289,7 +310,7 @@ public async Task UpdateApiversionWhenCurrentVersionExpiresForImdsAsync()
ResourceHelper.GetTestResourceRelativePath("local-imds-error-response.json"))), expectedParams: false);
AddMockedResponse(MockHelpers.CreateSuccessResponseMessage(TestConstants.Region), apiVersion: "2020-10-01");

InstanceDiscoveryMetadataEntry regionalMetadata = await _regionDiscoveryProvider.TryGetMetadataAsync(new Uri("https://login.microsoftonline.com/common/"), _testRequestContext).ConfigureAwait(false);
InstanceDiscoveryMetadataEntry regionalMetadata = await _regionDiscoveryProvider.GetMetadataAsync(new Uri("https://login.microsoftonline.com/common/"), _testRequestContext).ConfigureAwait(false);

ValidateInstanceMetadata(regionalMetadata);
}
Expand All @@ -302,7 +323,7 @@ public async Task UpdateApiversionFailsWithEmptyResponseBodyAsync()

try
{
InstanceDiscoveryMetadataEntry regionalMetadata = await _regionDiscoveryProvider.TryGetMetadataAsync(new Uri("https://login.microsoftonline.com/common/"), _testRequestContext).ConfigureAwait(false);
InstanceDiscoveryMetadataEntry regionalMetadata = await _regionDiscoveryProvider.GetMetadataAsync(new Uri("https://login.microsoftonline.com/common/"), _testRequestContext).ConfigureAwait(false);

Assert.Fail("The call should fail with MsalServiceException as the updated version for imds was not returned.");
}
Expand All @@ -323,7 +344,7 @@ public async Task UpdateApiversionFailsWithNoNewestVersionsAsync()

try
{
InstanceDiscoveryMetadataEntry regionalMetadata = await _regionDiscoveryProvider.TryGetMetadataAsync(new Uri("https://login.microsoftonline.com/common/"), _testRequestContext).ConfigureAwait(false);
InstanceDiscoveryMetadataEntry regionalMetadata = await _regionDiscoveryProvider.GetMetadataAsync(new Uri("https://login.microsoftonline.com/common/"), _testRequestContext).ConfigureAwait(false);

Assert.Fail("The call should fail with MsalServiceException as the newest versions were missing in the response.");
}
Expand Down Expand Up @@ -377,13 +398,12 @@ private void ValidateInstanceMetadata(InstanceDiscoveryMetadataEntry entry)
{
InstanceDiscoveryMetadataEntry expectedEntry = new InstanceDiscoveryMetadataEntry()
{
Aliases = new[] { "centralus.login.microsoft.com" },
Aliases = new[] { "centralus.login.microsoft.com", "login.microsoftonline.com" },
PreferredCache = "login.microsoftonline.com",
PreferredNetwork = "centralus.login.microsoft.com"
};

Assert.IsNotNull(entry, "The instance metadata should not be empty.");
Assert.AreEqual(expectedEntry.Aliases.Single(), entry.Aliases.Single());
CollectionAssert.AreEquivalent(expectedEntry.Aliases, entry.Aliases);
Assert.AreEqual(expectedEntry.PreferredCache, entry.PreferredCache);
Assert.AreEqual(expectedEntry.PreferredNetwork, entry.PreferredNetwork);
}
Expand Down
Loading

0 comments on commit 4cb3c10

Please sign in to comment.