diff --git a/docker_test.go b/docker_test.go new file mode 100644 index 0000000..d78c2e6 --- /dev/null +++ b/docker_test.go @@ -0,0 +1,37 @@ +package purl_test + +import ( + "testing" + + "github.com/git-pkgs/purl" +) + +func TestDockerImagePURLs(t *testing.T) { + tests := []struct { + name, version, want string + }{ + {"postgres", "16", "pkg:docker/postgres@16"}, + {"example/image", "latest", "pkg:docker/example/image@latest"}, + {"ghcr.io/example/image", "2", "pkg:docker/ghcr.io/example/image@2"}, + {"registry.example:5000/team/image", "1", "pkg:docker/registry.example:5000/team/image@1"}, + {"ghcr.io/example/image", "sha256:abc123", "pkg:docker/ghcr.io/example/image@sha256:abc123"}, + {"ghcr.io/example/image", "", "pkg:docker/ghcr.io/example/image"}, + } + for _, tt := range tests { + t.Run(tt.name+"@"+tt.version, func(t *testing.T) { + if got := purl.BuildPURLString("docker", tt.name, tt.version, ""); got != tt.want { + t.Errorf("BuildPURLString = %q, want %q", got, tt.want) + } + if got := purl.MakePURLString("docker", tt.name, tt.version); got != tt.want { + t.Errorf("MakePURLString = %q, want %q", got, tt.want) + } + got := purl.MakePURL("docker", tt.name, tt.version) + if got == nil { + t.Fatal("MakePURL returned nil") + } + if got.String() != tt.want { + t.Errorf("MakePURL = %q, want %q", got.String(), tt.want) + } + }) + } +} diff --git a/makepurl.go b/makepurl.go index 8712d03..7cfb963 100644 --- a/makepurl.go +++ b/makepurl.go @@ -210,7 +210,7 @@ func splitNamespace(ecosystem, name string) (namespace, pkgName string, ok bool) pkgName = name[i+1:] } } - case ecosystemGolang: + case ecosystemGolang, "docker": if i := strings.LastIndex(name, "/"); i > 0 { namespace = name[:i] pkgName = name[i+1:]