private Mock <IEnvironmentVariableRetriever> BuildEnvironmentVariableMock(
            DefaultConfigurationMode?awsDefaultModeValue = null)
        {
            var mockEnvironmentVariableProvider = new Mock <IEnvironmentVariableRetriever>();

            mockEnvironmentVariableProvider
            .Setup(x => x.GetEnvironmentVariable(It.Is <string>(e => e == "AWS_DEFAULTS_MODE")))
            .Returns(awsDefaultModeValue?.ToString());

            return(mockEnvironmentVariableProvider);
        }
Пример #2
0
        /// <inheritdoc cref="IDefaultConfigurationProvider"/>
        public IDefaultConfiguration GetDefaultConfiguration(
            RegionEndpoint clientRegion,
            DefaultConfigurationMode?requestedConfigurationMode = null)
        {
            var defaultConfigurationModeName =
                // 1) requested mode
                requestedConfigurationMode?.ToString() ??
                // 2) try to get from environment variable
                _environmentVariableRetriever.GetEnvironmentVariable(AWS_DEFAULTS_MODE_ENVIRONMENT_VARIABLE) ??
                // 3) try to get from shared config/credential file
                FallbackInternalConfigurationFactory.DefaultConfigurationModeName ??
                // 4) fallback to 'Legacy'
                DefaultConfigurationMode.Legacy.ToString();

            Logger
            .GetLogger(GetType())
            .InfoFormat(
                $"Resolved {nameof(DefaultConfigurationMode)} for {nameof(RegionEndpoint)} [{clientRegion?.SystemName}] to [{defaultConfigurationModeName}].");

            try
            {
                var mode =
                    (DefaultConfigurationMode)
                    Enum.Parse(typeof(DefaultConfigurationMode), defaultConfigurationModeName, ignoreCase: true);

                if (mode == DefaultConfigurationMode.Auto)
                {
                    mode = _defaultConfigurationAutoModeResolver.Resolve(clientRegion, () => EC2InstanceMetadata.Region);
                }

                // save resolved values to cache
                return(_availableConfigurations.First(x => x.Name == mode));
            }
            catch (Exception)
            {
                throw new AmazonClientException(
                          $"Failed to find requested Default Configuration Mode '{defaultConfigurationModeName}'.  " +
                          $"Valid values are {string.Join(",", Enum.GetNames(typeof(DefaultConfigurationMode)))}");
            }
        }
        public void OrderOfOperationsTest(
            DefaultConfigurationMode?clientConfigDefaultMode,
            DefaultConfigurationMode?environmentVariableDefaultMode,
            DefaultConfigurationMode?sharedConfigDefaultMode,
            DefaultConfigurationMode expectedDefaultMode)
        {
            // ARRANGE
            var mockEnvironmentVariableProvider = BuildEnvironmentVariableMock(environmentVariableDefaultMode);
            var mockAutoModeResolver            = new Mock <IDefaultConfigurationAutoModeResolver>();

            var clientConfig =
                new TestClientConfig(
                    new DefaultConfigurationProvider(
                        mockEnvironmentVariableProvider.Object,
                        mockAutoModeResolver.Object,
                        _fakeDefaultConfigurations));

            if (clientConfigDefaultMode.HasValue)
            {
                clientConfig.DefaultConfigurationMode = clientConfigDefaultMode.Value;
            }

            var sharedConfigFile =
                "[default]\r\n" +
                $"defaults_mode={sharedConfigDefaultMode?.ToString()}";

            TimeSpan?actualTimeout;

            using (new FallbackFactoryTest.FallbackFactoryTestFixture(sharedConfigFile, "default"))
            {
                // ACT
                actualTimeout = clientConfig.Timeout;
            }

            // ASSERT
            var expectedMode = _fakeDefaultConfigurations.First(x => x.Name == expectedDefaultMode);

            Assert.AreEqual(expectedMode.TimeToFirstByteTimeout, actualTimeout);
        }