示例#1
0
        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);
        }
示例#2
0
        public /* public for test */ InstanceDiscoveryManager(
            IHttpManager httpManager,
            IMatsTelemetryManager telemetryManager,
            bool shouldClearCaches,
            IUserMetadataProvider userMetadataProvider   = null,
            Uri userProvidedInstanceDiscoveryUri         = null,
            IKnownMetadataProvider knownMetadataProvider = null,
            INetworkCacheMetadataProvider networkCacheMetadataProvider = null,
            INetworkMetadataProvider networkMetadataProvider           = null)
        {
            _httpManager      = httpManager ?? throw new ArgumentNullException(nameof(httpManager));
            _telemetryManager = telemetryManager ?? throw new ArgumentNullException(nameof(telemetryManager));

            _userMetadataProvider         = userMetadataProvider;
            _knownMetadataProvider        = knownMetadataProvider ?? new KnownMetadataProvider();
            _networkCacheMetadataProvider = networkCacheMetadataProvider ?? new NetworkCacheMetadataProvider();

            _networkMetadataProvider = networkMetadataProvider ??
                                       new NetworkMetadataProvider(
                _httpManager,
                _telemetryManager,
                _networkCacheMetadataProvider,
                userProvidedInstanceDiscoveryUri);

            if (shouldClearCaches)
            {
                _networkCacheMetadataProvider.Clear();
            }
        }
 public RegionDiscoveryProvider(IHttpManager httpManager, INetworkCacheMetadataProvider networkCacheMetadataProvider = null)
 {
     _httpManager = httpManager;
     _ImdsUri     = new Uri("http://169.254.169.254/metadata/instance/compute/api-version=2019-06-01");
     Headers      = new Dictionary <string, string>();
     Headers.Add("Metadata", "true");
     _networkCacheMetadataProvider = networkCacheMetadataProvider ?? new NetworkCacheMetadataProvider();
 }
示例#4
0
        public RegionDiscoveryProvider(IHttpManager httpManager, INetworkCacheMetadataProvider networkCacheMetadataProvider = null)
        {
            _httpManager = httpManager;

            Headers = new Dictionary <string, string>();
            Headers.Add("Metadata", "true");
            _networkCacheMetadataProvider = networkCacheMetadataProvider ?? new NetworkCacheMetadataProvider();
        }
示例#5
0
 public NetworkMetadataProvider(
     IHttpManager httpManager,
     ITelemetryManager telemetryManager,
     INetworkCacheMetadataProvider networkCacheMetadataProvider)
 {
     _httpManager                  = httpManager;
     _telemetryManager             = telemetryManager;
     _networkCacheMetadataProvider = networkCacheMetadataProvider;
 }
示例#6
0
        private readonly Uri _userProvidedInstanceDiscoveryUri; // can be null

        public NetworkMetadataProvider(
            IHttpManager httpManager,
            INetworkCacheMetadataProvider networkCacheMetadataProvider,
            Uri userProvidedInstanceDiscoveryUri = null)
        {
            _httpManager = httpManager ?? throw new ArgumentNullException(nameof(httpManager));
            _networkCacheMetadataProvider     = networkCacheMetadataProvider ?? throw new ArgumentNullException(nameof(networkCacheMetadataProvider));
            _userProvidedInstanceDiscoveryUri = userProvidedInstanceDiscoveryUri; // can be null
        }
 public RegionDiscoveryProvider(
     IHttpManager httpManager,
     INetworkCacheMetadataProvider networkCacheMetadataProvider = null,
     int imdsCallTimeout = 2000)
 {
     _httpManager = httpManager;
     _networkCacheMetadataProvider = networkCacheMetadataProvider ?? new NetworkCacheMetadataProvider();
     _imdsCallTimeoutMs            = imdsCallTimeout;
 }
        public RegionDiscoveryProvider(IHttpManager httpManager, INetworkCacheMetadataProvider networkCacheMetadataProvider = null)
        {
            _httpManager = httpManager;

            // For information of the current api-version refer: https://docs.microsoft.com/en-us/azure/virtual-machines/windows/instance-metadata-service#versioning
            _ImdsUri = new Uri("http://169.254.169.254/metadata/instance/compute/api-version=2020-06-01");

            Headers = new Dictionary <string, string>();
            Headers.Add("Metadata", "true");
            _networkCacheMetadataProvider = networkCacheMetadataProvider ?? new NetworkCacheMetadataProvider();
        }
