Validate canonical comparison manifests

This commit is contained in:
2026-08-13 03:06:28 +00:00
parent 70cad789ea
commit 707db5394c
6 changed files with 234 additions and 10 deletions

View File

@@ -1,7 +1,6 @@
package comparison
import (
"encoding/json"
"strings"
"testing"
"time"
@@ -165,9 +164,9 @@ func TestManifestEncodingAndRoundTrip(t *testing.T) {
t.Fatalf("EncodeManifest() =\n%s\nwant\n%s", encoded, want)
}
var decoded Manifest
if err := json.Unmarshal(encoded, &decoded); err != nil {
t.Fatalf("json.Unmarshal() error = %v", err)
decoded, err := decodeManifest(encoded)
if err != nil {
t.Fatalf("decodeManifest() error = %v", err)
}
if err := decoded.Validate(); err != nil {
t.Fatalf("decoded manifest validation error = %v", err)
@@ -192,6 +191,10 @@ func TestManifestValidateRejectsInvariants(t *testing.T) {
{name: "duplicate profile", mutate: func(manifest *Manifest) { manifest.Results[1].ProfileID = manifest.Results[0].ProfileID }},
{name: "unsupported status", mutate: func(manifest *Manifest) { manifest.Results[1].Status = "skipped" }},
{name: "successful result without report", mutate: func(manifest *Manifest) { manifest.Results[0].ReportPath = "" }},
{name: "arbitrary report name", mutate: func(manifest *Manifest) { manifest.Results[0].ReportPath = "arbitrary.md" }},
{name: "wrong report position", mutate: func(manifest *Manifest) { manifest.Results[0].ReportPath = "02-weather-light.md" }},
{name: "wrong report ordinal width", mutate: func(manifest *Manifest) { manifest.Results[0].ReportPath = "1-weather-light.md" }},
{name: "wrong report profile slug", mutate: func(manifest *Manifest) { manifest.Results[0].ReportPath = "01-weather.md" }},
{name: "successful result with error", mutate: func(manifest *Manifest) {
manifest.Results[0].Error = &SafeError{Category: "application", Message: "bad"}
}},
@@ -247,6 +250,12 @@ func TestLogicalBundleValidate(t *testing.T) {
if err := bundle.Validate(); err == nil {
t.Fatal("LogicalBundle.Validate() accepted unordered report position")
}
bundle.Reports[0].Position = 1
bundle.Reports[0].Path = "arbitrary.md"
bundle.Manifest.Results[0].ReportPath = "arbitrary.md"
if err := bundle.Validate(); err == nil {
t.Fatal("LogicalBundle.Validate() accepted a noncanonical report path")
}
}
func TestSHA256AndTruncateErrorMessage(t *testing.T) {