aspnetcore/test/Microsoft.AspNetCore.RangeH.../RangeHelperTests.cs

110 lines
3.6 KiB
C#

// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using Microsoft.AspNetCore.Http;
using Microsoft.Net.Http.Headers;
using Xunit;
namespace Microsoft.AspNetCore.Internal
{
public class RangeHelperTests
{
[Theory]
[InlineData(1, 2)]
[InlineData(2, 3)]
public void NormalizeRange_ReturnsNullWhenRangeStartEqualsOrGreaterThanLength(long start, long end)
{
// Arrange & Act
var normalizedRange = RangeHelper.NormalizeRange(new RangeItemHeaderValue(start, end), 1);
// Assert
Assert.Null(normalizedRange);
}
[Fact]
public void NormalizeRange_ReturnsNullWhenRangeEndEqualsZero()
{
// Arrange & Act
var normalizedRange = RangeHelper.NormalizeRange(new RangeItemHeaderValue(null, 0), 1);
// Assert
Assert.Null(normalizedRange);
}
[Theory]
[InlineData(0, null, 0, 2)]
[InlineData(0, 0, 0, 0)]
public void NormalizeRange_ReturnsNormalizedRange(long? start, long? end, long? normalizedStart, long? normalizedEnd)
{
// Arrange & Act
var normalizedRange = RangeHelper.NormalizeRange(new RangeItemHeaderValue(start, end), 3);
// Assert
Assert.Equal(normalizedStart, normalizedRange.From);
Assert.Equal(normalizedEnd, normalizedRange.To);
}
[Fact]
public void NormalizeRange_ReturnsRangeWithNoChange()
{
// Arrange & Act
var normalizedRange = RangeHelper.NormalizeRange(new RangeItemHeaderValue(1, 3), 4);
// Assert
Assert.Equal(1, normalizedRange.From);
Assert.Equal(3, normalizedRange.To);
}
[Theory]
[InlineData(null)]
[InlineData("")]
public void ParseRange_ReturnsNullWhenRangeHeaderNotProvided(string range)
{
// Arrange
var httpContext = new DefaultHttpContext();
httpContext.Request.Headers[HeaderNames.Range] = range;
// Act
var (isRangeRequest, parsedRangeResult) = RangeHelper.ParseRange(httpContext, httpContext.Request.GetTypedHeaders(), 10);
// Assert
Assert.False(isRangeRequest);
Assert.Null(parsedRangeResult);
}
[Theory]
[InlineData("1-2, 3-4")]
[InlineData("1-2, ")]
public void ParseRange_ReturnsNullWhenMultipleRangesProvidedInRangeHeader(string range)
{
// Arrange
var httpContext = new DefaultHttpContext();
httpContext.Request.Headers[HeaderNames.Range] = range;
// Act
var (isRangeRequest, parsedRangeResult) = RangeHelper.ParseRange(httpContext, httpContext.Request.GetTypedHeaders(), 10);
// Assert
Assert.False(isRangeRequest);
Assert.Null(parsedRangeResult);
}
[Fact]
public void ParseRange_ReturnsSingleRangeWhenInputValid()
{
// Arrange
var httpContext = new DefaultHttpContext();
var range = new RangeHeaderValue(1, 2);
httpContext.Request.Headers[HeaderNames.Range] = range.ToString();
// Act
var (isRangeRequest, parsedRange) = RangeHelper.ParseRange(httpContext, httpContext.Request.GetTypedHeaders(), 4);
// Assert
Assert.True(isRangeRequest);
Assert.Equal(1, parsedRange.From);
Assert.Equal(2, parsedRange.To);
}
}
}