diff options
Diffstat (limited to 'pkg/name/ref_test.go')
-rw-r--r-- | pkg/name/ref_test.go | 157 |
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) |