65 lines
2.1 KiB
C#
65 lines
2.1 KiB
C#
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);
|
|
}
|
|
}
|