using FluentAssertions; using StellaOps.BinaryIndex.FixIndex.Models; using StellaOps.BinaryIndex.FixIndex.Parsers; namespace StellaOps.BinaryIndex.FixIndex.Tests.Parsers; public sealed class PatchHeaderParserTests { [Fact] public void ParsePatches_SkipsHeadersWithInvalidEncoding() { var options = new FixIndexParserOptions { PatchHeaderMaxLines = 3, PatchHeaderMaxChars = 200, PatchHeaderExcerptMaxLength = 120 }; var parser = new PatchHeaderParser(options, new FixedTimeProvider(DateTimeOffset.UnixEpoch)); var patches = new[] { ("CVE-2024-9999.patch", "Binary\0Content", "sha256") }; var results = parser.ParsePatches(patches, "debian", "bookworm", "pkg", "1.0.0").ToList(); results.Should().BeEmpty(); } [Fact] public void ParsePatches_RespectsLimitsAndUsesFixedTime() { var line1 = "Description: Fix CVE-2024-3333"; var line2 = "Origin: upstream"; var line3 = "Bug: https://example.test"; var content = string.Join('\n', line1, line2, line3); var options = new FixIndexParserOptions { PatchHeaderMaxLines = 2, PatchHeaderMaxChars = 200, PatchHeaderExcerptMaxLength = line1.Length, PatchHeaderConfidence = 0.88m }; var now = new DateTimeOffset(2025, 12, 30, 15, 0, 0, TimeSpan.Zero); var parser = new PatchHeaderParser(options, new FixedTimeProvider(now)); var patches = new[] { ("patches/CVE-2024-3333.patch", content, "sha256") }; var results = parser.ParsePatches(patches, "Ubuntu", "Jammy", "pkg", "1.0.0").ToList(); results.Should().HaveCount(1); results[0].Distro.Should().Be("ubuntu"); results[0].Release.Should().Be("jammy"); results[0].Confidence.Should().Be(0.88m); results[0].CreatedAt.Should().Be(now); var evidence = (PatchHeaderEvidence)results[0].Evidence; evidence.HeaderExcerpt.Should().Be(line1); } }