feat(ads/seo/release): v1.2.0 with live Google Ads, isolated ad profile, ads.txt, and SEO/AEO/GEO optimization
This commit is contained in:
parent
a88aafa1e5
commit
0e568f1f0a
975 changed files with 130593 additions and 16783 deletions
70
tests/Paca.Tests/Core/MediaIntegrityVerifierGateTests.cs
Normal file
70
tests/Paca.Tests/Core/MediaIntegrityVerifierGateTests.cs
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using Paca.Mobile.Core;
|
||||
using Xunit;
|
||||
|
||||
namespace Paca.Tests.Core;
|
||||
|
||||
public class MediaIntegrityVerifierGateTests
|
||||
{
|
||||
[Fact]
|
||||
public void Gate273_MediaIntegrityVerifier_IdentifiesValidMp4()
|
||||
{
|
||||
// MP4 signature: 00 00 00 18 66 74 79 70 (ftyp) 69 73 6F 6D (isom)
|
||||
var mp4Bytes = new byte[] {
|
||||
0x00, 0x00, 0x00, 0x18, 0x66, 0x74, 0x79, 0x70,
|
||||
0x69, 0x73, 0x6F, 0x6D, 0x00, 0x00, 0x02, 0x00,
|
||||
0x69, 0x73, 0x6F, 0x6D, 0x69, 0x73, 0x6F, 0x32,
|
||||
0x00, 0x00, 0x00, 0x08, 0x6D, 0x6F, 0x6F, 0x76 // moov
|
||||
};
|
||||
|
||||
var result = MediaIntegrityVerifier.Verify(mp4Bytes);
|
||||
|
||||
Assert.Equal(MediaIntegrityStatus.Healthy, result.Status);
|
||||
Assert.Equal("mp4", result.DetectedFormat);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Gate274_MediaIntegrityVerifier_IdentifiesValidWebmAndMp3()
|
||||
{
|
||||
// EBML (WebM/MKV): 1A 45 DF A3
|
||||
var webmBytes = new byte[] { 0x1A, 0x45, 0xDF, 0xA3, 0x9F, 0x42, 0x86, 0x81 };
|
||||
var webmResult = MediaIntegrityVerifier.Verify(webmBytes);
|
||||
Assert.Equal(MediaIntegrityStatus.Healthy, webmResult.Status);
|
||||
Assert.Equal("webm", webmResult.DetectedFormat);
|
||||
|
||||
// MP3 ID3: 49 44 33 (ID3)
|
||||
var mp3Bytes = new byte[] { 0x49, 0x44, 0x33, 0x03, 0x00, 0x00, 0x00, 0x00 };
|
||||
var mp3Result = MediaIntegrityVerifier.Verify(mp3Bytes);
|
||||
Assert.Equal(MediaIntegrityStatus.Healthy, mp3Result.Status);
|
||||
Assert.Equal("mp3", mp3Result.DetectedFormat);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Gate275_MediaIntegrityVerifier_DetectsZeroByteAndTruncatedFiles()
|
||||
{
|
||||
var zeroResult = MediaIntegrityVerifier.Verify(Array.Empty<byte>());
|
||||
Assert.Equal(MediaIntegrityStatus.FatalCorruption, zeroResult.Status);
|
||||
Assert.Equal(CorruptionReason.ZeroByteFile, zeroResult.Reason);
|
||||
|
||||
var truncated = new byte[] { 0x00, 0x00, 0x00 };
|
||||
var truncResult = MediaIntegrityVerifier.Verify(truncated);
|
||||
Assert.Equal(MediaIntegrityStatus.FatalCorruption, truncResult.Status);
|
||||
Assert.Equal(CorruptionReason.TruncatedHeader, truncResult.Reason);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Gate276_MediaIntegrityVerifier_SuggestsRemuxRecovery_ForMissingMoovAtom()
|
||||
{
|
||||
// MP4 with ftyp and mdat but no moov atom (interrupted recording/mux)
|
||||
var brokenMp4 = new byte[] {
|
||||
0x00, 0x00, 0x00, 0x18, 0x66, 0x74, 0x79, 0x70,
|
||||
0x69, 0x73, 0x6F, 0x6D, 0x00, 0x00, 0x02, 0x00,
|
||||
0x00, 0x00, 0x00, 0x08, 0x6D, 0x64, 0x61, 0x74 // mdat (no moov)
|
||||
};
|
||||
|
||||
var result = MediaIntegrityVerifier.Verify(brokenMp4);
|
||||
Assert.Equal(MediaIntegrityStatus.RecoverableByRemux, result.Status);
|
||||
Assert.Equal(CorruptionReason.MissingMoovAtom, result.Reason);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue