summaryrefslogtreecommitdiffstats
path: root/pkg/authn/multikeychain_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/authn/multikeychain_test.go')
-rw-r--r--pkg/authn/multikeychain_test.go98
1 files changed, 98 insertions, 0 deletions
diff --git a/pkg/authn/multikeychain_test.go b/pkg/authn/multikeychain_test.go
new file mode 100644
index 0000000..3dff0c9
--- /dev/null
+++ b/pkg/authn/multikeychain_test.go
@@ -0,0 +1,98 @@
+// 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 authn
+
+import (
+ "testing"
+
+ "github.com/google/go-containerregistry/pkg/name"
+)
+
+func TestMultiKeychain(t *testing.T) {
+ one := &Basic{Username: "one", Password: "secret"}
+ two := &Basic{Username: "two", Password: "secret"}
+ three := &Basic{Username: "three", Password: "secret"}
+
+ regOne, _ := name.NewRegistry("one.gcr.io", name.StrictValidation)
+ regTwo, _ := name.NewRegistry("two.gcr.io", name.StrictValidation)
+ regThree, _ := name.NewRegistry("three.gcr.io", name.StrictValidation)
+
+ tests := []struct {
+ name string
+ reg name.Registry
+ kc Keychain
+ want Authenticator
+ }{{
+ // Make sure our test keychain WAI
+ name: "simple fixed test (match)",
+ reg: regOne,
+ kc: fixedKeychain{regOne: one},
+ want: one,
+ }, {
+ // Make sure our test keychain WAI
+ name: "simple fixed test (no match)",
+ reg: regTwo,
+ kc: fixedKeychain{regOne: one},
+ want: Anonymous,
+ }, {
+ name: "match first keychain",
+ reg: regOne,
+ kc: NewMultiKeychain(
+ fixedKeychain{regOne: one},
+ fixedKeychain{regOne: three, regTwo: two},
+ ),
+ want: one,
+ }, {
+ name: "match second keychain",
+ reg: regTwo,
+ kc: NewMultiKeychain(
+ fixedKeychain{regOne: one},
+ fixedKeychain{regOne: three, regTwo: two},
+ ),
+ want: two,
+ }, {
+ name: "match no keychain",
+ reg: regThree,
+ kc: NewMultiKeychain(
+ fixedKeychain{regOne: one},
+ fixedKeychain{regOne: three, regTwo: two},
+ ),
+ want: Anonymous,
+ }}
+
+ for _, test := range tests {
+ t.Run(test.name, func(t *testing.T) {
+ got, err := test.kc.Resolve(test.reg)
+ if err != nil {
+ t.Errorf("Resolve() = %v", err)
+ }
+ if got != test.want {
+ t.Errorf("Resolve() = %v, wanted %v", got, test.want)
+ }
+ })
+ }
+}
+
+type fixedKeychain map[Resource]Authenticator
+
+var _ Keychain = (fixedKeychain)(nil)
+
+// Resolve implements Keychain.
+func (fk fixedKeychain) Resolve(target Resource) (Authenticator, error) {
+ if auth, ok := fk[target]; ok {
+ return auth, nil
+ }
+ return Anonymous, nil
+}