74 lines
2.5 KiB
C#
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);
|
|
}
|
|
}
|