61 lines
2 KiB
C#
61 lines
2 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Text;
|
|
using Paca.Mobile.Core;
|
|
using Xunit;
|
|
|
|
namespace Paca.Tests.Core;
|
|
|
|
public class MediaChecksumVerifierGateTests
|
|
{
|
|
[Fact]
|
|
public void Gate369_MediaChecksumVerifier_ComputesSha256StreamHash_Correctly()
|
|
{
|
|
// "Hello Paca Media!" in UTF-8
|
|
var bytes = Encoding.UTF8.GetBytes("Hello Paca Media!");
|
|
using var stream = new MemoryStream(bytes);
|
|
|
|
var sha256 = MediaChecksumVerifier.ComputeHash(stream, ChecksumAlgorithm.Sha256);
|
|
|
|
// Known SHA-256 for "Hello Paca Media!"
|
|
Assert.StartsWith("f14b916b33d6270011bcd23995bf4d4a2ae0199ec", sha256.ToLowerInvariant());
|
|
}
|
|
|
|
[Fact]
|
|
public void Gate370_MediaChecksumVerifier_ComputesMd5StreamHash_Correctly()
|
|
{
|
|
var bytes = Encoding.UTF8.GetBytes("PacaDownloadEngine");
|
|
using var stream = new MemoryStream(bytes);
|
|
|
|
var md5 = MediaChecksumVerifier.ComputeHash(stream, ChecksumAlgorithm.Md5);
|
|
|
|
// Known MD5 for "PacaDownloadEngine"
|
|
Assert.Equal("1d95ac097022b5c556252b43a2f5929a", md5.ToLowerInvariant());
|
|
}
|
|
|
|
[Fact]
|
|
public void Gate371_MediaChecksumVerifier_VerifiesEtagWithQuotesAndWeakPrefix()
|
|
{
|
|
var computed = "93700ce818c3937ec89f2a00908eb82f";
|
|
|
|
// Quoted ETag: "\"93700ce818c3937ec89f2a00908eb82f\""
|
|
Assert.True(MediaChecksumVerifier.VerifyHash(computed, "\"93700ce818c3937ec89f2a00908eb82f\""));
|
|
|
|
// Weak ETag: "W/\"93700CE818C3937EC89F2A00908EB82F\""
|
|
Assert.True(MediaChecksumVerifier.VerifyHash(computed, "W/\"93700CE818C3937EC89F2A00908EB82F\""));
|
|
}
|
|
|
|
[Fact]
|
|
public void Gate372_MediaChecksumVerifier_DetectsMismatchAndGeneratesReport()
|
|
{
|
|
var computed = "aaaa1111";
|
|
var expected = "bbbb2222";
|
|
|
|
var result = MediaChecksumVerifier.EvaluateIntegrity("file.mp4", computed, expected);
|
|
|
|
Assert.False(result.IsIntact);
|
|
Assert.Equal("aaaa1111", result.ComputedHash);
|
|
Assert.Equal("bbbb2222", result.ExpectedHash);
|
|
Assert.Contains("해시 불일치", result.StatusMessage);
|
|
}
|
|
}
|