summaryrefslogtreecommitdiffstats
path: root/pkg/name/ref_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/name/ref_test.go')
-rw-r--r--pkg/name/ref_test.go157
1 files changed, 157 insertions, 0 deletions
diff --git a/pkg/name/ref_test.go b/pkg/name/ref_test.go
new file mode 100644
index 0000000..c47283c
--- /dev/null
+++ b/pkg/name/ref_test.go
@@ -0,0 +1,157 @@
+// 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 (
+ testDefaultRegistry = "registry.upbound.io"
+ testDefaultTag = "stable"
+ inputDefaultNames = []string{
+ "crossplane/provider-gcp",
+ "crossplane/provider-gcp:v0.14.0",
+ "ubuntu",
+ "gcr.io/crossplane/provider-gcp:latest",
+ }
+ outputDefaultNames = []string{
+ "registry.upbound.io/crossplane/provider-gcp:stable",
+ "registry.upbound.io/crossplane/provider-gcp:v0.14.0",
+ "registry.upbound.io/ubuntu:stable",
+ "gcr.io/crossplane/provider-gcp:latest",
+ }
+)
+
+func TestParseReferenceDefaulting(t *testing.T) {
+ for i, name := range inputDefaultNames {
+ ref, err := ParseReference(name, WithDefaultRegistry(testDefaultRegistry), WithDefaultTag(testDefaultTag))
+ if err != nil {
+ t.Errorf("ParseReference(%q); %v", name, err)
+ }
+ if ref.Name() != outputDefaultNames[i] {
+ t.Errorf("ParseReference(%q); got %v, want %v", name, ref.String(), outputDefaultNames[i])
+ }
+ }
+}
+
+func TestParseReference(t *testing.T) {
+ for _, name := range goodWeakValidationDigestNames {
+ ref, err := ParseReference(name, WeakValidation)
+ if err != nil {
+ t.Errorf("ParseReference(%q); %v", name, err)
+ }
+ dig, err := NewDigest(name, WeakValidation)
+ if err != nil {
+ t.Errorf("NewDigest(%q); %v", name, err)
+ }
+ if ref != dig {
+ t.Errorf("ParseReference(%q) != NewDigest(%q); got %v, want %v", name, name, ref, dig)
+ }
+ }
+
+ for _, name := range goodStrictValidationDigestNames {
+ ref, err := ParseReference(name, StrictValidation)
+ if err != nil {
+ t.Errorf("ParseReference(%q); %v", name, err)
+ }
+ dig, err := NewDigest(name, StrictValidation)
+ if err != nil {
+ t.Errorf("NewDigest(%q); %v", name, err)
+ }
+ if ref != dig {
+ t.Errorf("ParseReference(%q) != NewDigest(%q); got %v, want %v", name, name, ref, dig)
+ }
+ }
+
+ for _, name := range badDigestNames {
+ if _, err := ParseReference(name, WeakValidation); err == nil {
+ t.Errorf("ParseReference(%q); expected error, got none", name)
+ }
+ }
+
+ for _, name := range goodWeakValidationTagNames {
+ ref, err := ParseReference(name, WeakValidation)
+ if err != nil {
+ t.Errorf("ParseReference(%q); %v", name, err)
+ }
+ tag, err := NewTag(name, WeakValidation)
+ if err != nil {
+ t.Errorf("NewTag(%q); %v", name, err)
+ }
+ if ref != tag {
+ t.Errorf("ParseReference(%q) != NewTag(%q); got %v, want %v", name, name, ref, tag)
+ }
+ }
+
+ for _, name := range goodStrictValidationTagNames {
+ ref, err := ParseReference(name, StrictValidation)
+ if err != nil {
+ t.Errorf("ParseReference(%q); %v", name, err)
+ }
+ tag, err := NewTag(name, StrictValidation)
+ if err != nil {
+ t.Errorf("NewTag(%q); %v", name, err)
+ }
+ if ref != tag {
+ t.Errorf("ParseReference(%q) != NewTag(%q); got %v, want %v", name, name, ref, tag)
+ }
+ }
+
+ for _, name := range badTagNames {
+ if _, err := ParseReference(name, WeakValidation); err == nil {
+ t.Errorf("ParseReference(%q); expected error, got none", name)
+ }
+ }
+}
+
+func TestMustParseReference(t *testing.T) {
+ for _, name := range append(goodWeakValidationTagNames, goodWeakValidationDigestNames...) {
+ func() {
+ defer func() {
+ if err := recover(); err != nil {
+ t.Errorf("MustParseReference(%q, WeakValidation); panic: %v", name, err)
+ }
+ }()
+ MustParseReference(stringConst(name), WeakValidation)
+ }()
+ }
+
+ for _, name := range append(goodStrictValidationTagNames, goodStrictValidationDigestNames...) {
+ func() {
+ defer func() {
+ if err := recover(); err != nil {
+ t.Errorf("MustParseReference(%q, StrictValidation); panic: %v", name, err)
+ }
+ }()
+ MustParseReference(stringConst(name), StrictValidation)
+ }()
+ }
+
+ for _, name := range append(badTagNames, badDigestNames...) {
+ func() {
+ defer func() { recover() }()
+ ref := MustParseReference(stringConst(name), WeakValidation)
+ t.Errorf("MustParseReference(%q, WeakValidation) should panic, got: %#v", name, ref)
+ }()
+ }
+}
+
+// Test that MustParseReference can accept a const string or string value.
+const str = "valid/string"
+
+var _ = MustParseReference(str)
+var _ = MustParseReference("valid/string")
+var _ = MustParseReference("valid/prefix/" + str)