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

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);
}
}