Skip to content

Commit b191580

Browse files
anguillanneufbusunkim96
authored andcommitted
Pub/Sub: update how to test with mock (#2555)
* Update test with mock * Clean up resources after tests * Use unique resource names avoid test failures * Delete subscriptions in cleanup phase * Ensure unique topic name * Update assert to remove bytestring notation * Rewrite PubSubToGCS test using dataflow testing module
1 parent 14e5262 commit b191580

15 files changed

+635
-538
lines changed

pubsub/cloud-client/iam.py

Lines changed: 62 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ def get_topic_policy(project, topic_name):
3434

3535
policy = client.get_iam_policy(topic_path)
3636

37-
print('Policy for topic {}:'.format(topic_path))
37+
print("Policy for topic {}:".format(topic_path))
3838
for binding in policy.bindings:
39-
print('Role: {}, Members: {}'.format(binding.role, binding.members))
39+
print("Role: {}, Members: {}".format(binding.role, binding.members))
4040
# [END pubsub_get_topic_policy]
4141

4242

@@ -48,9 +48,9 @@ def get_subscription_policy(project, subscription_name):
4848

4949
policy = client.get_iam_policy(subscription_path)
5050

51-
print('Policy for subscription {}:'.format(subscription_path))
51+
print("Policy for subscription {}:".format(subscription_path))
5252
for binding in policy.bindings:
53-
print('Role: {}, Members: {}'.format(binding.role, binding.members))
53+
print("Role: {}, Members: {}".format(binding.role, binding.members))
5454
# [END pubsub_get_subscription_policy]
5555

5656

@@ -63,20 +63,17 @@ def set_topic_policy(project, topic_name):
6363
policy = client.get_iam_policy(topic_path)
6464

6565
# Add all users as viewers.
66-
policy.bindings.add(
67-
role='roles/pubsub.viewer',
68-
members=['allUsers'])
66+
policy.bindings.add(role="roles/pubsub.viewer", members=["allUsers"])
6967

7068
# Add a group as a publisher.
7169
policy.bindings.add(
72-
role='roles/pubsub.publisher',
73-
members=['group:[email protected]'])
70+
role="roles/pubsub.publisher", members=["group:[email protected]"]
71+
)
7472

7573
# Set the policy
7674
policy = client.set_iam_policy(topic_path, policy)
7775

78-
print('IAM policy for topic {} set: {}'.format(
79-
topic_name, policy))
76+
print("IAM policy for topic {} set: {}".format(topic_name, policy))
8077
# [END pubsub_set_topic_policy]
8178

8279

@@ -89,20 +86,21 @@ def set_subscription_policy(project, subscription_name):
8986
policy = client.get_iam_policy(subscription_path)
9087

9188
# Add all users as viewers.
92-
policy.bindings.add(
93-
role='roles/pubsub.viewer',
94-
members=['allUsers'])
89+
policy.bindings.add(role="roles/pubsub.viewer", members=["allUsers"])
9590

9691
# Add a group as an editor.
9792
policy.bindings.add(
98-
role='roles/editor',
99-
members=['group:[email protected]'])
93+
role="roles/editor", members=["group:[email protected]"]
94+
)
10095

10196
# Set the policy
10297
policy = client.set_iam_policy(subscription_path, policy)
10398

104-
print('IAM policy for subscription {} set: {}'.format(
105-
subscription_name, policy))
99+
print(
100+
"IAM policy for subscription {} set: {}".format(
101+
subscription_name, policy
102+
)
103+
)
106104
# [END pubsub_set_subscription_policy]
107105

108106

@@ -112,16 +110,17 @@ def check_topic_permissions(project, topic_name):
112110
client = pubsub_v1.PublisherClient()
113111
topic_path = client.topic_path(project, topic_name)
114112

115-
permissions_to_check = [
116-
'pubsub.topics.publish',
117-
'pubsub.topics.update'
118-
]
113+
permissions_to_check = ["pubsub.topics.publish", "pubsub.topics.update"]
119114

120115
allowed_permissions = client.test_iam_permissions(
121-
topic_path, permissions_to_check)
116+
topic_path, permissions_to_check
117+
)
122118

123-
print('Allowed permissions for topic {}: {}'.format(
124-
topic_path, allowed_permissions))
119+
print(
120+
"Allowed permissions for topic {}: {}".format(
121+
topic_path, allowed_permissions
122+
)
123+
)
125124
# [END pubsub_test_topic_permissions]
126125