示例#9
0
        public RegionDiscoveryProvider(
            IHttpManager httpManager,
            INetworkCacheMetadataProvider networkCacheMetadataProvider = null,
            int imdsCallTimeout = 2000,
            /* for tests only */ bool shouldClearCaches = false)
        {
            _httpManager = httpManager;
            _networkCacheMetadataProvider = networkCacheMetadataProvider ?? new NetworkCacheMetadataProvider();
            _imdsCallTimeoutMs            = imdsCallTimeout;

            if (shouldClearCaches)
            {
                Clear();
            }
        }
示例#10
0
        public async Task NetworkProviderFailures_AreIgnored_Async()
        {
            // Arrange
            _networkCacheMetadataProvider = new NetworkCacheMetadataProvider();
            _knownMetadataProvider.GetMetadata("some_env.com", Enumerable.Empty <string>(), Arg.Any <ICoreLogger>()).Returns(_expectedResult);

            // network fails with something other than invalid_instance exception
            _networkMetadataProvider
            .When(x => x.GetMetadataAsync(Arg.Any <Uri>(), _testRequestContext))
            .Do(x => throw new MsalServiceException("endpoint_busy", "some exception message"));

            // Act
            var actualResult = await _discoveryManager.GetMetadataEntryAsync(
                AuthorityInfo.FromAuthorityUri("https://some_env.com/tid", true),
                _testRequestContext)
                               .ConfigureAwait(false);

            // Assert
            Assert.AreSame(_expectedResult, actualResult, "The known metadata provider should be queried second");
            _knownMetadataProvider.Received(1).GetMetadata("some_env.com", Enumerable.Empty <string>(), Arg.Any <ICoreLogger>());
        }
示例#11
0
        public async Task NetworkProviderFailures_WithNoKnownMetadata_ContinuesWithAuthority_Async()
        {
            // Arrange
            _networkCacheMetadataProvider = new NetworkCacheMetadataProvider();

            // no known metadata
            _knownMetadataProvider.GetMetadata(null, null, Arg.Any <ICoreLogger>()).ReturnsForAnyArgs((InstanceDiscoveryMetadataEntry)null);

            // network fails with something other than invalid_instance exception
            _networkMetadataProvider
            .When(x => x.GetMetadataAsync(Arg.Any <Uri>(), _testRequestContext))
            .Do(x => throw new MsalServiceException("endpoint_busy", "some exception message"));

            // Act
            var actualResult = await _discoveryManager.GetMetadataEntryAsync(
                AuthorityInfo.FromAuthorityUri("https://some_env.com/tid", true),
                _testRequestContext)
                               .ConfigureAwait(false);

            // Assert
            _knownMetadataProvider.Received(1).GetMetadata("some_env.com", Enumerable.Empty <string>(), Arg.Any <ICoreLogger>());
            ValidateSingleEntryMetadata(new Uri("https://some_env.com/tid"), actualResult);
        }
示例#12
0
        public async Task AuthorityValidationFailure_IsRethrown_Async()
        {
            // Arrange
            var validationException = new MsalServiceException(MsalError.InvalidInstance, "authority validation failed");

            _networkCacheMetadataProvider = new NetworkCacheMetadataProvider();

            // network fails with invalid_instance exception
            _networkMetadataProvider
            .When(x => x.GetMetadataAsync(Arg.Any <Uri>(), _testRequestContext))
            .Do(x => throw validationException);

            // Act
            var actualException = await AssertException.TaskThrowsAsync <MsalServiceException>(() =>
                                                                                               _discoveryManager.GetMetadataEntryAsync(
                                                                                                   AuthorityInfo.FromAuthorityUri("https://some_env.com/tid", true),
                                                                                                   _testRequestContext))
                                  .ConfigureAwait(false);

            // Assert
            Assert.AreSame(validationException, actualException);
            _knownMetadataProvider.DidNotReceiveWithAnyArgs();
        }
 public RegionDiscoveryProvider(IHttpManager httpManager, INetworkCacheMetadataProvider networkCacheMetadataProvider = null)
 {
     _httpManager = httpManager;
     _networkCacheMetadataProvider = networkCacheMetadataProvider ?? new NetworkCacheMetadataProvider();
 }