diff options
Diffstat (limited to 'pkg/authn/multikeychain_test.go')
-rw-r--r-- | pkg/authn/multikeychain_test.go | 98 |
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 +} |