Exemple #1
0
        public async Task <InstanceDiscoveryMetadataEntry> GetMetadataEntryTryAvoidNetworkAsync(
            string authority,
            IEnumerable <string> existingEnvironmentsInCache,
            RequestContext requestContext)
        {
            AuthorityType type         = Authority.GetAuthorityType(authority);
            Uri           authorityUri = new Uri(authority);
            string        environment  = authorityUri.Host;

            switch (type)
            {
            case AuthorityType.Aad:

                return
                    (_userMetadataProvider?.GetMetadataOrThrow(environment, requestContext.Logger) ??     // if user provided metadata but entry is not found, fail fast
                     _networkCacheMetadataProvider.GetMetadata(environment, requestContext.Logger) ??
                     _knownMetadataProvider.GetMetadata(environment, existingEnvironmentsInCache, requestContext.Logger) ??
                     await GetMetadataEntryAsync(authority, requestContext).ConfigureAwait(false));

            case AuthorityType.Adfs:
            case AuthorityType.B2C:

                requestContext.Logger.Info("[Instance Discovery] Skipping Instance discovery for non-AAD authority");
                return(await GetMetadataEntryAsync(authority, requestContext).ConfigureAwait(false));

            default:
                throw new InvalidOperationException("Unexpected authority type " + type);
            }
        }
Exemple #2
0
        public async Task <InstanceDiscoveryMetadataEntry> GetMetadataEntryTryAvoidNetworkAsync(
            AuthorityInfo authorityInfo,
            IEnumerable <string> existingEnvironmentsInCache,
            RequestContext requestContext)
        {
            string environment = authorityInfo.Host;

            if (authorityInfo.IsInstanceDiscoverySupported)
            {
                return
                    (_userMetadataProvider?.GetMetadataOrThrow(environment, requestContext.Logger) ?? // if user provided metadata but entry is not found, fail fast
                     await _regionDiscoveryProvider.GetMetadataAsync(new Uri(authorityInfo.CanonicalAuthority), requestContext).ConfigureAwait(false) ??
                     _networkCacheMetadataProvider.GetMetadata(environment, requestContext.Logger) ??
                     _knownMetadataProvider.GetMetadata(environment, existingEnvironmentsInCache, requestContext.Logger) ??
                     await GetMetadataEntryAsync(authorityInfo, requestContext).ConfigureAwait(false));
            }
            else
            {
                requestContext.Logger.Info($"Skipping Instance discovery for {authorityInfo.AuthorityType} authority");
                return(await GetMetadataEntryAsync(authorityInfo, requestContext).ConfigureAwait(false));
            }
        }
Exemple #3
0
        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);
        }