88 lines
2.0 KiB
Go
88 lines
2.0 KiB
Go
package registries
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
type authServiceMock struct {
|
|
service string
|
|
realm string
|
|
scope []string
|
|
}
|
|
|
|
type challengeTestCase struct {
|
|
header string
|
|
errorString string
|
|
value authServiceMock
|
|
}
|
|
|
|
func (asm authServiceMock) equalTo(v *authService) bool {
|
|
if asm.service != v.Service {
|
|
return false
|
|
}
|
|
for i, v := range v.Scope {
|
|
if v != asm.scope[i] {
|
|
return false
|
|
}
|
|
}
|
|
|
|
return asm.realm == v.Realm.String()
|
|
}
|
|
|
|
func TestToken(t *testing.T) {
|
|
testImage := Image{Domain: "docker.io", Path: "library/alpine", Tag: "latest"}
|
|
r, err := CreateRegistryClient("", "", "docker.io", true)
|
|
if err != nil {
|
|
t.Fatalf("Could not get registry client: %s", err)
|
|
}
|
|
|
|
digestUrl := r.GetDigestUrl(testImage)
|
|
|
|
// Get token.
|
|
token, err := r.Token(digestUrl)
|
|
if err != nil || token == "" {
|
|
t.Fatalf("Could not get token: %s", err)
|
|
}
|
|
|
|
}
|
|
|
|
func TestParseChallenge(t *testing.T) {
|
|
challengeHeaderCases := []challengeTestCase{
|
|
{
|
|
header: `Bearer realm="https://foobar.com/api/v1/token",service=foobar.com,scope=""`,
|
|
value: authServiceMock{
|
|
service: "foobar.com",
|
|
realm: "https://foobar.com/api/v1/token",
|
|
},
|
|
},
|
|
{
|
|
header: `Bearer realm="https://r.j3ss.co/auth",service="Docker registry",scope="repository:chrome:pull"`,
|
|
value: authServiceMock{
|
|
service: "Docker registry",
|
|
realm: "https://r.j3ss.co/auth",
|
|
scope: []string{"repository:chrome:pull"},
|
|
},
|
|
},
|
|
{
|
|
header: `Basic realm="https://r.j3ss.co/auth",service="Docker registry"`,
|
|
errorString: "basic auth required",
|
|
},
|
|
{
|
|
header: `Basic realm="Registry Realm",service="Docker registry"`,
|
|
errorString: "basic auth required",
|
|
},
|
|
}
|
|
|
|
for _, tc := range challengeHeaderCases {
|
|
val, err := parseChallenge(tc.header)
|
|
if err != nil && !strings.Contains(err.Error(), tc.errorString) {
|
|
t.Fatalf("expected error to contain %v, got %s", tc.errorString, err)
|
|
}
|
|
if err == nil && !tc.value.equalTo(val) {
|
|
t.Fatalf("got %v, expected %v", val, tc.value)
|
|
}
|
|
|
|
}
|
|
}
|