37
37
# longer appearing in the AMQ API...
38
38
DELETE_TIMEOUT_SECONDS = 300
39
39
40
+ UPDATE_WAITE_INTERVAL_SLEEP_SECONDS = 20
41
+
40
42
CREATE_INTERVAL_SLEEP_SECONDS = 30
41
43
# Time to wait before we get to an expected RUNNING state.
42
44
# In my experience, it regularly takes more than 6 minutes to create a
@@ -103,6 +105,46 @@ def admin_user_pass_secret():
103
105
yield ns , name , key
104
106
k8s .delete_secret (ns , name )
105
107
108
+ @pytest .fixture (scope = "module" )
109
+ def test_broker_nonpublic (admin_user_pass_secret ):
110
+ resource_name = random_suffix_name ("my-rabbit-broker-non-public" , 32 )
111
+ aup_sec_ns , aup_sec_name , aup_sec_key = admin_user_pass_secret
112
+
113
+ replacements = REPLACEMENT_VALUES .copy ()
114
+ replacements ["BROKER_NAME" ] = resource_name
115
+ replacements ["ADMIN_USER_PASS_SECRET_NAMESPACE" ] = aup_sec_ns
116
+ replacements ["ADMIN_USER_PASS_SECRET_NAME" ] = aup_sec_name
117
+ replacements ["ADMIN_USER_PASS_SECRET_KEY" ] = aup_sec_key
118
+
119
+ resource_data = load_mq_resource (
120
+ "broker_rabbitmq_non_public" ,
121
+ additional_replacements = replacements ,
122
+ )
123
+ logging .error (resource_data )
124
+
125
+ # Create the k8s resource
126
+ ref = k8s .CustomResourceReference (
127
+ CRD_GROUP , CRD_VERSION , RESOURCE_PLURAL ,
128
+ resource_name , namespace = "default" ,
129
+ )
130
+ k8s .create_custom_resource (ref , resource_data )
131
+ cr = k8s .wait_resource_consumed_by_controller (ref )
132
+
133
+ assert cr is not None
134
+
135
+ broker_id = cr ['status' ]['brokerID' ]
136
+
137
+ yield ref , cr , broker_id
138
+
139
+ try :
140
+ _ , deleted = k8s .delete_custom_resource (ref , 3 , 10 )
141
+ assert deleted
142
+ time .sleep (DELETE_WAIT_AFTER_SECONDS )
143
+ except :
144
+ pass
145
+
146
+ wait_till_deleted (broker_id )
147
+
106
148
@pytest .fixture (scope = "module" )
107
149
def test_broker_with_security_group (admin_user_pass_secret ):
108
150
resource_name = random_suffix_name ("rabbitmq-security-group" , 32 )
@@ -183,37 +225,12 @@ def test_rabbitmq_nondefault_security_group(self, amq_client, test_broker_with_s
183
225
184
226
185
227
186
- def test_create_delete_non_public (
228
+ def test_crud_non_public (
187
229
self ,
188
230
amq_client ,
189
- admin_user_pass_secret ,
231
+ test_broker_nonpublic ,
190
232
):
191
- resource_name = random_suffix_name ("my-rabbit-broker-non-public" , 32 )
192
- aup_sec_ns , aup_sec_name , aup_sec_key = admin_user_pass_secret
193
-
194
- replacements = REPLACEMENT_VALUES .copy ()
195
- replacements ["BROKER_NAME" ] = resource_name
196
- replacements ["ADMIN_USER_PASS_SECRET_NAMESPACE" ] = aup_sec_ns
197
- replacements ["ADMIN_USER_PASS_SECRET_NAME" ] = aup_sec_name
198
- replacements ["ADMIN_USER_PASS_SECRET_KEY" ] = aup_sec_key
199
-
200
- resource_data = load_mq_resource (
201
- "broker_rabbitmq_non_public" ,
202
- additional_replacements = replacements ,
203
- )
204
- logging .error (resource_data )
205
-
206
- # Create the k8s resource
207
- ref = k8s .CustomResourceReference (
208
- CRD_GROUP , CRD_VERSION , RESOURCE_PLURAL ,
209
- resource_name , namespace = "default" ,
210
- )
211
- k8s .create_custom_resource (ref , resource_data )
212
- cr = k8s .wait_resource_consumed_by_controller (ref )
213
-
214
- assert cr is not None
215
-
216
- broker_id = cr ['status' ]['brokerID' ]
233
+ ref , cr , broker_id = test_broker_nonpublic
217
234
218
235
# Let's check that the Broker appears in AmazonMQ
219
236
aws_res = amq_client .describe_broker (BrokerId = broker_id )
@@ -239,9 +256,49 @@ def test_create_delete_non_public(
239
256
assert len (latest_res ['status' ]['brokerInstances' ]) == 1
240
257
assert len (latest_res ['status' ]['brokerInstances' ][0 ]['endpoints' ]) > 0
241
258
242
- # Delete the k8s resource on teardown of the module
243
- k8s .delete_custom_resource (ref )
244
- time .sleep (DELETE_WAIT_AFTER_SECONDS )
245
- wait_till_deleted (broker_id )
259
+ assert latest_res ["spec" ]["maintenanceWindowStartTime" ] is not None
260
+ assert latest_res ["spec" ]["maintenanceWindowStartTime" ]["dayOfWeek" ] == "MONDAY"
261
+ assert latest_res ["spec" ]["maintenanceWindowStartTime" ]["timeOfDay" ] == "22:00"
262
+ assert latest_res ["spec" ]["maintenanceWindowStartTime" ]["timeZone" ] == "UTC"
263
+
264
+
265
+ # Update the broker's maintenance window
266
+ maintenance_window_patch = {
267
+ "spec" : {
268
+ "maintenanceWindowStartTime" : {
269
+ "dayOfWeek" : "TUESDAY" ,
270
+ "timeOfDay" : "02:00" ,
271
+ "timeZone" : "UTC" ,
272
+ }
273
+ }
274
+ }
275
+
276
+ k8s .patch_custom_resource (ref , maintenance_window_patch )
277
+ time .sleep (UPDATE_WAITE_INTERVAL_SLEEP_SECONDS )
278
+
279
+ assert k8s .wait_on_condition (ref , "ACK.ResourceSynced" , "True" , wait_periods = 5 )
280
+
281
+ updated_res = k8s .get_resource (ref )
282
+ assert updated_res ["spec" ]["maintenanceWindowStartTime" ] is not None
283
+ assert updated_res ["spec" ]["maintenanceWindowStartTime" ]["dayOfWeek" ] == "TUESDAY"
284
+ assert updated_res ["spec" ]["maintenanceWindowStartTime" ]["timeOfDay" ] == "02:00"
285
+ assert updated_res ["spec" ]["maintenanceWindowStartTime" ]["timeZone" ] == "UTC"
286
+
287
+ updated_broker = amq_client .describe_broker (BrokerId = broker_id )
288
+ assert updated_broker ['MaintenanceWindowStartTime' ] is not None
289
+ assert updated_broker ['MaintenanceWindowStartTime' ]['DayOfWeek' ] == "TUESDAY"
290
+ assert updated_broker ['MaintenanceWindowStartTime' ]['TimeOfDay' ] == "02:00"
291
+ assert updated_broker ['MaintenanceWindowStartTime' ]['TimeZone' ] == "UTC"
292
+
293
+ # Double check that other spec fields have not being set to nil.
294
+ assert updated_res ["spec" ]["deploymentMode" ] == "SINGLE_INSTANCE"
295
+
296
+
297
+
298
+
299
+
300
+
301
+
302
+
246
303
247
304
0 commit comments