Exemple #1
0
    public void GetBaseAddress(string value)
    {
        // Arrange
        this.SetBaseAddress(value);

        // Act
        var baseAddressProvider = new EcsTaskMetadataBaseAddressProvider();
        var baseAddress         = baseAddressProvider.BaseAddress;

        // Assert
        Assert.Equal(new Uri("http://localhost/v3/", UriKind.Absolute), baseAddress);
    }
Exemple #2
0
    /// <summary>
    ///     Registers an ECS Task Metadata Endpoint client factory and its dependencies if a supported ECS environment
    ///     is detected.
    /// </summary>
    /// <param name="services">The collection of service descriptors.</param>
    public static bool AddEcsTaskMetadataClientFactory(this IServiceCollection services)
    {
        IEcsTaskMetadataBaseAddressProvider baseAddressProvider;

        try
        {
            baseAddressProvider = new EcsTaskMetadataBaseAddressProvider();
        }
        catch (InvalidOperationException)
        {
            return(false);
        }

        services.AddSingleton(baseAddressProvider);
        services.AddSingleton <IEcsTaskMetadataSerializerProvider, EcsTaskMetadataSerializerProvider>();

        // The circuit breaker policy is stateful, and it's necessary to use a shared instance.
        var circuitBreaker = HttpPolicyExtensions
                             .HandleTransientHttpError()
                             .CircuitBreakerAsync(5, TimeSpan.FromSeconds(60), (response, timespan, context) =>
        {
            var logger = context.GetLogger();
            if (logger != null)
            {
                LogCircuitBreaker(logger, null);
            }
        }, (context) => { });

        services
        .AddHttpClient <IEcsTaskMetadataClient, EcsTaskMetadataClient>()
        .ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler()
        {
            AllowAutoRedirect     = false,
            UseCookies            = false,
            UseDefaultCredentials = false,
            UseProxy = false,
        })
        .AddTransientHttpErrorPolicy(policy => policy.WaitAndRetryAsync(3, _ => TimeSpan.FromMilliseconds(250), (response, timespan, retryCount, context) =>
        {
            var logger = context.GetLogger();
            if (logger != null)
            {
                LogRetry(logger, timespan.TotalMilliseconds, retryCount, null);
            }
        }))
        .AddPolicyHandler(circuitBreaker);

        services.AddSingleton <IEcsTaskMetadataClientFactory, EcsTaskMetadataClientFactory>();
        return(true);
    }
Exemple #3
0
    public void InstantiateThrowsError(string value, string messageFragment)
    {
        // Arrange
        if (value == null)
        {
            this.ResetBaseAddress();
        }
        else
        {
            this.SetBaseAddress(value);
        }

        // Act
        var exception = Record.Exception(() =>
        {
            var provider = new EcsTaskMetadataBaseAddressProvider();
        });

        // Assert
        Assert.NotNull(exception);
        var invalidOperationException = Assert.IsType <InvalidOperationException>(exception);

        Assert.Contains(messageFragment, invalidOperationException.Message, StringComparison.Ordinal);
    }