// 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 System; using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure; using Xunit; namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests { public class MinDataRateTests { [Theory] [InlineData(double.Epsilon)] [InlineData(double.MaxValue)] public void BytesPerSecondValid(double value) { Assert.Equal(value, new MinDataRate(bytesPerSecond: value, gracePeriod: TimeSpan.MaxValue).BytesPerSecond); } [Theory] [InlineData(double.MinValue)] [InlineData(-double.Epsilon)] [InlineData(0)] public void BytesPerSecondInvalid(double value) { var exception = Assert.Throws(() => new MinDataRate(bytesPerSecond: value, gracePeriod: TimeSpan.MaxValue)); Assert.Equal("bytesPerSecond", exception.ParamName); Assert.StartsWith(CoreStrings.PositiveNumberOrNullMinDataRateRequired, exception.Message); } [Theory] [MemberData(nameof(GracePeriodValidData))] public void GracePeriodValid(TimeSpan value) { Assert.Equal(value, new MinDataRate(bytesPerSecond: 1, gracePeriod: value).GracePeriod); } [Theory] [MemberData(nameof(GracePeriodInvalidData))] public void GracePeriodInvalid(TimeSpan value) { var exception = Assert.Throws(() => new MinDataRate(bytesPerSecond: 1, gracePeriod: value)); Assert.Equal("gracePeriod", exception.ParamName); Assert.StartsWith(CoreStrings.FormatMinimumGracePeriodRequired(Heartbeat.Interval.TotalSeconds), exception.Message); } public static TheoryData GracePeriodValidData => new TheoryData { Heartbeat.Interval + TimeSpan.FromTicks(1), TimeSpan.MaxValue }; public static TheoryData GracePeriodInvalidData => new TheoryData { TimeSpan.MinValue, TimeSpan.FromTicks(-1), TimeSpan.Zero, Heartbeat.Interval }; } }