Make typed module spec lookup artifact-aware
This commit is contained in:
@@ -175,6 +175,57 @@ func TestMaterializeReferencesStoresSetsAndProvenanceForAllTargets(t *testing.T)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMaterializeReferencesUsesLaneArtifactVariant(t *testing.T) {
|
||||
configDir := t.TempDir()
|
||||
writeReferenceFile(t, filepath.Join(configDir, "merge.txt"), []byte("merge alpha"))
|
||||
writeReferenceFile(t, filepath.Join(configDir, "normalize.txt"), []byte("normalize alpha"))
|
||||
mergers := NewMergerRegistry()
|
||||
normalizers := NewNormalizerRegistry()
|
||||
for _, item := range []struct {
|
||||
kind contracts.ArtifactKind
|
||||
mergeSlot string
|
||||
normalizeSlot string
|
||||
}{
|
||||
{kind: "test/beta", mergeSlot: "beta_merge", normalizeSlot: "beta_normalize"},
|
||||
{kind: "test/alpha", mergeSlot: "alpha_merge", normalizeSlot: "alpha_normalize"},
|
||||
} {
|
||||
if err := RegisterMerger(mergers, ModuleSpec{Key: "shared/merge", Stage: StageMerge, ArtifactKind: item.kind, ReferenceSlots: []contracts.ReferenceSlot{{Name: item.mergeSlot}}}, func() (contracts.Merger[codecNotes], error) {
|
||||
return typedTestMerger[codecNotes]{key: "shared/merge"}, nil
|
||||
}); err != nil {
|
||||
t.Fatalf("RegisterMerger(%s): %v", item.kind, err)
|
||||
}
|
||||
if err := RegisterNormalizer(normalizers, ModuleSpec{Key: "shared/normalize", Stage: StageNormalize, ArtifactKind: item.kind, ReferenceSlots: []contracts.ReferenceSlot{{Name: item.normalizeSlot}}}, func() (contracts.Normalizer[codecNotes], error) {
|
||||
return typedTestNormalizer[codecNotes]{key: "shared/normalize"}, nil
|
||||
}); err != nil {
|
||||
t.Fatalf("RegisterNormalizer(%s): %v", item.kind, err)
|
||||
}
|
||||
}
|
||||
resolved := ResolvedPipeline{
|
||||
ID: "variants",
|
||||
ArtifactLanes: []ResolvedArtifactLane{{
|
||||
ID: "alpha",
|
||||
ArtifactKind: "test/alpha",
|
||||
MergeReferences: referenceTarget(StageMerge, "alpha", "shared/merge", []ReferenceBinding{{
|
||||
Stage: StageMerge, LaneID: "alpha", SlotName: "alpha_merge", Source: "merge.txt", BindingSource: contracts.ReferenceBindingSourceConfig,
|
||||
}}),
|
||||
NormalizeReferences: referenceTarget(StageNormalize, "alpha", "shared/normalize", []ReferenceBinding{{
|
||||
Stage: StageNormalize, LaneID: "alpha", SlotName: "alpha_normalize", Source: "normalize.txt", BindingSource: contracts.ReferenceBindingSourceConfig,
|
||||
}}),
|
||||
}},
|
||||
}
|
||||
materialized, _, err := MaterializeReferences(resolved, ModuleCatalog{Mergers: mergers, Normalizers: normalizers}, ReferenceMaterializationOptions{ConfigPath: filepath.Join(configDir, "notarius.yml")})
|
||||
if err != nil {
|
||||
t.Fatalf("MaterializeReferences() error = %v, want nil", err)
|
||||
}
|
||||
lane := materialized.ArtifactLanes[0]
|
||||
if got := string(lane.MergeReferences.ReferenceSet.Slots["alpha_merge"].Items[0].Content); got != "merge alpha" {
|
||||
t.Fatalf("merge reference = %q", got)
|
||||
}
|
||||
if got := string(lane.NormalizeReferences.ReferenceSet.Slots["alpha_normalize"].Items[0].Content); got != "normalize alpha" {
|
||||
t.Fatalf("normalize reference = %q", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMaterializeReferencesRejectsNonUTF8Content(t *testing.T) {
|
||||
configDir := t.TempDir()
|
||||
path := filepath.Join(configDir, "bad.txt")
|
||||
|
||||
Reference in New Issue
Block a user