Refactor code structure and optimize performance across multiple modules
This commit is contained in:
@@ -2,6 +2,7 @@ using FluentAssertions;
|
||||
using StellaOps.VersionComparison;
|
||||
using StellaOps.VersionComparison.Comparers;
|
||||
|
||||
using StellaOps.TestKit;
|
||||
namespace StellaOps.VersionComparison.Tests;
|
||||
|
||||
public class DebianVersionComparerTests
|
||||
@@ -44,7 +45,8 @@ public class DebianVersionComparerTests
|
||||
{ "1.1", "1.0-99", 1 },
|
||||
};
|
||||
|
||||
[Theory]
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
[Theory]
|
||||
[MemberData(nameof(DebianComparisonCases))]
|
||||
public void Compare_DebianVersions_ReturnsExpectedOrder(string left, string right, int expected)
|
||||
{
|
||||
@@ -52,19 +54,22 @@ public class DebianVersionComparerTests
|
||||
result.Should().Be(expected, because: $"comparing '{left}' with '{right}'");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
[Fact]
|
||||
public void Compare_SameVersion_ReturnsZero()
|
||||
{
|
||||
_comparer.Compare("1:1.1.1k-1+deb11u1", "1:1.1.1k-1+deb11u1").Should().Be(0);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
[Fact]
|
||||
public void Compare_NullLeft_ReturnsNegative()
|
||||
{
|
||||
_comparer.Compare(null, "1.0-1").Should().BeNegative();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
[Fact]
|
||||
public void Compare_NullRight_ReturnsPositive()
|
||||
{
|
||||
_comparer.Compare("1.0-1", null).Should().BePositive();
|
||||
@@ -74,7 +79,8 @@ public class DebianVersionComparerTests
|
||||
|
||||
#region Proof Line Tests
|
||||
|
||||
[Fact]
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
[Fact]
|
||||
public void CompareWithProof_EpochDifference_ReturnsEpochProof()
|
||||
{
|
||||
var result = _comparer.CompareWithProof("0:1.0-1", "1:0.1-1");
|
||||
@@ -84,7 +90,8 @@ public class DebianVersionComparerTests
|
||||
result.ProofLines.Should().Contain(line => line.Contains("Epoch:") && line.Contains("left is older"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
[Fact]
|
||||
public void CompareWithProof_SameEpochDifferentVersion_ReturnsVersionProof()
|
||||
{
|
||||
var result = _comparer.CompareWithProof("1:1.1.1k-1", "1:1.1.1l-1");
|
||||
@@ -94,7 +101,8 @@ public class DebianVersionComparerTests
|
||||
result.ProofLines.Should().Contain(line => line.Contains("Upstream version:") && line.Contains("left is older"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
[Fact]
|
||||
public void CompareWithProof_SameVersionDifferentRevision_ReturnsRevisionProof()
|
||||
{
|
||||
var result = _comparer.CompareWithProof("1:1.1.1k-1+deb11u1", "1:1.1.1k-1+deb11u2");
|
||||
@@ -104,7 +112,8 @@ public class DebianVersionComparerTests
|
||||
result.ProofLines.Should().Contain(line => line.Contains("Debian revision:") && line.Contains("left is older"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
[Fact]
|
||||
public void CompareWithProof_EqualVersions_ReturnsEqualProof()
|
||||
{
|
||||
var result = _comparer.CompareWithProof("1:1.1.1k-1+deb11u1", "1:1.1.1k-1+deb11u1");
|
||||
@@ -114,7 +123,8 @@ public class DebianVersionComparerTests
|
||||
result.ProofLines.Should().AllSatisfy(line => line.Should().Contain("equal"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
[Fact]
|
||||
public void CompareWithProof_TildePreRelease_ReturnsCorrectProof()
|
||||
{
|
||||
var result = _comparer.CompareWithProof("2.0~rc1-1", "2.0-1");
|
||||
@@ -123,7 +133,8 @@ public class DebianVersionComparerTests
|
||||
result.ProofLines.Should().Contain(line => line.Contains("Upstream version:") && line.Contains("left is older"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
[Fact]
|
||||
public void CompareWithProof_NativePackage_HandlesEmptyRevision()
|
||||
{
|
||||
var result = _comparer.CompareWithProof("1.0", "1.0-1");
|
||||
@@ -136,7 +147,8 @@ public class DebianVersionComparerTests
|
||||
|
||||
#region Edge Cases
|
||||
|
||||
[Theory]
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
[Theory]
|
||||
[InlineData("1:1.2-1", "0:9.9-9", 1)] // Epoch jump
|
||||
[InlineData("2.0~rc1", "2.0", -1)] // Tilde pre-release
|
||||
[InlineData("1.2-3+deb12u1", "1.2-3+deb12u2", -1)] // Debian stable update
|
||||
@@ -151,7 +163,8 @@ public class DebianVersionComparerTests
|
||||
|
||||
#region Real-World Advisory Scenarios
|
||||
|
||||
[Fact]
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
[Fact]
|
||||
public void Compare_OpenSSL_DebianBackport_CorrectlyIdentifiesVulnerable()
|
||||
{
|
||||
// Installed version vs fixed version from DSA
|
||||
@@ -164,7 +177,8 @@ public class DebianVersionComparerTests
|
||||
result.IsGreaterThanOrEqual.Should().BeFalse("installed is VULNERABLE");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
[Fact]
|
||||
public void Compare_OpenSSL_DebianBackport_CorrectlyIdentifiesFixed()
|
||||
{
|
||||
// Installed version >= fixed version
|
||||
@@ -176,7 +190,8 @@ public class DebianVersionComparerTests
|
||||
result.IsGreaterThanOrEqual.Should().BeTrue("installed version is FIXED");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
[Fact]
|
||||
public void Compare_UbuntuSecurityBackport_CorrectlyIdentifies()
|
||||
{
|
||||
// Ubuntu security backport pattern
|
||||
|
||||
@@ -2,6 +2,7 @@ using FluentAssertions;
|
||||
using StellaOps.VersionComparison;
|
||||
using StellaOps.VersionComparison.Comparers;
|
||||
|
||||
using StellaOps.TestKit;
|
||||
namespace StellaOps.VersionComparison.Tests;
|
||||
|
||||
public class RpmVersionComparerTests
|
||||
@@ -41,7 +42,8 @@ public class RpmVersionComparerTests
|
||||
{ "1.0-1", "1.0a-1", -1 },
|
||||
};
|
||||
|
||||
[Theory]
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
[Theory]
|
||||
[MemberData(nameof(RpmComparisonCases))]
|
||||
public void Compare_RpmVersions_ReturnsExpectedOrder(string left, string right, int expected)
|
||||
{
|
||||
@@ -49,19 +51,22 @@ public class RpmVersionComparerTests
|
||||
result.Should().Be(expected, because: $"comparing '{left}' with '{right}'");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
[Fact]
|
||||
public void Compare_SameVersion_ReturnsZero()
|
||||
{
|
||||
_comparer.Compare("1.0-1.el8", "1.0-1.el8").Should().Be(0);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
[Fact]
|
||||
public void Compare_NullLeft_ReturnsNegative()
|
||||
{
|
||||
_comparer.Compare(null, "1.0-1").Should().BeNegative();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
[Fact]
|
||||
public void Compare_NullRight_ReturnsPositive()
|
||||
{
|
||||
_comparer.Compare("1.0-1", null).Should().BePositive();
|
||||
@@ -71,7 +76,8 @@ public class RpmVersionComparerTests
|
||||
|
||||
#region Proof Line Tests
|
||||
|
||||
[Fact]
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
[Fact]
|
||||
public void CompareWithProof_EpochDifference_ReturnsEpochProof()
|
||||
{
|
||||
var result = _comparer.CompareWithProof("0:1.0-1", "1:0.1-1");
|
||||
@@ -81,7 +87,8 @@ public class RpmVersionComparerTests
|
||||
result.ProofLines.Should().Contain(line => line.Contains("Epoch:") && line.Contains("left is older"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
[Fact]
|
||||
public void CompareWithProof_SameEpochDifferentVersion_ReturnsVersionProof()
|
||||
{
|
||||
var result = _comparer.CompareWithProof("1:1.0-1", "1:2.0-1");
|
||||
@@ -91,7 +98,8 @@ public class RpmVersionComparerTests
|
||||
result.ProofLines.Should().Contain(line => line.Contains("Version:") && line.Contains("left is older"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
[Fact]
|
||||
public void CompareWithProof_SameVersionDifferentRelease_ReturnsReleaseProof()
|
||||
{
|
||||
var result = _comparer.CompareWithProof("1.0-1.el8", "1.0-1.el8_5");
|
||||
@@ -100,7 +108,8 @@ public class RpmVersionComparerTests
|
||||
result.ProofLines.Should().Contain(line => line.Contains("Release:") && line.Contains("left is older"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
[Fact]
|
||||
public void CompareWithProof_EqualVersions_ReturnsEqualProof()
|
||||
{
|
||||
var result = _comparer.CompareWithProof("1.0-1.el8", "1.0-1.el8");
|
||||
@@ -110,7 +119,8 @@ public class RpmVersionComparerTests
|
||||
result.ProofLines.Should().AllSatisfy(line => line.Should().Contain("equal"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
[Fact]
|
||||
public void CompareWithProof_TildePreRelease_ReturnsCorrectProof()
|
||||
{
|
||||
var result = _comparer.CompareWithProof("1.0~rc1-1", "1.0-1");
|
||||
@@ -123,7 +133,8 @@ public class RpmVersionComparerTests
|
||||
|
||||
#region Edge Cases
|
||||
|
||||
[Theory]
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
[Theory]
|
||||
[InlineData("1:1.2-1", "0:9.9-9", 1)] // Epoch jump
|
||||
[InlineData("2.0~rc1", "2.0", -1)] // Tilde pre-release
|
||||
[InlineData("1.2-3.el9_2", "1.2-3.el9_3", -1)] // Release qualifier
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\StellaOps.VersionComparison\StellaOps.VersionComparison.csproj" />
|
||||
<ProjectReference Include="../../StellaOps.TestKit/StellaOps.TestKit.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
Reference in New Issue
Block a user