File: Resilience\HttpResilienceContextExtensionsTests.cs
Web Access
Project: src\test\Libraries\Microsoft.Extensions.Http.Resilience.Tests\Microsoft.Extensions.Http.Resilience.Tests.csproj (Microsoft.Extensions.Http.Resilience.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System;
using System.Net.Http;
using Microsoft.Extensions.Http.Resilience.Internal;
using Polly;
using Xunit;
 
namespace Microsoft.Extensions.Http.Resilience.Test.Resilience;
 
public class HttpResilienceContextExtensionsTests
{
    [Fact]
    public void GetRequestMessage_ResilienceContextIsNull_Throws()
    {
        ResilienceContext context = null!;
        Assert.Throws<ArgumentNullException>(context.GetRequestMessage);
    }
 
    [Fact]
    public void GetRequestMessage_RequestMessageIsMissing_ReturnsNull()
    {
        var context = ResilienceContextPool.Shared.Get();
 
        Assert.Null(context.GetRequestMessage());
    }
 
    [Fact]
    public void GetRequestMessage_RequestMessageIsNull_ReturnsNull()
    {
        var context = ResilienceContextPool.Shared.Get();
        context.Properties.Set(ResilienceKeys.RequestMessage, null);
 
        Assert.Null(context.GetRequestMessage());
    }
 
    [Fact]
    public void GetRequestMessage_RequestMessageIsPresent_ReturnsRequestMessage()
    {
        var context = ResilienceContextPool.Shared.Get();
        using var request = new HttpRequestMessage();
        context.Properties.Set(ResilienceKeys.RequestMessage, request);
 
        Assert.Same(request, context.GetRequestMessage());
    }
 
    [Fact]
    public void SetRequestMessage_ResilienceContextIsNull_Throws()
    {
        ResilienceContext context = null!;
        using var request = new HttpRequestMessage();
 
        Assert.Throws<ArgumentNullException>(() => context.SetRequestMessage(request));
    }
 
    [Fact]
    public void SetRequestMessage_RequestMessageIsNull_SetsNullRequestMessage()
    {
        var context = ResilienceContextPool.Shared.Get();
        context.SetRequestMessage(null);
 
        Assert.True(context.Properties.TryGetValue(ResilienceKeys.RequestMessage, out HttpRequestMessage? request));
        Assert.Null(request);
    }
 
    [Fact]
    public void SetRequestMessage_RequestMessageIsNotNull_SetsRequestMessage()
    {
        var context = ResilienceContextPool.Shared.Get();
        using var request = new HttpRequestMessage();
        context.SetRequestMessage(request);
 
        Assert.True(context.Properties.TryGetValue(ResilienceKeys.RequestMessage, out HttpRequestMessage? actualRequest));
        Assert.Same(request, actualRequest);
    }
}