127126

@@ -132,63 +131,73 @@ def check_subscription_permissions(project, subscription_name):
132131
subscription_path = client.subscription_path(project, subscription_name)
133132

134133
permissions_to_check = [
135-
'pubsub.subscriptions.consume',
136-
'pubsub.subscriptions.update'
134+
"pubsub.subscriptions.consume",
135+
"pubsub.subscriptions.update",
137136
]
138137

139138
allowed_permissions = client.test_iam_permissions(
140-
subscription_path, permissions_to_check)
139+
subscription_path, permissions_to_check
140+
)
141141

142-
print('Allowed permissions for subscription {}: {}'.format(
143-
subscription_path, allowed_permissions))
142+
print(
143+
"Allowed permissions for subscription {}: {}".format(
144+
subscription_path, allowed_permissions
145+
)
146+
)
144147
# [END pubsub_test_subscription_permissions]
145148

146149

147-
if __name__ == '__main__':
150+
if __name__ == "__main__":
148151
parser = argparse.ArgumentParser(
149152
description=__doc__,
150-
formatter_class=argparse.RawDescriptionHelpFormatter
153+
formatter_class=argparse.RawDescriptionHelpFormatter,
151154
)
152-
parser.add_argument('project', help='Your Google Cloud project ID')
155+
parser.add_argument("project", help="Your Google Cloud project ID")
153156

154-
subparsers = parser.add_subparsers(dest='command')
157+
subparsers = parser.add_subparsers(dest="command")
155158

156159
get_topic_policy_parser = subparsers.add_parser(
157-
'get-topic-policy', help=get_topic_policy.__doc__)
158-
get_topic_policy_parser.add_argument('topic_name')
160+
"get-topic-policy", help=get_topic_policy.__doc__
161+
)
162+
get_topic_policy_parser.add_argument("topic_name")
159163

160164
get_subscription_policy_parser = subparsers.add_parser(
161-
'get-subscription-policy', help=get_subscription_policy.__doc__)
162-
get_subscription_policy_parser.add_argument('subscription_name')
165+
"get-subscription-policy", help=get_subscription_policy.__doc__
166+
)
167+
get_subscription_policy_parser.add_argument("subscription_name")
163168

164169
set_topic_policy_parser = subparsers.add_parser(
165-
'set-topic-policy', help=set_topic_policy.__doc__)
166-
set_topic_policy_parser.add_argument('topic_name')
170+
"set-topic-policy", help=set_topic_policy.__doc__
171+
)
172+
set_topic_policy_parser.add_argument("topic_name")
167173

168174
set_subscription_policy_parser = subparsers.add_parser(
169-
'set-subscription-policy', help=set_subscription_policy.__doc__)
170-
set_subscription_policy_parser.add_argument('subscription_name')
175+
"set-subscription-policy", help=set_subscription_policy.__doc__
176+
)
177+
set_subscription_policy_parser.add_argument("subscription_name")
171178

172179
check_topic_permissions_parser = subparsers.add_parser(
173-
'check-topic-permissions', help=check_topic_permissions.__doc__)
174-
check_topic_permissions_parser.add_argument('topic_name')
180+
"check-topic-permissions", help=check_topic_permissions.__doc__
181+
)
182+
check_topic_permissions_parser.add_argument("topic_name")
175183

176184
check_subscription_permissions_parser = subparsers.add_parser(
177-
'check-subscription-permissions',
178-
help=check_subscription_permissions.__doc__)
179-
check_subscription_permissions_parser.add_argument('subscription_name')
185+
"check-subscription-permissions",
186+
help=check_subscription_permissions.__doc__,
187+
)
188+
check_subscription_permissions_parser.add_argument("subscription_name")
180189

181190
args = parser.parse_args()
182191

