Bugfix: Do not use nil credentials in watcher addJob

pull/519/head
Christopher Hlubek 2020-07-14 20:28:55 +02:00
parent 36bbafc4a5
commit fac161a9c3
2 changed files with 46 additions and 4 deletions

View File

@ -242,8 +242,8 @@ func (w *RepositoryWatcher) addJob(ti *types.TrackedImage, schedule string) erro
log.WithFields(log.Fields{
"error": err,
"image": ti.Image.String(),
"username": creds.Username,
"password": strings.Repeat("*", len(creds.Password)),
"username": registryOpts.Username,
"password": strings.Repeat("*", len(registryOpts.Password)),
}).Error("trigger.poll.RepositoryWatcher.addJob: failed to get image digest")
return err
}

View File

@ -2,6 +2,7 @@ package poll
import (
"context"
"errors"
"os"
"testing"
@ -33,6 +34,8 @@ type fakeRegistryClient struct {
digestToReturn string
digestErrToReturn error
tagsToReturn []string
}
@ -46,7 +49,7 @@ func (c *fakeRegistryClient) Get(opts registry.Opts) (*registry.Repository, erro
func (c *fakeRegistryClient) Digest(opts registry.Opts) (digest string, err error) {
c.opts = opts
return c.digestToReturn, nil
return c.digestToReturn, c.digestErrToReturn
}
// ======== fake provider for testing =======
@ -356,11 +359,14 @@ type fakeCredentialsHelper struct {
// credentials to return
creds *types.Credentials
// error to return
error error
}
func (fch *fakeCredentialsHelper) GetCredentials(image *types.TrackedImage) (*types.Credentials, error) {
fch.getImageRequest = image
return fch.creds, nil
return fch.creds, fch.error
}
func (fch *fakeCredentialsHelper) IsEnabled() bool { return true }
@ -414,6 +420,42 @@ func TestWatchTagJobCheckCredentials(t *testing.T) {
}
}
func TestWatchWithAuthenticationError(t *testing.T) {
fakeHelper := &fakeCredentialsHelper{
creds: nil,
error: errors.New("no credentials found"),
}
credentialshelper.RegisterCredentialsHelper("fake", fakeHelper)
defer credentialshelper.UnregisterCredentialsHelper("fake")
fp := &fakeProvider{}
store, teardown := newTestingUtils()
defer teardown()
am := approvals.New(&approvals.Opts{
Store: store,
})
providers := provider.New([]provider.Provider{fp}, am)
frc := &fakeRegistryClient{
digestErrToReturn: errors.New("authentication failed"),
}
watcher := NewRepositoryWatcher(providers, frc)
tracked := []*types.TrackedImage{
mustParse("private.registry.com/v2-namespace/hello-world:1.1.1", "@every 10m"),
}
err := watcher.Watch(tracked...)
if err == nil {
t.Fatalf("expected error with faild authentication, but got nil")
}
}
func TestWatchTagJobLatestECR(t *testing.T) {
if os.Getenv("AWS_ACCESS_KEY_ID") == "" {
t.Skip()