diff --git a/pubsub/google/cloud/pubsub/subscription.py b/pubsub/google/cloud/pubsub/subscription.py index c98277d660df..e76abcf94dd8 100644 --- a/pubsub/google/cloud/pubsub/subscription.py +++ b/pubsub/google/cloud/pubsub/subscription.py @@ -509,4 +509,5 @@ def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): - self._subscription.acknowledge(list(self), self._client) + if self: + self._subscription.acknowledge(list(self), self._client) diff --git a/pubsub/unit_tests/test_subscription.py b/pubsub/unit_tests/test_subscription.py index 6d4dc1068f2a..6078a3cc70c8 100644 --- a/pubsub/unit_tests/test_subscription.py +++ b/pubsub/unit_tests/test_subscription.py @@ -14,6 +14,8 @@ import unittest +import mock + class TestSubscription(unittest.TestCase): PROJECT = 'PROJECT' @@ -745,6 +747,16 @@ def test___exit___(self): [ACK_ID1, ACK_ID2]) self.assertIs(subscription._ack_client, CLIENT) + def test_empty_ack_no_acknowledge(self): + subscription = mock.Mock(_FauxSubscription) + subscription.pull = lambda *args: [] + + auto_ack = self._make_one(subscription) + with auto_ack: + pass + + subscription.acknowledge.assert_not_called() + class _FauxIAMPolicy(object):