183-
if args.command == 'get-topic-policy':
192+
if args.command == "get-topic-policy":
184193
get_topic_policy(args.project, args.topic_name)
185-
elif args.command == 'get-subscription-policy':
194+
elif args.command == "get-subscription-policy":
186195
get_subscription_policy(args.project, args.subscription_name)
187-
elif args.command == 'set-topic-policy':
196+
elif args.command == "set-topic-policy":
188197
set_topic_policy(args.project, args.topic_name)
189-
elif args.command == 'set-subscription-policy':
198+
elif args.command == "set-subscription-policy":
190199
set_subscription_policy(args.project, args.subscription_name)
191-
elif args.command == 'check-topic-permissions':
200+
elif args.command == "check-topic-permissions":
192201
check_topic_permissions(args.project, args.topic_name)
193-
elif args.command == 'check-subscription-permissions':
202+
elif args.command == "check-subscription-permissions":
194203
check_subscription_permissions(args.project, args.subscription_name)

pubsub/cloud-client/iam_test.py

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,23 +13,25 @@
1313
# limitations under the License.
1414

1515
import os
16+
import uuid
1617

1718
from google.cloud import pubsub_v1
1819
import pytest
1920

2021
import iam
2122

22-
PROJECT = os.environ['GCLOUD_PROJECT']
23-
TOPIC = 'iam-test-topic'
24-
SUBSCRIPTION = 'iam-test-subscription'
23+
UUID = uuid.uuid4().hex
24+
PROJECT = os.environ["GCLOUD_PROJECT"]
25+
TOPIC = "iam-test-topic-" + UUID
26+
SUBSCRIPTION = "iam-test-subscription-" + UUID
2527

2628

27-
@pytest.fixture(scope='module')
29+
@pytest.fixture(scope="module")
2830
def publisher_client():
2931
yield pubsub_v1.PublisherClient()
3032

3133

32-
@pytest.fixture(scope='module')
34+
@pytest.fixture(scope="module")
3335
def topic(publisher_client):
3436
topic_path = publisher_client.topic_path(PROJECT, TOPIC)
3537

@@ -42,16 +44,19 @@ def topic(publisher_client):
4244

4345
yield topic_path
4446

47+
publisher_client.delete_topic(topic_path)
4548

46-
@pytest.fixture(scope='module')
49+
50+
@pytest.fixture(scope="module")
4751
def subscriber_client():
4852
yield pubsub_v1.SubscriberClient()
4953

5054

5155
@pytest.fixture
5256
def subscription(subscriber_client, topic):
5357
subscription_path = subscriber_client.subscription_path(
54-
PROJECT, SUBSCRIPTION)
58+
PROJECT, SUBSCRIPTION
59+
)
5560

5661
try:
5762
subscriber_client.delete_subscription(subscription_path)
@@ -62,6 +67,8 @@ def subscription(subscriber_client, topic):
6267

6368
yield subscription_path
6469

70+
subscriber_client.delete_subscription(subscription_path)
71+
6572

6673
def test_get_topic_policy(topic, capsys):
6774
iam.get_topic_policy(PROJECT, TOPIC)
@@ -81,16 +88,16 @@ def test_set_topic_policy(publisher_client, topic):
8188
iam.set_topic_policy(PROJECT, TOPIC)
8289

8390
policy = publisher_client.get_iam_policy(topic)
84-
assert 'roles/pubsub.publisher' in str(policy)
85-
assert 'allUsers' in str(policy)
91+
assert "roles/pubsub.publisher" in str(policy)
92+
assert "allUsers" in str(policy)
8693

8794

8895
def test_set_subscription_policy(subscriber_client, subscription):
8996
iam.set_subscription_policy(PROJECT, SUBSCRIPTION)
9097

9198
policy = subscriber_client.get_iam_policy(subscription)
92-
assert 'roles/pubsub.viewer' in str(policy)
93-
assert 'allUsers' in str(policy)
99+
assert "roles/pubsub.viewer" in str(policy)
100+
assert "allUsers" in str(policy)
94101

95102

96103
def test_check_topic_permissions(topic, capsys):
@@ -99,7 +106,7 @@ def test_check_topic_permissions(topic, capsys):
99106
out, _ = capsys.readouterr()
100107

101108
assert topic in out
102-
assert 'pubsub.topics.publish' in out
109+
assert "pubsub.topics.publish" in out
103110

104111

105112
def test_check_subscription_permissions(subscription, capsys):
@@ -108,4 +115,4 @@ def test_check_subscription_permissions(subscription, capsys):
108115
out, _ = capsys.readouterr()
109116

110117
assert subscription in out
111-
assert 'pubsub.subscriptions.consume' in out
118+
assert "pubsub.subscriptions.consume" in out

0 commit comments

Comments
 (0)