Files
git.stella-ops.org/src/StellaOps.Feedser/StellaOps.Feedser.Normalization.Tests/CpeNormalizerTests.cs
master bb7eda17a8
Some checks failed
Feedser CI / build-and-test (push) Has been cancelled
up
2025-10-06 01:13:41 +03:00

71 lines
2.1 KiB
C#

using StellaOps.Feedser.Normalization.Identifiers;
namespace StellaOps.Feedser.Normalization.Tests;
public sealed class CpeNormalizerTests
{
[Fact]
public void TryNormalizeCpe_Preserves2Dot3Format()
{
var input = "cpe:2.3:A:Example:Product:1.0:*:*:*:*:*:*:*";
var success = IdentifierNormalizer.TryNormalizeCpe(input, out var normalized);
Assert.True(success);
Assert.Equal("cpe:2.3:a:example:product:1.0:*:*:*:*:*:*:*", normalized);
}
[Fact]
public void TryNormalizeCpe_UpgradesUriBinding()
{
var input = "cpe:/o:RedHat:Enterprise_Linux:8";
var success = IdentifierNormalizer.TryNormalizeCpe(input, out var normalized);
Assert.True(success);
Assert.Equal("cpe:2.3:o:redhat:enterprise_linux:8:*:*:*:*:*:*:*", normalized);
}
[Fact]
public void TryNormalizeCpe_InvalidInputReturnsFalse()
{
var success = IdentifierNormalizer.TryNormalizeCpe("not-a-cpe", out var normalized);
Assert.False(success);
Assert.Null(normalized);
}
[Fact]
public void TryNormalizeCpe_DecodesPercentEncodingAndEscapes()
{
var input = "cpe:/a:Example%20Corp:Widget%2fSuite:1.0:update:%7e:%2a";
var success = IdentifierNormalizer.TryNormalizeCpe(input, out var normalized);
Assert.True(success);
Assert.Equal(@"cpe:2.3:a:example\ corp:widget\/suite:1.0:update:*:*:*:*:*:*", normalized);
}
[Fact]
public void TryNormalizeCpe_ExpandsEditionFields()
{
var input = "cpe:/a:Vendor:Product:1.0:update:~pro~~windows~~:en-US";
var success = IdentifierNormalizer.TryNormalizeCpe(input, out var normalized);
Assert.True(success);
Assert.Equal("cpe:2.3:a:vendor:product:1.0:update:*:en-us:pro:*:windows:*", normalized);
}
[Fact]
public void TryNormalizeCpe_PreservesEscapedCharactersIn23()
{
var input = @"cpe:2.3:a:example:printer\/:1.2.3:*:*:*:*:*:*:*";
var success = IdentifierNormalizer.TryNormalizeCpe(input, out var normalized);
Assert.True(success);
Assert.Equal(@"cpe:2.3:a:example:printer\/:1.2.3:*:*:*:*:*:*:*", normalized);
}
}