| Index: milo/common/pubsub_test.go
|
| diff --git a/milo/common/pubsub_test.go b/milo/common/pubsub_test.go
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..4ac7886d91ec9ec43f73b9a5b5c37aa7bc3648ff
|
| --- /dev/null
|
| +++ b/milo/common/pubsub_test.go
|
| @@ -0,0 +1,116 @@
|
| +// Copyright 2017 The LUCI Authors. All rights reserved.
|
| +// Use of this source code is governed under the Apache License, Version 2.0
|
| +// that can be found in the LICENSE file.
|
| +
|
| +package common
|
| +
|
| +import (
|
| + "errors"
|
| + "fmt"
|
| + "testing"
|
| +
|
| + "cloud.google.com/go/pubsub"
|
| + "golang.org/x/net/context"
|
| +
|
| + "github.com/luci/gae/impl/memory"
|
| + "github.com/luci/luci-go/common/logging/gologger"
|
| +
|
| + . "github.com/smartystreets/goconvey/convey"
|
| +)
|
| +
|
| +type testPubSubClient struct {
|
| + topics map[string]error
|
| + subscriptions map[string]error
|
| + createdSubsErr map[string]error
|
| + createdSubs map[string]pubsub.SubscriptionConfig
|
| +}
|
| +
|
| +// Topic returns an empty pubsub topic reference.
|
| +func (client *testPubSubClient) getTopic(id string) (*pubsub.Topic, error) {
|
| + if err, ok := client.topics[id]; ok {
|
| + return &pubsub.Topic{}, err
|
| + }
|
| + panic(fmt.Errorf("test error: unknown topic %s", id))
|
| +}
|
| +
|
| +// Subscription returns an empty subscription reference.
|
| +func (client *testPubSubClient) getSubscription(id string) (
|
| + *pubsub.Subscription, error) {
|
| + if err, ok := client.subscriptions[id]; ok {
|
| + return &pubsub.Subscription{}, err
|
| + }
|
| + panic(fmt.Errorf("test error: unknown sub %s", id))
|
| +}
|
| +
|
| +// CreateSubscription records that an attempt to create a subscription with
|
| +// an id, then returns an empty subscription.
|
| +func (client *testPubSubClient) createSubscription(
|
| + id string, cfg pubsub.SubscriptionConfig) (
|
| + *pubsub.Subscription, error) {
|
| +
|
| + if err, ok := client.createdSubsErr[id]; ok {
|
| + client.createdSubs[id] = cfg
|
| + return &pubsub.Subscription{}, err
|
| + }
|
| + panic(fmt.Errorf("test error: unknown created sub %s", id))
|
| +}
|
| +
|
| +func TestPubSub(t *testing.T) {
|
| + t.Parallel()
|
| +
|
| + Convey("Test Environment", t, func() {
|
| + c := memory.UseWithAppID(context.Background(), "dev~luci-milo")
|
| + c = gologger.StdConfig.Use(c)
|
| + client := &testPubSubClient{
|
| + topics: map[string]error{},
|
| + subscriptions: map[string]error{},
|
| + createdSubsErr: map[string]error{},
|
| + createdSubs: map[string]pubsub.SubscriptionConfig{}}
|
| + c = context.WithValue(c, &pubSubClientKey, client)
|
| +
|
| + Convey("Buildbucket PubSub subscriber", func() {
|
| + proj := "foo"
|
| + Convey("Non-existant topic", func() {
|
| + client.topics["builds"] = errNotExist
|
| + err := ensureBuildbucketSubscribed(c, proj)
|
| + So(err.Error(), ShouldEndWith, "does not exist")
|
| + })
|
| + Convey("Permission denied", func() {
|
| + pErr := errors.New(
|
| + "something PermissionDenied something")
|
| + client.topics["builds"] = pErr
|
| + err := ensureBuildbucketSubscribed(c, proj)
|
| + So(err, ShouldEqual, pErr)
|
| + })
|
| + Convey("Normal error", func() {
|
| + pErr := errors.New("foobar")
|
| + client.topics["builds"] = pErr
|
| + err := ensureBuildbucketSubscribed(c, proj)
|
| + So(err, ShouldEqual, pErr)
|
| + })
|
| + client.topics["builds"] = nil
|
| + Convey("Subscription exists", func() {
|
| + client.subscriptions["luci-milo"] = nil
|
| + err := ensureBuildbucketSubscribed(c, proj)
|
| + So(err, ShouldBeNil)
|
| + So(len(client.createdSubs), ShouldEqual, 0)
|
| + })
|
| + client.subscriptions["luci-milo"] = errNotExist
|
| + Convey("Not registered", func() {
|
| + errNotReg := errors.New("The supplied HTTP URL is not registered")
|
| + client.createdSubsErr["luci-milo"] = errNotReg
|
| + err := ensureBuildbucketSubscribed(c, proj)
|
| + So(err, ShouldEqual, errNotReg)
|
| + })
|
| + Convey("Create subscription", func() {
|
| + client.createdSubsErr["luci-milo"] = nil
|
| + err := ensureBuildbucketSubscribed(c, proj)
|
| + So(err, ShouldBeNil)
|
| + So(len(client.createdSubs), ShouldEqual, 1)
|
| + _, ok := client.createdSubs["luci-milo"]
|
| + So(ok, ShouldEqual, true)
|
| + })
|
| + })
|
| + })
|
| +
|
| +}
|
|
|