85 lines
2.8 KiB
C#
85 lines
2.8 KiB
C#
using FluentAssertions;
|
|
using StellaOps.TestKit;
|
|
using StellaOps.Testing.Determinism;
|
|
using Xunit;
|
|
|
|
namespace StellaOps.TestKit.Tests;
|
|
|
|
public sealed partial class DeterminismManifestTests
|
|
{
|
|
[Trait("Category", TestCategories.Unit)]
|
|
[Fact]
|
|
public void CreateManifest_WithReproducibilityMetadata_IncludesMetadata()
|
|
{
|
|
var artifactBytes = "Test artifact"u8.ToArray();
|
|
var artifactInfo = new ArtifactInfo
|
|
{
|
|
Type = "sbom",
|
|
Name = "test",
|
|
Version = "1.0.0"
|
|
};
|
|
var toolchain = new ToolchainInfo
|
|
{
|
|
Platform = ".NET 10.0",
|
|
Components = new[] { new ComponentInfo { Name = "Scanner", Version = "1.0.0" } }
|
|
};
|
|
var reproducibility = new ReproducibilityMetadata
|
|
{
|
|
DeterministicSeed = 42,
|
|
ClockFixed = true,
|
|
OrderingGuarantee = "sorted",
|
|
NormalizationRules = new[] { "UTF-8", "LF line endings", "sorted JSON keys" }
|
|
};
|
|
|
|
var manifest = DeterminismManifestWriter.CreateManifest(
|
|
artifactBytes,
|
|
artifactInfo,
|
|
toolchain,
|
|
reproducibility: reproducibility);
|
|
|
|
manifest.Reproducibility.Should().NotBeNull();
|
|
manifest.Reproducibility!.DeterministicSeed.Should().Be(42);
|
|
manifest.Reproducibility.ClockFixed.Should().BeTrue();
|
|
manifest.Reproducibility.OrderingGuarantee.Should().Be("sorted");
|
|
manifest.Reproducibility.NormalizationRules.Should().ContainInOrder(
|
|
"UTF-8",
|
|
"LF line endings",
|
|
"sorted JSON keys");
|
|
}
|
|
|
|
[Trait("Category", TestCategories.Unit)]
|
|
[Fact]
|
|
public void CreateManifest_WithVerificationInfo_IncludesVerification()
|
|
{
|
|
var artifactBytes = "Test artifact"u8.ToArray();
|
|
var artifactInfo = new ArtifactInfo
|
|
{
|
|
Type = "sbom",
|
|
Name = "test",
|
|
Version = "1.0.0"
|
|
};
|
|
var toolchain = new ToolchainInfo
|
|
{
|
|
Platform = ".NET 10.0",
|
|
Components = new[] { new ComponentInfo { Name = "Scanner", Version = "1.0.0" } }
|
|
};
|
|
var verification = new VerificationInfo
|
|
{
|
|
Command = "dotnet test --verify-determinism",
|
|
ExpectedHash = "abc123def456",
|
|
Baseline = "baselines/test-bundle.json"
|
|
};
|
|
|
|
var manifest = DeterminismManifestWriter.CreateManifest(
|
|
artifactBytes,
|
|
artifactInfo,
|
|
toolchain,
|
|
verification: verification);
|
|
|
|
manifest.Verification.Should().NotBeNull();
|
|
manifest.Verification!.Command.Should().Be("dotnet test --verify-determinism");
|
|
manifest.Verification.ExpectedHash.Should().Be("abc123def456");
|
|
manifest.Verification.Baseline.Should().Be("baselines/test-bundle.json");
|
|
}
|
|
}
|