24
24
25
25
import pytest
26
26
27
+ # Unique suffix to create distinct service names
27
28
28
- @pytest .fixture ()
29
- def services ():
30
- # Unique suffix to create distinct service names
31
- suffix = uuid .uuid4 ().hex [:10 ]
32
- project = os .environ ["GOOGLE_CLOUD_PROJECT" ]
29
+ SUFFIX = uuid .uuid4 ().hex [:10 ]
30
+ PROJECT = os .environ ["GOOGLE_CLOUD_PROJECT" ]
31
+ VPC_CONNECTOR_NAME = "test-connector"
32
+ MEMORYSTORE_REDIS_NAME = "static-test-instance"
33
33
34
- # Create a VPC network
35
- network_name = f"test-network-{ suffix } "
36
- subprocess .run (
37
- [
38
- "gcloud" ,
39
- "compute" ,
40
- "networks" ,
41
- "create" ,
42
- network_name ,
43
- "--project" ,
44
- project ,
45
- ], check = True
46
- )
47
-
48
- # Create a Serverless VPC Access connector
49
- connector_name = f"test-connector-{ suffix } "
50
- subprocess .run (
51
- [
52
- "gcloud" ,
53
- "compute" ,
54
- "networks" ,
55
- "vpc-access" ,
56
- "connectors" ,
57
- "create" ,
58
- connector_name ,
59
- "--network" ,
60
- network_name ,
61
- "--region=us-central1" ,
62
- "--range=192.168.16.0/28" ,
63
- "--project" ,
64
- project ,
65
- ], check = True
66
- )
67
-
68
- # Create a Memorystore Redis instance
69
- instance_name = f"test-instance-{ suffix } "
70
- subprocess .run (
71
- [
72
- "gcloud" ,
73
- "redis" ,
74
- "instances" ,
75
- "create" ,
76
- instance_name ,
77
- "--region=us-central1" ,
78
- "--network" ,
79
- network_name ,
80
- "--project" ,
81
- project ,
82
- ], check = True
83
- )
84
34
35
+ @pytest .fixture
36
+ def redis_host ():
85
37
# Get the Redis instance's IP
86
38
redis_host = subprocess .run (
87
39
[
88
40
"gcloud" ,
89
41
"redis" ,
90
42
"instances" ,
91
43
"describe" ,
92
- instance_name ,
44
+ MEMORYSTORE_REDIS_NAME ,
93
45
"--region=us-central1" ,
94
46
"--format=value(host)" ,
95
47
"--project" ,
96
- project ,
48
+ PROJECT ,
97
49
],
98
50
stdout = subprocess .PIPE ,
99
51
check = True
100
52
).stdout .strip ().decode ()
53
+ yield redis_host
54
+
55
+ # no deletion needs to happen, this is a "get" of a static instance
101
56
57
+
58
+ @pytest .fixture
59
+ def container_image ():
102
60
# Build container image for Cloud Run deployment
103
- image_name = f"gcr.io/{ project } /test-visit-count-{ suffix } "
61
+ image_name = f"gcr.io/{ PROJECT } /test-visit-count-{ SUFFIX } "
104
62
subprocess .run (
105
63
[
106
64
"cp" ,
@@ -116,46 +74,85 @@ def services():
116
74
"--tag" ,
117
75
image_name ,
118
76
"--project" ,
119
- project ,
77
+ PROJECT ,
120
78
], check = True
121
79
)
80
+ yield image_name
81
+
122
82
subprocess .run (["rm" , "Dockerfile" ], check = True )
123
83
84
+ # Delete container image
85
+ subprocess .run (
86
+ [
87
+ "gcloud" ,
88
+ "container" ,
89
+ "images" ,
90
+ "delete" ,
91
+ image_name ,
92
+ "--quiet" ,
93
+ "--project" ,
94
+ PROJECT ,
95
+ ], check = True
96
+ )
97
+
98
+
99
+ @pytest .fixture
100
+ def deployed_service (container_image , redis_host ):
124
101
# Deploy image to Cloud Run
125
- service_name = f"test-visit-count-{ suffix } "
102
+ service_name = f"test-visit-count-{ SUFFIX } "
126
103
subprocess .run (
127
104
[
128
105
"gcloud" ,
129
106
"run" ,
130
107
"deploy" ,
131
108
service_name ,
132
109
"--image" ,
133
- image_name ,
110
+ container_image ,
134
111
"--platform=managed" ,
135
112
"--no-allow-unauthenticated" ,
136
113
"--region=us-central1" ,
137
114
"--vpc-connector" ,
138
- connector_name ,
115
+ VPC_CONNECTOR_NAME ,
139
116
"--set-env-vars" ,
140
117
f"REDISHOST={ redis_host } ,REDISPORT=6379" ,
141
118
"--project" ,
142
- project ,
119
+ PROJECT ,
143
120
], check = True
144
121
)
122
+ yield service_name
145
123
124
+ # Delete Cloud Run service
125
+ subprocess .run (
126
+ [
127
+ "gcloud" ,
128
+ "run" ,
129
+ "services" ,
130
+ "delete" ,
131
+ service_name ,
132
+ "--platform=managed" ,
133
+ "--region=us-central1" ,
134
+ "--quiet" ,
135
+ "--project" ,
136
+ PROJECT ,
137
+ ], check = True
138
+ )
139
+
140
+
141
+ @pytest .fixture
142
+ def service_url_auth_token (deployed_service ):
146
143
# Get Cloud Run service URL and auth token
147
144
service_url = subprocess .run (
148
145
[
149
146
"gcloud" ,
150
147
"run" ,
151
148
"services" ,
152
149
"describe" ,
153
- service_name ,
150
+ deployed_service ,
154
151
"--platform=managed" ,
155
152
"--region=us-central1" ,
156
153
"--format=value(status.url)" ,
157
154
"--project" ,
158
- project ,
155
+ PROJECT ,
159
156
],
160
157
stdout = subprocess .PIPE ,
161
158
check = True
@@ -168,86 +165,11 @@ def services():
168
165
169
166
yield service_url , auth_token
170
167
171
- # Delete Cloud Run service
172
- subprocess .run (
173
- [
174
- "gcloud" ,
175
- "run" ,
176
- "services" ,
177
- "delete" ,
178
- service_name ,
179
- "--platform=managed" ,
180
- "--region=us-central1" ,
181
- "--quiet" ,
182
- "--project" ,
183
- project ,
184
- ], check = True
185
- )
186
-
187
- # Delete container image
188
- subprocess .run (
189
- [
190
- "gcloud" ,
191
- "container" ,
192
- "images" ,
193
- "delete" ,
194
- image_name ,
195
- "--quiet" ,
196
- "--project" ,
197
- project ,
198
- ], check = True
199
- )
200
-
201
- # Delete Redis instance
202
- subprocess .run (
203
- [
204
- "gcloud" ,
205
- "redis" ,
206
- "instances" ,
207
- "delete" ,
208
- instance_name ,
209
- "--region=us-central1" ,
210
- "--quiet" ,
211
- "--async" ,
212
- "--project" ,
213
- project ,
214
- ], check = True
215
- )
216
-
217
- # Delete Serverless VPC Access connector
218
- subprocess .run (
219
- [
220
- "gcloud" ,
221
- "compute" ,
222
- "networks" ,
223
- "vpc-access" ,
224
- "connectors" ,
225
- "delete" ,
226
- connector_name ,
227
- "--region=us-central1" ,
228
- "--quiet" ,
229
- "--project" ,
230
- project ,
231
- ], check = True
232
- )
233
-
234
- # Delete VPC network
235
- subprocess .run (
236
- [
237
- "gcloud" ,
238
- "compute" ,
239
- "networks" ,
240
- "delete" ,
241
- network_name ,
242
- "--quiet" ,
243
- "--project" ,
244
- project ,
245
- ], check = True
246
- )
168
+ # no deletion needed
247
169
248
170
249
- def test_end_to_end (services ):
250
- service_url , auth_token = services
171
+ def test_end_to_end (service_url_auth_token ):
172
+ service_url , auth_token = service_url_auth_token
251
173
252
174
req = request .Request (
253
175
service_url ,
0 commit comments