diff --git a/trigger/poll/manager.go b/trigger/poll/manager.go index b11b89bc..e4150a19 100644 --- a/trigger/poll/manager.go +++ b/trigger/poll/manager.go @@ -55,7 +55,7 @@ func NewPollManager(providers provider.Providers, watcher Watcher, secretsGetter credentialsHelper: credentialsHelper, watcher: watcher, mu: &sync.Mutex{}, - scanTick: 55, + scanTick: 1, } } @@ -82,7 +82,6 @@ func (s *DefaultManager) Start(ctx context.Context) error { case <-ctx.Done(): return nil case <-ticker.C: - log.Debug("performing scan") err := s.scan(ctx) if err != nil { log.WithFields(log.Fields{ @@ -94,6 +93,7 @@ func (s *DefaultManager) Start(ctx context.Context) error { } func (s *DefaultManager) scan(ctx context.Context) error { + log.Info("performing scan") trackedImages, err := s.providers.TrackedImages() if err != nil { return err diff --git a/trigger/poll/manager_test.go b/trigger/poll/manager_test.go index 90903f90..1ed087ef 100644 --- a/trigger/poll/manager_test.go +++ b/trigger/poll/manager_test.go @@ -2,15 +2,20 @@ package poll import ( "context" + "os" "time" "github.com/keel-hq/keel/approvals" "github.com/keel-hq/keel/cache/memory" "github.com/keel-hq/keel/provider" + "github.com/keel-hq/keel/registry" "github.com/keel-hq/keel/types" "github.com/keel-hq/keel/util/codecs" "github.com/keel-hq/keel/util/image" + "github.com/keel-hq/keel/extension/credentialshelper" + _ "github.com/keel-hq/keel/extension/credentialshelper/aws" + "testing" ) @@ -54,7 +59,7 @@ func TestCheckDeployment(t *testing.T) { watcher := NewRepositoryWatcher(providers, frc) - pm := NewPollManager(providers, watcher, &FakeSecretsGetter{}) + pm := NewPollManager(providers, watcher, &FakeSecretsGetter{}, credentialshelper.New()) imageA := "gcr.io/v2-namespace/hello-world:1.1.1" imageB := "gcr.io/v2-namespace/greetings-world:1.1.1" @@ -97,3 +102,65 @@ func TestCheckDeployment(t *testing.T) { t.Errorf("unexpected tag: %s", watcher.watched[keyB].imageRef.Tag()) } } + +// To run this test, set AWS env variables +// export AWS_ACCESS_KEY_ID=AKIA......... +// export AWS_ACCESS_KEY=3v.............. +// export AWS_REGION=us-east-2 +func TestCheckECRDeployment(t *testing.T) { + + if os.Getenv("AWS_ACCESS_KEY_ID") == "" { + t.Skip() + } + + // fake provider listening for events + imgA, _ := image.Parse("528670773427.dkr.ecr.us-east-2.amazonaws.com/webhook-demo:master") + fp := &fakeProvider{ + images: []*types.TrackedImage{ + &types.TrackedImage{ + Image: imgA, + Trigger: types.TriggerTypePoll, + Provider: "fp", + PollSchedule: types.KeelPollDefaultSchedule, + }, + }, + } + mem := memory.NewMemoryCache(100*time.Millisecond, 100*time.Millisecond, 10*time.Millisecond) + am := approvals.New(mem, codecs.DefaultSerializer()) + providers := provider.New([]provider.Provider{fp}, am) + rc := registry.New() + + watcher := NewRepositoryWatcher(providers, rc) + + pm := NewPollManager(providers, watcher, &FakeSecretsGetter{}, credentialshelper.New()) + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + pm.scan(ctx) + + // 2 subscriptions should be added + entries := watcher.cron.Entries() + if len(entries) != 1 { + t.Fatalf("unexpected list of cron entries: %d", len(entries)) + } + + keyA := getImageIdentifier(imgA) + + if len(watcher.watched) != 1 { + t.Fatalf("expected to find 1 entry in watcher.watched map, found: %d", len(watcher.watched)) + } + + if watcher.watched[keyA].digest != "sha256:7712aa425c17c2e413e5f4d64e2761eda009509d05d0e45a26e389d715aebe23" { + t.Errorf("unexpected digest: %s", watcher.watched[keyA].digest) + } + if watcher.watched[keyA].schedule != types.KeelPollDefaultSchedule { + t.Errorf("unexpected schedule: %s", watcher.watched[keyA].schedule) + } + if watcher.watched[keyA].imageRef.Remote() != imgA.Remote() { + t.Errorf("unexpected remote remote: %s", watcher.watched[keyA].imageRef.Remote()) + } + if watcher.watched[keyA].imageRef.Tag() != imgA.Tag() { + t.Errorf("unexpected tag: %s", watcher.watched[keyA].imageRef.Tag()) + } +}