fix(pubsub): hide context.Cancelled error in sync pull (#3752)
diff --git a/pubsub/iterator.go b/pubsub/iterator.go
index dcca633..8b54df8 100644
--- a/pubsub/iterator.go
+++ b/pubsub/iterator.go
@@ -247,6 +247,8 @@
switch {
case err == context.Canceled:
return nil, nil
+ case status.Code(err) == codes.Canceled:
+ return nil, nil
case err != nil:
return nil, err
default:
diff --git a/pubsub/iterator_test.go b/pubsub/iterator_test.go
index be4f8b4..d3c7cf8 100644
--- a/pubsub/iterator_test.go
+++ b/pubsub/iterator_test.go
@@ -400,3 +400,24 @@
t.Fatal(err)
}
}
+
+func TestIterator_SynchronousPullCancel(t *testing.T) {
+ srv := pstest.NewServer()
+ ctx, cancel := context.WithCancel(context.Background())
+ defer cancel()
+
+ srv.Publish(fullyQualifiedTopicName, []byte("creating a topic"), nil)
+
+ _, client, err := initConn(ctx, srv.Addr)
+ if err != nil {
+ t.Fatal(err)
+ }
+ iter := newMessageIterator(client.subc, fullyQualifiedTopicName, &pullOptions{})
+
+ // Cancelling the iterator and pulling should not result in any errors.
+ iter.cancel()
+
+ if _, err := iter.pullMessages(100); err != nil {
+ t.Fatalf("Got error in pullMessages: %v", err)
+ }
+}