2022-12-08 13:05:19 -03:00

189 lines
4.3 KiB
Go

// Copyright (c) 2022 Gitpod GmbH. All rights reserved.
// Licensed under the GNU Affero General Public License (AGPL).
// See License.AGPL.txt in the project root for license information.
package proxy
import (
"net/url"
"testing"
)
func TestRewriteNonDockerAPIURL(t *testing.T) {
type input struct {
u url.URL
fromPrefix string
toPrefix string
host string
}
tests := []struct {
Name string
in input
u url.URL
}{
{
Name: "toPrefix is empty",
in: input{
fromPrefix: "base",
toPrefix: "",
host: "europe-docker.pkg.dev",
u: url.URL{
Host: "localhost.com",
Path: "/base/artifacts-uploads/namespaces/prince-tf-experiments/repositories/dazzle/uploads/somedata",
},
},
u: url.URL{
Host: "europe-docker.pkg.dev",
Path: "/artifacts-uploads/namespaces/prince-tf-experiments/repositories/dazzle/uploads/somedata",
},
},
{
Name: "fromPrefix is empty",
in: input{
fromPrefix: "",
toPrefix: "base",
host: "localhost.com",
u: url.URL{
Host: "europe-docker.pkg.dev",
Path: "/artifacts-uploads/namespaces/prince-tf-experiments/repositories/dazzle/uploads/somedata",
},
},
u: url.URL{
Host: "localhost.com",
Path: "/base/artifacts-uploads/namespaces/prince-tf-experiments/repositories/dazzle/uploads/somedata",
},
},
{
Name: "fromPrefix and toPrefix are not empty",
in: input{
fromPrefix: "from",
toPrefix: "to",
host: "localhost.com",
u: url.URL{
Host: "example.com",
Path: "/from/some/random/path",
},
},
u: url.URL{
Host: "localhost.com",
Path: "/to/some/random/path",
},
},
{
Name: "fromPrefix and toPrefix are empty",
in: input{
fromPrefix: "",
toPrefix: "",
host: "localhost.com",
u: url.URL{
Host: "example.com",
Path: "/some/random/path",
},
},
u: url.URL{
Host: "localhost.com",
Path: "/some/random/path",
},
},
}
for _, test := range tests {
t.Run(test.Name, func(t *testing.T) {
rewriteNonDockerAPIURL(&test.in.u, test.in.fromPrefix, test.in.toPrefix, test.in.host)
if test.in.u.Path != test.u.Path {
t.Errorf("expected path: %s but got %s", test.u.Path, test.in.u.Path)
}
if test.in.u.Host != test.u.Host {
t.Errorf("expected Host: %s but got %s", test.u.Host, test.in.u.Host)
}
if test.in.u.RawPath != test.u.RawPath {
t.Errorf("expected RawPath: %s but got %s", test.u.RawPath, test.in.u.RawPath)
}
})
}
}
func TestRewriteDockerAPIURL(t *testing.T) {
type input struct {
u url.URL
fromRepo string
toRepo string
host string
tag string
}
tests := []struct {
Name string
in input
u url.URL
}{
{
Name: "remote to localhost",
in: input{
fromRepo: "base-images",
toRepo: "base",
host: "localhost.com",
tag: "",
u: url.URL{
Host: "prince.azurecr.io",
Path: "/v2/base-images/some/random/path",
},
},
u: url.URL{
Host: "localhost.com",
Path: "/v2/base/some/random/path",
},
},
{
Name: "localhost to remote",
in: input{
fromRepo: "base",
toRepo: "base-images",
host: "prince.azurecr.io",
tag: "",
u: url.URL{
Host: "localhost.com",
Path: "/v2/base/some/random/path",
},
},
u: url.URL{
Host: "prince.azurecr.io",
Path: "/v2/base-images/some/random/path",
},
},
{
Name: "manifest reference update with tag",
in: input{
fromRepo: "base",
toRepo: "base-images",
host: "prince.azurecr.io",
tag: "tag12345",
u: url.URL{
Host: "localhost.com",
Path: "/v2/base/uploads/manifests/manifest12345",
},
},
u: url.URL{
Host: "prince.azurecr.io",
Path: "/v2/base-images/uploads/manifests/tag12345",
},
},
}
for _, test := range tests {
t.Run(test.Name, func(t *testing.T) {
rewriteDockerAPIURL(&test.in.u, test.in.fromRepo, test.in.toRepo, test.in.host, test.in.tag)
if test.in.u.Path != test.u.Path {
t.Errorf("expected path: %s but got %s", test.u.Path, test.in.u.Path)
}
if test.in.u.Host != test.u.Host {
t.Errorf("expected Host: %s but got %s", test.u.Host, test.in.u.Host)
}
if test.in.u.RawPath != test.u.RawPath {
t.Errorf("expected RawPath: %s but got %s", test.u.RawPath, test.in.u.RawPath)
}
})
}
}