internal ServiceBundle( ApplicationConfiguration config, bool shouldClearCaches = false) { Config = config; DefaultLogger = new MsalLogger( Guid.Empty, config.ClientName, config.ClientVersion, config.LogLevel, config.EnablePiiLogging, config.IsDefaultPlatformLoggingEnabled, config.LoggingCallback); PlatformProxy = config.PlatformProxy ?? PlatformProxyFactory.CreatePlatformProxy(DefaultLogger); HttpManager = config.HttpManager ?? new HttpManager(config.HttpClientFactory); if (config.TelemetryConfig != null) { // This can return null if the device isn't sampled in. There's no need for processing MATS events if we're not going to send them. Mats = TelemetryClient.CreateMats(config, PlatformProxy, config.TelemetryConfig); TelemetryManager = Mats?.TelemetryManager ?? new TelemetryManager(config, PlatformProxy, config.TelemetryCallback); } else { TelemetryManager = new TelemetryManager(config, PlatformProxy, config.TelemetryCallback); } InstanceDiscoveryManager = new InstanceDiscoveryManager(HttpManager, TelemetryManager, shouldClearCaches); WsTrustWebRequestManager = new WsTrustWebRequestManager(HttpManager); AuthorityEndpointResolutionManager = new AuthorityEndpointResolutionManager(this, shouldClearCaches); }
public override void TestInitialize() { base.TestInitialize(); _networkMetadataProvider = Substitute.For <INetworkMetadataProvider>(); _knownMetadataProvider = Substitute.For <IKnownMetadataProvider>(); _networkCacheMetadataProvider = Substitute.For <INetworkCacheMetadataProvider>(); _userMetadataProvider = Substitute.For <IUserMetadataProvider>(); _expectedResult = new InstanceDiscoveryMetadataEntry() { Aliases = new[] { "some_env.com", "some_env2.com" }, PreferredCache = "env", PreferredNetwork = "env" }; _harness = base.CreateTestHarness(); _testRequestContext = new RequestContext(_harness.ServiceBundle, Guid.NewGuid()); _discoveryManager = new InstanceDiscoveryManager( _harness.HttpManager, false, null, null, _knownMetadataProvider, _networkCacheMetadataProvider, _networkMetadataProvider); }
internal ServiceBundle( ApplicationConfiguration config, bool shouldClearCaches = false) { Config = config; ApplicationLogger = new MsalLogger( Guid.Empty, config.ClientName, config.ClientVersion, config.LogLevel, config.EnablePiiLogging, config.IsDefaultPlatformLoggingEnabled, config.LoggingCallback); PlatformProxy = config.PlatformProxy ?? PlatformProxyFactory.CreatePlatformProxy(ApplicationLogger); HttpManager = config.HttpManager ?? new HttpManager( config.HttpClientFactory ?? PlatformProxy.CreateDefaultHttpClientFactory()); HttpTelemetryManager = new HttpTelemetryManager(); if (config.TelemetryConfig != null) { // This can return null if the device isn't sampled in. There's no need for processing MATS events if we're not going to send them. Mats = TelemetryClient.CreateMats(config, PlatformProxy, config.TelemetryConfig); MatsTelemetryManager = Mats?.TelemetryManager ?? new TelemetryManager(config, PlatformProxy, config.TelemetryCallback); } else { MatsTelemetryManager = new TelemetryManager(config, PlatformProxy, config.TelemetryCallback); } InstanceDiscoveryManager = new InstanceDiscoveryManager( HttpManager, shouldClearCaches, config.CustomInstanceDiscoveryMetadata, config.CustomInstanceDiscoveryMetadataUri); WsTrustWebRequestManager = new WsTrustWebRequestManager(HttpManager); ThrottlingManager = SingletonThrottlingManager.GetInstance(); DeviceAuthManager = config.DeviceAuthManagerForTest ?? PlatformProxy.CreateDeviceAuthManager(); if (shouldClearCaches) { AuthorityManager.ClearValidationCache(); } }
public async Task NetworkCacheProvider_IsUsedFirst_Async() { // Arrange INetworkMetadataProvider networkMetadataProvider = new NetworkMetadataProvider( Substitute.For <IHttpManager>(), Substitute.For <IMatsTelemetryManager>(), _networkCacheMetadataProvider); _networkCacheMetadataProvider.GetMetadata("some_env.com", Arg.Any <ICoreLogger>()).Returns(_expectedResult); _discoveryManager = new InstanceDiscoveryManager( _harness.HttpManager, _harness.ServiceBundle.MatsTelemetryManager, false, null, null, _knownMetadataProvider, _networkCacheMetadataProvider, networkMetadataProvider); // Act InstanceDiscoveryMetadataEntry actualResult1 = await _discoveryManager.GetMetadataEntryTryAvoidNetworkAsync( Authority, new[] { "env1", "env2" }, _testRequestContext) .ConfigureAwait(false); _networkCacheMetadataProvider.Received(1).GetMetadata("some_env.com", Arg.Any <ICoreLogger>()); InstanceDiscoveryMetadataEntry actualResult2 = await _discoveryManager.GetMetadataEntryAsync( "https://some_env.com/tid", _testRequestContext) .ConfigureAwait(false); _networkCacheMetadataProvider.Received(2).GetMetadata("some_env.com", Arg.Any <ICoreLogger>()); _networkCacheMetadataProvider.AddMetadata(null, null); // Assert Assert.AreSame(_expectedResult, actualResult1, "The static provider should be queried first"); Assert.AreSame(_expectedResult, actualResult2, "The static provider should be queried first"); }
public async Task NetworkProviderIsCalledLastAsync() { // Arrange _staticMetadataProvider = new StaticMetadataProvider(); _discoveryManager = new InstanceDiscoveryManager( _harness.HttpManager, _harness.ServiceBundle.TelemetryManager, false, _knownMetadataProvider, _staticMetadataProvider, _networkMetadataProvider); var otherEnvs = new[] { "env1", "env2" }; InstanceDiscoveryResponse discoveryResponse = new InstanceDiscoveryResponse { Metadata = new[] { _expectedResult } }; var authorityUri = new Uri(Authority); // No response from the static and known provider _knownMetadataProvider .GetMetadata("some_env.com", otherEnvs) .Returns((InstanceDiscoveryMetadataEntry)null); _networkMetadataProvider .FetchAllDiscoveryMetadataAsync(authorityUri, _testRequestContext) .Returns(discoveryResponse); // Act InstanceDiscoveryMetadataEntry actualResult = await _discoveryManager.GetMetadataEntryTryAvoidNetworkAsync( "https://some_env.com/tid", otherEnvs, _testRequestContext) .ConfigureAwait(false); // Assert Assert.AreSame(_expectedResult, actualResult, "The known metadata provider should be queried second"); _knownMetadataProvider.Received(1).GetMetadata("some_env.com", otherEnvs); _ = _networkMetadataProvider.Received(1).FetchAllDiscoveryMetadataAsync(authorityUri, _testRequestContext); }
public async Task CustomDiscoveryEndpoint_Async() { // Arrange Uri customDiscoveryEndpoint = new Uri("http://some.discovery.endpoint"); _discoveryManager = new InstanceDiscoveryManager( _harness.HttpManager, _harness.ServiceBundle.MatsTelemetryManager, false, null, customDiscoveryEndpoint, _knownMetadataProvider, _networkCacheMetadataProvider, _networkMetadataProvider); var otherEnvs = new[] { "env1", "env2" }; var authorityUri = new Uri(Authority); // No response from the static and known provider _knownMetadataProvider .GetMetadata("some_env.com", otherEnvs, Arg.Any <ICoreLogger>()) .Returns((InstanceDiscoveryMetadataEntry)null); _networkMetadataProvider .GetMetadataAsync(authorityUri, _testRequestContext) .Returns(_expectedResult); // Act InstanceDiscoveryMetadataEntry actualResult = await _discoveryManager.GetMetadataEntryTryAvoidNetworkAsync( "https://some_env.com/tid", otherEnvs, _testRequestContext) .ConfigureAwait(false); // Assert Assert.AreSame(_expectedResult, actualResult, "The known metadata provider should be queried second"); _knownMetadataProvider.Received(1).GetMetadata("some_env.com", otherEnvs, Arg.Any <ICoreLogger>()); await _networkMetadataProvider.Received(1).GetMetadataAsync(authorityUri, _testRequestContext).ConfigureAwait(false); }
internal ServiceBundle( ApplicationConfiguration config, bool shouldClearCaches = false) { Config = config; ApplicationLogger = new MsalLogger( Guid.Empty, config.ClientName, config.ClientVersion, config.LogLevel, config.EnablePiiLogging, config.IsDefaultPlatformLoggingEnabled, config.LoggingCallback); PlatformProxy = config.PlatformProxy ?? PlatformProxyFactory.CreatePlatformProxy(ApplicationLogger); HttpManager = config.HttpManager ?? new HttpManager( config.HttpClientFactory ?? PlatformProxy.CreateDefaultHttpClientFactory()); HttpTelemetryManager = new HttpTelemetryManager(); InstanceDiscoveryManager = new InstanceDiscoveryManager( HttpManager, shouldClearCaches, config.CustomInstanceDiscoveryMetadata, config.CustomInstanceDiscoveryMetadataUri); WsTrustWebRequestManager = new WsTrustWebRequestManager(HttpManager); ThrottlingManager = SingletonThrottlingManager.GetInstance(); DeviceAuthManager = config.DeviceAuthManagerForTest ?? PlatformProxy.CreateDeviceAuthManager(); if (shouldClearCaches) // for test { AuthorityManager.ClearValidationCache(); PoPProviderFactory.Reset(); } }
public async Task UserProvider_TakesPrecedence_OverNetworkProvider_Async() { // Arrange _discoveryManager = new InstanceDiscoveryManager( _harness.HttpManager, _harness.ServiceBundle.TelemetryManager, false, _userMetadataProvider, _knownMetadataProvider, _networkCacheMetadataProvider, _networkMetadataProvider); var otherEnvs = new[] { "env1", "env2" }; _userMetadataProvider.GetMetadataOrThrow("some_env.com", Arg.Any <ICoreLogger>()).Returns(_expectedResult); // Act InstanceDiscoveryMetadataEntry actualResult = await _discoveryManager.GetMetadataEntryTryAvoidNetworkAsync( "https://some_env.com/tid", otherEnvs, _testRequestContext) .ConfigureAwait(false); InstanceDiscoveryMetadataEntry actualResult2 = await _discoveryManager.GetMetadataEntryAsync( "https://some_env.com/tid", _testRequestContext) .ConfigureAwait(false); // Assert Assert.AreSame(_expectedResult, actualResult, "The user metadata provider should be queried second"); Assert.AreSame(_expectedResult, actualResult2, "The user metadata provider should be queried second"); _userMetadataProvider.Received(2).GetMetadataOrThrow("some_env.com", Arg.Any <ICoreLogger>()); _knownMetadataProvider.DidNotReceiveWithAnyArgs().GetMetadata(null, null, null); await _networkMetadataProvider.DidNotReceiveWithAnyArgs().GetMetadataAsync( Arg.Any <Uri>(), Arg.Any <RequestContext>()).ConfigureAwait(false); }
public async Task UserProvider_TakesPrecedence_OverNetworkProvider_Async() { // Arrange _discoveryManager = new InstanceDiscoveryManager( _harness.HttpManager, false, _userMetadataProvider, null, _knownMetadataProvider, _networkCacheMetadataProvider, _networkMetadataProvider); var otherEnvs = new[] { "env1", "env2" }; var authorityUri = new Uri(Authority); // No response from the static and known provider _knownMetadataProvider .GetMetadata("some_env.com", otherEnvs, Arg.Any <ICoreLogger>()) .Returns((InstanceDiscoveryMetadataEntry)null); _networkMetadataProvider .GetMetadataAsync(authorityUri, _testRequestContext) .Returns(_expectedResult); // Act InstanceDiscoveryMetadataEntry actualResult = await _discoveryManager.GetMetadataEntryTryAvoidNetworkAsync( AuthorityInfo.FromAuthorityUri("https://some_env.com/tid", true), otherEnvs, _testRequestContext) .ConfigureAwait(false); // Assert Assert.AreSame(_expectedResult, actualResult, "The known metadata provider should be queried second"); _knownMetadataProvider.Received(1).GetMetadata("some_env.com", otherEnvs, Arg.Any <ICoreLogger>()); await _networkMetadataProvider.Received(1).GetMetadataAsync(authorityUri, _testRequestContext).ConfigureAwait(false); }