Exemple #1
0
    public void Equals_Same_Value_Returns_True()
    {
        var config1 = new ClusterConfig
        {
            ClusterId    = "cluster1",
            Destinations = new Dictionary <string, DestinationConfig>(StringComparer.OrdinalIgnoreCase)
            {
                {
                    "destinationA",
                    new DestinationConfig
                    {
                        Address  = "https://localhost:10000/destA",
                        Health   = "https://localhost:20000/destA",
                        Metadata = new Dictionary <string, string> {
                            { "destA-K1", "destA-V1" }, { "destA-K2", "destA-V2" }
                        }
                    }
                },
                {
                    "destinationB",
                    new DestinationConfig
                    {
                        Address  = "https://localhost:10000/destB",
                        Health   = "https://localhost:20000/destB",
                        Metadata = new Dictionary <string, string> {
                            { "destB-K1", "destB-V1" }, { "destB-K2", "destB-V2" }
                        }
                    }
                }
            },
            HealthCheck = new HealthCheckConfig
            {
                Passive = new PassiveHealthCheckConfig
                {
                    Enabled            = true,
                    Policy             = "FailureRate",
                    ReactivationPeriod = TimeSpan.FromMinutes(5)
                },
                Active = new ActiveHealthCheckConfig
                {
                    Enabled  = true,
                    Interval = TimeSpan.FromSeconds(4),
                    Timeout  = TimeSpan.FromSeconds(6),
                    Policy   = "Any5xxResponse",
                    Path     = "healthCheckPath"
                }
            },
            LoadBalancingPolicy = LoadBalancingPolicies.Random,
            SessionAffinity     = new SessionAffinityConfig
            {
                Enabled         = true,
                FailurePolicy   = "Return503Error",
                Policy          = "Cookie",
                AffinityKeyName = "Key1",
                Cookie          = new SessionAffinityCookieConfig
                {
                    Domain       = "localhost",
                    Expiration   = TimeSpan.FromHours(3),
                    HttpOnly     = true,
                    IsEssential  = true,
                    MaxAge       = TimeSpan.FromDays(1),
                    Path         = "mypath",
                    SameSite     = Microsoft.AspNetCore.Http.SameSiteMode.Strict,
                    SecurePolicy = Microsoft.AspNetCore.Http.CookieSecurePolicy.SameAsRequest
                }
            },
            HttpClient = new HttpClientConfig
            {
                SslProtocols                        = SslProtocols.Tls11 | SslProtocols.Tls12,
                MaxConnectionsPerServer             = 10,
                DangerousAcceptAnyServerCertificate = true,
#if NET
                RequestHeaderEncoding = Encoding.UTF8.WebName
#endif
            },
            HttpRequest = new ForwarderRequestConfig
            {
                ActivityTimeout = TimeSpan.FromSeconds(60),
                Version         = Version.Parse("1.0"),
#if NET
                VersionPolicy = HttpVersionPolicy.RequestVersionExact,
#endif
            },
            Metadata = new Dictionary <string, string> {
                { "cluster1-K1", "cluster1-V1" }, { "cluster1-K2", "cluster1-V2" }
            }
        };

        var config2 = new ClusterConfig
        {
            ClusterId    = "cluster1",
            Destinations = new Dictionary <string, DestinationConfig>(StringComparer.OrdinalIgnoreCase)
            {
                {
                    "destinationA",
                    new DestinationConfig
                    {
                        Address  = "https://localhost:10000/destA",
                        Health   = "https://localhost:20000/destA",
                        Metadata = new Dictionary <string, string> {
                            { "destA-K1", "destA-V1" }, { "destA-K2", "destA-V2" }
                        }
                    }
                },
                {
                    "destinationB",
                    new DestinationConfig
                    {
                        Address  = "https://localhost:10000/destB",
                        Health   = "https://localhost:20000/destB",
                        Metadata = new Dictionary <string, string> {
                            { "destB-K1", "destB-V1" }, { "destB-K2", "destB-V2" }
                        }
                    }
                }
            },
            HealthCheck = new HealthCheckConfig
            {
                Passive = new PassiveHealthCheckConfig
                {
                    Enabled            = true,
                    Policy             = "FailureRate",
                    ReactivationPeriod = TimeSpan.FromMinutes(5)
                },
                Active = new ActiveHealthCheckConfig
                {
                    Enabled  = true,
                    Interval = TimeSpan.FromSeconds(4),
                    Timeout  = TimeSpan.FromSeconds(6),
                    Policy   = "Any5xxResponse",
                    Path     = "healthCheckPath"
                }
            },
            LoadBalancingPolicy = LoadBalancingPolicies.Random,
            SessionAffinity     = new SessionAffinityConfig
            {
                Enabled         = true,
                FailurePolicy   = "Return503Error",
                Policy          = "Cookie",
                AffinityKeyName = "Key1",
                Cookie          = new SessionAffinityCookieConfig
                {
                    Domain       = "localhost",
                    Expiration   = TimeSpan.FromHours(3),
                    HttpOnly     = true,
                    IsEssential  = true,
                    MaxAge       = TimeSpan.FromDays(1),
                    Path         = "mypath",
                    SameSite     = Microsoft.AspNetCore.Http.SameSiteMode.Strict,
                    SecurePolicy = Microsoft.AspNetCore.Http.CookieSecurePolicy.SameAsRequest
                }
            },
            HttpClient = new HttpClientConfig
            {
                SslProtocols                        = SslProtocols.Tls11 | SslProtocols.Tls12,
                MaxConnectionsPerServer             = 10,
                DangerousAcceptAnyServerCertificate = true,
#if NET
                RequestHeaderEncoding = Encoding.UTF8.WebName
#endif
            },
            HttpRequest = new ForwarderRequestConfig
            {
                ActivityTimeout = TimeSpan.FromSeconds(60),
                Version         = Version.Parse("1.0"),
#if NET
                VersionPolicy = HttpVersionPolicy.RequestVersionExact,
#endif
            },
            Metadata = new Dictionary <string, string> {
                { "cluster1-K1", "cluster1-V1" }, { "cluster1-K2", "cluster1-V2" }
            }
        };

        var config3 = config1 with {
        };                              // Clone

        Assert.True(config1.Equals(config2));
        Assert.True(config1.Equals(config3));
        Assert.Equal(config1.GetHashCode(), config2.GetHashCode());
        Assert.Equal(config1.GetHashCode(), config3.GetHashCode());
    }