keel/trigger/pubsub/manager_test.go

95 lines
1.9 KiB
Go

package pubsub
import (
"sync"
"time"
"golang.org/x/net/context"
"github.com/keel-hq/keel/approvals"
"github.com/keel-hq/keel/cache/memory"
"github.com/keel-hq/keel/provider"
"github.com/keel-hq/keel/types"
"github.com/keel-hq/keel/util/image"
"testing"
)
type fakeSubscriber struct {
TimesSubscribed int
SubscribedTopicName string
SubscribedSubName string
}
func (s *fakeSubscriber) Subscribe(ctx context.Context, topic, subscription string) error {
s.TimesSubscribed++
s.SubscribedTopicName = topic
s.SubscribedSubName = subscription
for {
select {
case <-ctx.Done():
return nil
}
}
}
type fakeProvider struct {
images []*types.TrackedImage
submitted []types.Event
}
func (p *fakeProvider) Submit(event types.Event) error {
p.submitted = append(p.submitted, event)
return nil
}
func (p *fakeProvider) TrackedImages() ([]*types.TrackedImage, error) {
return p.images, nil
}
func (p *fakeProvider) List() []string {
return []string{"fakeprovider"}
}
func (p *fakeProvider) Stop() {
return
}
func (p *fakeProvider) GetName() string {
return "fp"
}
func TestCheckDeployment(t *testing.T) {
img, _ := image.Parse("gcr.io/v2-namespace/hello-world:1.1")
fp := &fakeProvider{
images: []*types.TrackedImage{
&types.TrackedImage{
Image: img,
Provider: "fp",
},
},
}
mem := memory.NewMemoryCache()
am := approvals.New(mem)
providers := provider.New([]provider.Provider{fp}, am)
fs := &fakeSubscriber{}
mng := &DefaultManager{
providers: providers,
client: fs,
mu: &sync.Mutex{},
ctx: context.Background(),
subscribers: make(map[string]context.Context),
}
err := mng.scan(context.Background())
if err != nil {
t.Errorf("failed to scan: %s", err)
}
// sleeping a bit since our fake subscriber goes into a separate goroutine
time.Sleep(100 * time.Millisecond)
if fs.TimesSubscribed != 1 {
t.Errorf("expected to find one subscription, found: %d", fs.TimesSubscribed)
}
}