test for cred helper

pull/504/head
Karolis Rusenas 2020-06-07 14:07:19 +01:00
parent 9da637efd1
commit 2503baa5ee
1 changed files with 108 additions and 0 deletions

View File

@ -1,14 +1,17 @@
package poll
import (
"errors"
"reflect"
"strconv"
"strings"
"testing"
"github.com/Masterminds/semver"
"github.com/stretchr/testify/assert"
"github.com/keel-hq/keel/approvals"
"github.com/keel-hq/keel/extension/credentialshelper"
"github.com/keel-hq/keel/internal/policy"
"github.com/keel-hq/keel/provider"
"github.com/keel-hq/keel/types"
@ -190,3 +193,108 @@ func Test_semverSort(t *testing.T) {
t.Errorf("Invalid sorted tags; expected: %s; got: %s", expectedVersions, sortedTags)
}
}
type testingCredsHelper struct {
err error // err to return
credentials *types.Credentials // creds to return
}
func (h *testingCredsHelper) IsEnabled() bool {
return true
}
func (h *testingCredsHelper) GetCredentials(image *types.TrackedImage) (*types.Credentials, error) {
return h.credentials, h.err
}
func TestWatchMultipleTagsWithCredentialsHelper(t *testing.T) {
// fake provider listening for events
imgA, _ := image.Parse("gcr.io/v2-namespace/hello-world:1.1.1")
fp := &fakeProvider{
images: []*types.TrackedImage{
&types.TrackedImage{
Image: imgA,
Trigger: types.TriggerTypePoll,
Provider: "fp",
PollSchedule: types.KeelPollDefaultSchedule,
Policy: policy.NewSemverPolicy(policy.SemverPolicyTypeAll, true),
},
},
}
store, teardown := newTestingUtils()
defer teardown()
am := approvals.New(&approvals.Opts{
Store: store,
})
t.Run("TestError", func(t *testing.T) {
mockHelper := &testingCredsHelper{
err: errors.New("doesn't work"),
}
credentialshelper.RegisterCredentialsHelper("mock", mockHelper)
defer credentialshelper.UnregisterCredentialsHelper("mock")
providers := provider.New([]provider.Provider{fp}, am)
// returning some sha
frc := &fakeRegistryClient{
digestToReturn: "sha256:0604af35299dd37ff23937d115d103532948b568a9dd8197d14c256a8ab8b0bb",
tagsToReturn: []string{"5.0.0"},
}
watcher := NewRepositoryWatcher(providers, frc)
tracked := []*types.TrackedImage{
mustParse("gcr.io/v2-namespace/hello-world:1.1.1", "@every 10m"),
}
err := watcher.Watch(tracked...)
if err != nil {
t.Errorf("failed to watch: %s", err)
}
if len(watcher.watched) != 1 {
t.Errorf("expected to find watching 1 entries, found: %d", len(watcher.watched))
}
assert.Equal(t, "", frc.opts.Username)
assert.Equal(t, "", frc.opts.Password)
})
t.Run("TestOK", func(t *testing.T) {
mockHelper := &testingCredsHelper{
err: nil,
credentials: &types.Credentials{
Username: "user",
Password: "pass",
},
}
credentialshelper.RegisterCredentialsHelper("mock", mockHelper)
defer credentialshelper.UnregisterCredentialsHelper("mock")
providers := provider.New([]provider.Provider{fp}, am)
// returning some sha
frc := &fakeRegistryClient{
digestToReturn: "sha256:0604af35299dd37ff23937d115d103532948b568a9dd8197d14c256a8ab8b0bb",
tagsToReturn: []string{"5.0.0"},
}
watcher := NewRepositoryWatcher(providers, frc)
tracked := []*types.TrackedImage{
mustParse("gcr.io/v2-namespace/hello-world:1.1.1", "@every 10m"),
}
err := watcher.Watch(tracked...)
if err != nil {
t.Errorf("failed to watch: %s", err)
}
if len(watcher.watched) != 1 {
t.Errorf("expected to find watching 1 entries, found: %d", len(watcher.watched))
}
assert.Equal(t, "user", frc.opts.Username)
assert.Equal(t, "pass", frc.opts.Password)
})
}