package catalogue import ( "strings" "testing" ) // A build is recorded by what it is; where it is pushed is composed where it is used (novox/hq // 04-ISSUES/102). var digest = "sha256:" + strings.Repeat("d", 64) func TestAReferenceIsRecordedWithoutTheStoresAddress(t *testing.T) { cases := map[string]string{ "anchor.internal:5100/gitea/server@" + digest: ArtifactStoreScheme + "gitea/server@" + digest, "localhost:5000/gitea/server@" + digest: ArtifactStoreScheme + "gitea/server@" + digest, "http://anchor.internal:5100/v2/gitea/config/blobs/" + digest: ArtifactStoreScheme + "gitea/config/blobs/" + digest, ArtifactStoreScheme + "gitea/server@" + digest: ArtifactStoreScheme + "gitea/server@" + digest, digest: digest, "@novox/sdk@1.2.3": "@novox/sdk@1.2.3", "gitea/gitea@" + digest: "gitea/gitea@" + digest, "https://registry.example/v2/gitea/config/blobs/" + digest: "https://registry.example/v2/gitea/config/blobs/" + digest, // The form a registry seat answers is recorded as it is (ADR 0605 ยง9). "container-image-registry/gitea/server@" + digest: "container-image-registry/gitea/server@" + digest, "oci-artifact-registry/gitea/config@" + digest: "oci-artifact-registry/gitea/config@" + digest, } for announced, want := range cases { if got := Recorded(announced); got != want { t.Errorf("Recorded(%q) = %q, want %q", announced, got, want) } } // And every reader reads both forms: a kept reference and the seat's are fetched from the same place. for reference, want := range map[string]string{ ArtifactStoreScheme + "gitea/server@" + digest: "10.0.0.1:5000/gitea/server@" + digest, "container-image-registry/gitea/server@" + digest: "10.0.0.1:5000/gitea/server@" + digest, ArtifactStoreScheme + "gitea/config/blobs/" + digest: "http://10.0.0.1:5000/v2/gitea/config/blobs/" + digest, "oci-artifact-registry/gitea/config@" + digest: "http://10.0.0.1:5000/v2/gitea/config/blobs/" + digest, "registry.example/gitea/server@" + digest: "registry.example/gitea/server@" + digest, "mesh-artifact-store/gitea/server@" + digest: "mesh-artifact-store/gitea/server@" + digest, } { if got := Routed(reference, "10.0.0.1:5000"); got != want { t.Errorf("Routed(%q) = %q, want %q", reference, got, want) } } // A build module names what it published in the seat's form, and reads it back as the seat it came through. for _, seat := range RegistrySeats { ref := SeatReference(seat, "gitea", "config", digest) if got, path, ok := InRegistrySeat(ref); !ok || got != seat || path != "gitea/config@"+digest { t.Errorf("SeatReference(%s) = %q, read back as %q %q %v", seat, ref, got, path, ok) } } }