97 lines
3.2 KiB
C#
97 lines
3.2 KiB
C#
using System;
|
|
using StellaOps.Concelier.Models;
|
|
using Xunit;
|
|
|
|
namespace StellaOps.Concelier.Models.Tests;
|
|
|
|
public sealed class AffectedVersionRangeExtensionsTests
|
|
{
|
|
[Fact]
|
|
public void ToNormalizedVersionRule_UsesNevraPrimitivesWhenAvailable()
|
|
{
|
|
var range = new AffectedVersionRange(
|
|
rangeKind: "nevra",
|
|
introducedVersion: "raw-introduced",
|
|
fixedVersion: "raw-fixed",
|
|
lastAffectedVersion: null,
|
|
rangeExpression: null,
|
|
provenance: AdvisoryProvenance.Empty,
|
|
primitives: new RangePrimitives(
|
|
SemVer: null,
|
|
Nevra: new NevraPrimitive(
|
|
new NevraComponent("pkg", 0, "1.0.0", "1", "x86_64"),
|
|
new NevraComponent("pkg", 0, "1.2.0", "2", "x86_64"),
|
|
null),
|
|
Evr: null,
|
|
VendorExtensions: null));
|
|
|
|
var rule = range.ToNormalizedVersionRule();
|
|
|
|
Assert.NotNull(rule);
|
|
Assert.Equal(NormalizedVersionSchemes.Nevra, rule!.Scheme);
|
|
Assert.Equal("pkg-1.0.0-1.x86_64", rule.Min);
|
|
Assert.Equal("pkg-1.2.0-2.x86_64", rule.Max);
|
|
}
|
|
|
|
[Fact]
|
|
public void ToNormalizedVersionRule_FallsBackForEvrWhenPrimitivesMissing()
|
|
{
|
|
var range = new AffectedVersionRange(
|
|
rangeKind: "EVR",
|
|
introducedVersion: "1:1.0.0-1",
|
|
fixedVersion: "1:1.2.0-1ubuntu2",
|
|
lastAffectedVersion: null,
|
|
rangeExpression: null,
|
|
provenance: new AdvisoryProvenance("debian", "range", "pkg", DateTimeOffset.UtcNow),
|
|
primitives: null);
|
|
|
|
var rule = range.ToNormalizedVersionRule("fallback");
|
|
|
|
Assert.NotNull(rule);
|
|
Assert.Equal(NormalizedVersionSchemes.Evr, rule!.Scheme);
|
|
Assert.Equal(NormalizedVersionRuleTypes.Range, rule.Type);
|
|
Assert.Equal("1:1.0.0-1", rule.Min);
|
|
Assert.Equal("1:1.2.0-1ubuntu2", rule.Max);
|
|
Assert.Equal("fallback", rule.Notes);
|
|
}
|
|
|
|
[Fact]
|
|
public void ToNormalizedVersionRule_ReturnsNullForUnknownKind()
|
|
{
|
|
var range = new AffectedVersionRange(
|
|
rangeKind: "vendor",
|
|
introducedVersion: null,
|
|
fixedVersion: null,
|
|
lastAffectedVersion: null,
|
|
rangeExpression: null,
|
|
provenance: AdvisoryProvenance.Empty,
|
|
primitives: null);
|
|
|
|
var rule = range.ToNormalizedVersionRule();
|
|
|
|
Assert.Null(rule);
|
|
}
|
|
|
|
[Fact]
|
|
public void ToNormalizedVersionRule_FallsBackForApkRange()
|
|
{
|
|
var range = new AffectedVersionRange(
|
|
rangeKind: "apk",
|
|
introducedVersion: null,
|
|
fixedVersion: "3.1.4-r0",
|
|
lastAffectedVersion: null,
|
|
rangeExpression: "fixed:3.1.4-r0",
|
|
provenance: AdvisoryProvenance.Empty,
|
|
primitives: null);
|
|
|
|
var rule = range.ToNormalizedVersionRule("alpine:v3.20/main");
|
|
|
|
Assert.NotNull(rule);
|
|
Assert.Equal(NormalizedVersionSchemes.Apk, rule!.Scheme);
|
|
Assert.Equal(NormalizedVersionRuleTypes.LessThan, rule.Type);
|
|
Assert.Equal("3.1.4-r0", rule.Max);
|
|
Assert.False(rule.MaxInclusive);
|
|
Assert.Equal("alpine:v3.20/main", rule.Notes);
|
|
}
|
|
}
|