public void AffinitizedRequest_AffinityKeyIsNotExtracted_SetKeyOnResponse()
    {
        var policy                      = new CustomHeaderSessionAffinityPolicy(AffinityTestHelper.GetDataProtector().Object, AffinityTestHelper.GetLogger <CustomHeaderSessionAffinityPolicy>().Object);
        var context                     = new DefaultHttpContext();
        var chosenDestination           = _destinations[1];
        var expectedAffinityHeaderValue = chosenDestination.DestinationId.ToUTF8BytesInBase64();

        policy.AffinitizeResponse(context, new ClusterState("cluster"), _defaultOptions, chosenDestination);

        Assert.True(context.Response.Headers.ContainsKey(AffinityHeaderName));
        Assert.Equal(expectedAffinityHeaderValue, context.Response.Headers[AffinityHeaderName]);
    }
コード例 #2
0
    public void AffinitizeRequest_CookieConfigSpecified_UseIt()
    {
        var policy = new CookieSessionAffinityPolicy(
            AffinityTestHelper.GetDataProtector().Object,
            new ManualClock(),
            AffinityTestHelper.GetLogger <CookieSessionAffinityPolicy>().Object);
        var context = new DefaultHttpContext();

        policy.AffinitizeResponse(context, new ClusterState("cluster"), _config, _destinations[1]);

        var affinityCookieHeader = context.Response.Headers["Set-Cookie"];

        Assert.Equal("My.Affinity=ZGVzdC1C; max-age=3600; domain=mydomain.my; path=/some; secure; samesite=lax", affinityCookieHeader);
    }
    public void FindAffinitizedDestination_AffinityKeyIsNotSetOnRequest_ReturnKeyNotSet()
    {
        var policy = new CustomHeaderSessionAffinityPolicy(AffinityTestHelper.GetDataProtector().Object, AffinityTestHelper.GetLogger <CustomHeaderSessionAffinityPolicy>().Object);

        Assert.Equal(SessionAffinityConstants.Policies.CustomHeader, policy.Name);

        var context = new DefaultHttpContext();

        context.Request.Headers["SomeHeader"] = new[] { "SomeValue" };
        var cluster = new ClusterState("cluster");

        var affinityResult = policy.FindAffinitizedDestinations(context, cluster, _defaultOptions, _destinations);

        Assert.Equal(AffinityStatus.AffinityKeyNotSet, affinityResult.Status);
        Assert.Null(affinityResult.Destinations);
    }
    public void FindAffinitizedDestination_AffinityKeyIsSetOnRequest_Success()
    {
        var policy  = new CustomHeaderSessionAffinityPolicy(AffinityTestHelper.GetDataProtector().Object, AffinityTestHelper.GetLogger <CustomHeaderSessionAffinityPolicy>().Object);
        var context = new DefaultHttpContext();

        context.Request.Headers["SomeHeader"] = new[] { "SomeValue" };
        var affinitizedDestination = _destinations[1];

        context.Request.Headers[AffinityHeaderName] = new[] { affinitizedDestination.DestinationId.ToUTF8BytesInBase64() };
        var cluster = new ClusterState("cluster");

        var affinityResult = policy.FindAffinitizedDestinations(context, cluster, _defaultOptions, _destinations);

        Assert.Equal(AffinityStatus.OK, affinityResult.Status);
        Assert.Equal(1, affinityResult.Destinations.Count);
        Assert.Same(affinitizedDestination, affinityResult.Destinations[0]);
    }
コード例 #5
0
    public void FindAffinitizedDestination_AffinityKeyIsSetOnRequest_Success()
    {
        var policy = new CookieSessionAffinityPolicy(
            AffinityTestHelper.GetDataProtector().Object,
            new ManualClock(),
            AffinityTestHelper.GetLogger <CookieSessionAffinityPolicy>().Object);
        var context = new DefaultHttpContext();
        var affinitizedDestination = _destinations[1];

        context.Request.Headers["Cookie"] = GetCookieWithAffinity(affinitizedDestination);
        var cluster = new ClusterState("cluster");

        var affinityResult = policy.FindAffinitizedDestinations(context, cluster, _config, _destinations);

        Assert.Equal(AffinityStatus.OK, affinityResult.Status);
        Assert.Equal(1, affinityResult.Destinations.Count);
        Assert.Same(affinitizedDestination, affinityResult.Destinations[0]);
    }
コード例 #6
0
    public void FindAffinitizedDestination_AffinityKeyIsNotSetOnRequest_ReturnKeyNotSet()
    {
        var policy = new CookieSessionAffinityPolicy(
            AffinityTestHelper.GetDataProtector().Object,
            new ManualClock(),
            AffinityTestHelper.GetLogger <CookieSessionAffinityPolicy>().Object);

        Assert.Equal(SessionAffinityConstants.Policies.Cookie, policy.Name);

        var context = new DefaultHttpContext();

        context.Request.Headers["Cookie"] = new[] { $"Some-Cookie=ZZZ" };
        var cluster = new ClusterState("cluster");

        var affinityResult = policy.FindAffinitizedDestinations(context, cluster, _config, _destinations);

        Assert.Equal(AffinityStatus.AffinityKeyNotSet, affinityResult.Status);
        Assert.Null(affinityResult.Destinations);
    }
    public void AffinitizedRequest_AffinityKeyIsExtracted_DoNothing()
    {
        var policy  = new CustomHeaderSessionAffinityPolicy(AffinityTestHelper.GetDataProtector().Object, AffinityTestHelper.GetLogger <CustomHeaderSessionAffinityPolicy>().Object);
        var context = new DefaultHttpContext();

        context.Request.Headers["SomeHeader"] = new[] { "SomeValue" };
        var affinitizedDestination = _destinations[1];

        context.Request.Headers[AffinityHeaderName] = new[] { affinitizedDestination.DestinationId.ToUTF8BytesInBase64() };
        var cluster = new ClusterState("cluster");

        var affinityResult = policy.FindAffinitizedDestinations(context, cluster, _defaultOptions, _destinations);

        Assert.Equal(AffinityStatus.OK, affinityResult.Status);

        policy.AffinitizeResponse(context, cluster, _defaultOptions, affinitizedDestination);

        Assert.False(context.Response.Headers.ContainsKey(AffinityHeaderName));
    }
コード例 #8
0
    public void AffinitizedRequest_AffinityKeyIsExtracted_DoNothing()
    {
        var policy = new CookieSessionAffinityPolicy(
            AffinityTestHelper.GetDataProtector().Object,
            new ManualClock(),
            AffinityTestHelper.GetLogger <CookieSessionAffinityPolicy>().Object);
        var context = new DefaultHttpContext();
        var affinitizedDestination = _destinations[0];

        context.Request.Headers["Cookie"] = GetCookieWithAffinity(affinitizedDestination);
        var cluster = new ClusterState("cluster");

        var affinityResult = policy.FindAffinitizedDestinations(context, cluster, _config, _destinations);

        Assert.Equal(AffinityStatus.OK, affinityResult.Status);

        policy.AffinitizeResponse(context, cluster, _config, affinitizedDestination);

        Assert.False(context.Response.Headers.ContainsKey("Cookie"));
    }