summaryrefslogtreecommitdiffstats
path: root/pkg/name/registry_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/name/registry_test.go')
-rw-r--r--pkg/name/registry_test.go252
1 files changed, 252 insertions, 0 deletions
diff --git a/pkg/name/registry_test.go b/pkg/name/registry_test.go
new file mode 100644
index 0000000..9986ee6
--- /dev/null
+++ b/pkg/name/registry_test.go
@@ -0,0 +1,252 @@
+// Copyright 2018 Google LLC All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package name
+
+import (
+ "testing"
+)
+
+var goodStrictValidationRegistryNames = []string{
+ "gcr.io",
+ "gcr.io:9001",
+ "index.docker.io",
+ "us.gcr.io",
+ "example.text",
+ "localhost",
+ "localhost:9090",
+}
+
+var goodWeakValidationRegistryNames = []string{
+ "",
+}
+
+var badRegistryNames = []string{
+ "white space",
+ "gcr?com",
+}
+
+func TestNewRegistryStrictValidation(t *testing.T) {
+ t.Parallel()
+
+ for _, name := range goodStrictValidationRegistryNames {
+ if registry, err := NewRegistry(name, StrictValidation); err != nil {
+ t.Errorf("`%s` should be a valid Registry name, got error: %v", name, err)
+ } else {
+ if registry.Name() != name {
+ t.Errorf("`%v` .Name() should reproduce the original name. Wanted: %s Got: %s", registry, name, registry.Name())
+ }
+ if registry.String() != name {
+ t.Errorf("`%v` .String() should reproduce the original name. Wanted: %s Got: %s", registry, name, registry.String())
+ }
+ }
+ }
+
+ for _, name := range append(goodWeakValidationRegistryNames, badRegistryNames...) {
+ if repo, err := NewRegistry(name, StrictValidation); err == nil {
+ t.Errorf("`%s` should be an invalid Registry name, got Registry: %#v", name, repo)
+ }
+ }
+}
+
+func TestNewRegistry(t *testing.T) {
+ t.Parallel()
+
+ for _, name := range append(goodStrictValidationRegistryNames, goodWeakValidationRegistryNames...) {
+ if _, err := NewRegistry(name, WeakValidation); err != nil {
+ t.Errorf("`%s` should be a valid Registry name, got error: %v", name, err)
+ }
+ }
+
+ for _, name := range badRegistryNames {
+ if repo, err := NewRegistry(name, WeakValidation); err == nil {
+ t.Errorf("`%s` should be an invalid Registry name, got Registry: %#v", name, repo)
+ }
+ }
+}
+
+func TestNewInsecureRegistry(t *testing.T) {
+ t.Parallel()
+
+ for _, name := range append(goodStrictValidationRegistryNames, goodWeakValidationRegistryNames...) {
+ if _, err := NewInsecureRegistry(name, WeakValidation); err != nil {
+ t.Errorf("`%s` should be a valid Registry name, got error: %v", name, err)
+ }
+ }
+
+ for _, name := range badRegistryNames {
+ if repo, err := NewInsecureRegistry(name, WeakValidation); err == nil {
+ t.Errorf("`%s` should be an invalid Registry name, got Registry: %#v", name, repo)
+ }
+ }
+}
+
+func TestDefaultRegistryNames(t *testing.T) {
+ testRegistries := []string{"docker.io", ""}
+
+ for _, testRegistry := range testRegistries {
+ registry, err := NewRegistry(testRegistry, WeakValidation)
+ if err != nil {
+ t.Fatalf("`%s` should be a valid Registry name, got error: %v", testRegistry, err)
+ }
+
+ actualRegistry := registry.RegistryStr()
+ if actualRegistry != DefaultRegistry {
+ t.Errorf("RegistryStr() was incorrect for %v. Wanted: `%s` Got: `%s`", registry, DefaultRegistry, actualRegistry)
+ }
+ }
+}
+
+func TestOverrideDefaultRegistryNames(t *testing.T) {
+ testRegistries := []string{"docker.io", ""}
+ expectedRegistries := []string{"index.docker.io", "gcr.io"}
+ overrideDefault := "gcr.io"
+
+ for i, testRegistry := range testRegistries {
+ registry, err := NewRegistry(testRegistry, WeakValidation, WithDefaultRegistry(overrideDefault))
+ if err != nil {
+ t.Fatalf("`%s` should be a valid Registry name, got error: %v", testRegistry, err)
+ }
+
+ actualRegistry := registry.RegistryStr()
+ if actualRegistry != expectedRegistries[i] {
+ t.Errorf("RegistryStr() was incorrect for %v. Wanted: `%s` Got: `%s`", registry, expectedRegistries[i], actualRegistry)
+ }
+ }
+}
+
+func TestRegistryComponents(t *testing.T) {
+ t.Parallel()
+ testRegistry := "gcr.io"
+
+ registry, err := NewRegistry(testRegistry, StrictValidation)
+ if err != nil {
+ t.Fatalf("`%s` should be a valid Registry name, got error: %v", testRegistry, err)
+ }
+
+ actualRegistry := registry.RegistryStr()
+ if actualRegistry != testRegistry {
+ t.Errorf("RegistryStr() was incorrect for %v. Wanted: `%s` Got: `%s`", registry, testRegistry, actualRegistry)
+ }
+}
+
+func TestRegistryScopes(t *testing.T) {
+ t.Parallel()
+ testRegistry := "gcr.io"
+ testAction := "whatever"
+
+ expectedScope := "registry:catalog:*"
+
+ registry, err := NewRegistry(testRegistry, StrictValidation)
+ if err != nil {
+ t.Fatalf("`%s` should be a valid Registry name, got error: %v", testRegistry, err)
+ }
+
+ actualScope := registry.Scope(testAction)
+ if actualScope != expectedScope {
+ t.Errorf("scope was incorrect for %v. Wanted: `%s` Got: `%s`", registry, expectedScope, actualScope)
+ }
+}
+
+func TestIsRFC1918(t *testing.T) {
+ t.Parallel()
+ tests := []struct {
+ reg string
+ result bool
+ }{{
+ reg: "index.docker.io",
+ result: false,
+ }, {
+ reg: "10.2.3.4:5000",
+ result: true,
+ }, {
+ reg: "8.8.8.8",
+ result: false,
+ }, {
+ reg: "172.16.3.4:3000",
+ result: true,
+ }, {
+ reg: "192.168.3.4",
+ result: true,
+ }, {
+ reg: "10.256.0.0:5000",
+ result: false,
+ }}
+ for _, test := range tests {
+ reg, err := NewRegistry(test.reg, WeakValidation)
+ if err != nil {
+ t.Errorf("NewRegistry(%s) = %v", test.reg, err)
+ }
+ got := reg.isRFC1918()
+ if got != test.result {
+ t.Errorf("isRFC1918(); got %v, want %v", got, test.result)
+ }
+ }
+}
+
+func TestRegistryScheme(t *testing.T) {
+ t.Parallel()
+ tests := []struct {
+ domain string
+ scheme string
+ }{{
+ domain: "foo.svc.local:1234",
+ scheme: "http",
+ }, {
+ domain: "127.0.0.1:1234",
+ scheme: "http",
+ }, {
+ domain: "127.0.0.1",
+ scheme: "http",
+ }, {
+ domain: "localhost:8080",
+ scheme: "http",
+ }, {
+ domain: "gcr.io",
+ scheme: "https",
+ }, {
+ domain: "index.docker.io",
+ scheme: "https",
+ }, {
+ domain: "::1",
+ scheme: "http",
+ }, {
+ domain: "10.2.3.4:5000",
+ scheme: "http",
+ }}
+
+ for _, test := range tests {
+ reg, err := NewRegistry(test.domain, WeakValidation)
+ if err != nil {
+ t.Errorf("NewRegistry(%s) = %v", test.domain, err)
+ }
+ if got, want := reg.Scheme(), test.scheme; got != want {
+ t.Errorf("scheme(%v); got %v, want %v", reg, got, want)
+ }
+ }
+}
+
+func TestRegistryInsecureScheme(t *testing.T) {
+ t.Parallel()
+ domain := "gcr.io"
+
+ reg, err := NewInsecureRegistry(domain, WeakValidation)
+ if err != nil {
+ t.Errorf("NewRegistry(%s) = %v", domain, err)
+ }
+
+ if got := reg.Scheme(); got != "http" {
+ t.Errorf("scheme(%v); got %v, want http", reg, got)
+ }
+}