Skip to content

Instantly share code, notes, and snippets.

@sugamon
Created January 11, 2020 07:17
Show Gist options
  • Save sugamon/de6f6e2c115742be2591152e67cbcecb to your computer and use it in GitHub Desktop.
Save sugamon/de6f6e2c115742be2591152e67cbcecb to your computer and use it in GitHub Desktop.
pubsub apiv1 subscriber test
package pubsub
import (
"context"
"testing"
"cloud.google.com/go/pubsub/pstest"
"golang.org/x/xerrors"
"google.golang.org/api/option"
pubsubpb "google.golang.org/genproto/googleapis/pubsub/v1"
"google.golang.org/grpc"
)
func TestSubscriber_Pull(t *testing.T) {
t.Helper()
// テストケース作成
cases := map[string]struct {
pullConfig *PullRequestConfig
topic string
msg string
procMsg ProcessMessage
expected bool
}{
"成功": {
pullConfig: &PullRequestConfig{
Subscription: "projects/apiv1-sample/subscriptions/test-subscription",
MaxMessages: 10,
},
topic: "projects/apiv1-sample/topics/test-topic",
msg: "message",
procMsg: func(ctx context.Context, msg *pubsubpb.ReceivedMessage) error {
return nil
},
expected: false,
},
"メッセージに対する処理でエラー発生": {
pullConfig: &PullRequestConfig{
Subscription: "projects/apiv1-sample/subscriptions/test-subscription",
MaxMessages: 10,
},
topic: "projects/apiv1-sample/topics/test-topic",
msg: "message",
procMsg: func(ctx context.Context, msg *pubsubpb.ReceivedMessage) error {
return xerrors.New("error occurred.")
},
expected: true,
},
}
for k, c := range cases {
srv := pstest.NewServer()
conn, _ := grpc.Dial(srv.Addr, grpc.WithInsecure())
defer srv.Close()
defer conn.Close()
t.Run(k, func(t *testing.T) {
ctx := context.Background()
p, _ := NewPublisher(ctx, option.WithGRPCConn(conn))
// Topic事前作成
p.Client.CreateTopic(ctx, &pubsubpb.Topic{Name: c.topic})
// 以下、Subscriber部分
s, _ := NewSubscriber(ctx, option.WithGRPCConn(conn))
s.Client.CreateSubscription(ctx, &pubsubpb.Subscription{
Name: c.pullConfig.Subscription,
Topic: c.topic,
AckDeadlineSeconds: 10,
})
// Publish
p.Publish(ctx, c.topic, c.msg)
err := s.Pull(
ctx,
&PullRequestConfig{
Subscription: c.pullConfig.Subscription,
MaxMessages: c.pullConfig.MaxMessages,
},
c.procMsg,
)
if (err != nil) != c.expected {
t.Errorf("TestSubscriber_Pull error. got: %v, expected: %v", err, c.expected)
}
})
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment