releases/tests/Paca.Tests/Core/MediaStreamingTransferGateTests.cs

74 lines
2.5 KiB
C#

using System;
using Paca.Mobile.Core;
using Xunit;
namespace Paca.Tests.Core;
public class MediaStreamingTransferGateTests
{
[Fact]
public void Gate353_MediaStreamingTransfer_ParsesExplicitRange_Correctly()
{
var totalSize = 10_000L;
var rangeHeader = "bytes=1000-1999";
var range = MediaStreamingTransferEngine.ParseRangeHeader(rangeHeader, totalSize);
Assert.True(range.IsPartial);
Assert.Equal(1000L, range.Start);
Assert.Equal(1999L, range.End);
Assert.Equal(1000L, range.ContentLength);
Assert.Equal("bytes 1000-1999/10000", range.ContentRangeHeader);
}
[Fact]
public void Gate354_MediaStreamingTransfer_ParsesOpenEndedRange_ToEOF()
{
var totalSize = 5_000L;
var rangeHeader = "bytes=2000-";
var range = MediaStreamingTransferEngine.ParseRangeHeader(rangeHeader, totalSize);
Assert.True(range.IsPartial);
Assert.Equal(2000L, range.Start);
Assert.Equal(4999L, range.End);
Assert.Equal(3000L, range.ContentLength);
Assert.Equal("bytes 2000-4999/5000", range.ContentRangeHeader);
}
[Fact]
public void Gate355_MediaStreamingTransfer_ComputesProgressAndSpeed_Accurately()
{
// 50 MB transferred out of 100 MB in 5.0 seconds
var total = 100 * 1024 * 1024L;
var transferred = 50 * 1024 * 1024L;
var elapsed = 5.0;
var progress = MediaStreamingTransferEngine.ComputeProgress("stream-1", transferred, total, elapsed);
Assert.Equal("stream-1", progress.TransferId);
Assert.Equal(50.0, progress.ProgressPercent);
Assert.Equal(10 * 1024 * 1024.0, progress.TransferRateBytesPerSec); // 10 MB/s
Assert.Equal(10.0, progress.TransferRateMbPerSec);
}
[Fact]
public void Gate356_MediaStreamingTransfer_HandlesInvalidRange_WithFullFallback()
{
var totalSize = 2_000L;
// Invalid range exceeding total size
var invalidRange = "bytes=5000-6000";
var result = MediaStreamingTransferEngine.ParseRangeHeader(invalidRange, totalSize);
Assert.False(result.IsPartial);
Assert.Equal(0L, result.Start);
Assert.Equal(1999L, result.End);
Assert.Equal(2000L, result.ContentLength);
// Null or empty range
var nullResult = MediaStreamingTransferEngine.ParseRangeHeader(null, totalSize);
Assert.False(nullResult.IsPartial);
Assert.Equal(2000L, nullResult.ContentLength);
}
}