14
14
from kubetester .kubetester import run_periodically
15
15
from kubetester .mongodb import MongoDB , Phase
16
16
from kubetester .mongodb_user import MongoDBUser
17
+ from kubetester .mongotester import MongoTester
17
18
from kubetester .opsmanager import MongoDBOpsManager
18
19
from pytest import fixture , mark
19
20
from tests .conftest import is_multi_cluster
20
- from tests .opsmanager .backup_snapshot_schedule_tests import BackupSnapshotScheduleTests
21
21
from tests .opsmanager .om_ops_manager_backup import create_aws_secret , create_s3_bucket
22
22
from tests .opsmanager .withMonitoredAppDB .conftest import enable_multi_cluster_deployment
23
+ from tests .shardedcluster .conftest import (
24
+ enable_multi_cluster_deployment as enable_multi_cluster_deployment_mdb ,
25
+ )
26
+ from tests .shardedcluster .conftest import get_mongos_service_names
23
27
24
28
HEAD_PATH = "/head/"
25
29
S3_SECRET_NAME = "my-s3-secret"
@@ -65,8 +69,7 @@ def oplog_replica_set(ops_manager, namespace, custom_mdb_version: str) -> MongoD
65
69
# mongoURI not being updated unless pod is killed. This is documented in CLOUDP-60443, once resolved this skip & comment can be deleted
66
70
resource ["spec" ]["security" ] = {"authentication" : {"enabled" : True , "modes" : ["SCRAM" ]}}
67
71
68
- resource .update ()
69
- return resource
72
+ return resource .update ()
70
73
71
74
72
75
@fixture (scope = "module" )
@@ -78,8 +81,7 @@ def s3_replica_set(ops_manager, namespace, custom_mdb_version: str) -> MongoDB:
78
81
).configure (ops_manager , "s3metadata" )
79
82
resource .set_version (custom_mdb_version )
80
83
81
- resource .update ()
82
- return resource
84
+ return resource .update ()
83
85
84
86
85
87
@fixture (scope = "module" )
@@ -90,8 +92,8 @@ def blockstore_replica_set(ops_manager, namespace, custom_mdb_version: str) -> M
90
92
name = BLOCKSTORE_RS_NAME ,
91
93
).configure (ops_manager , "blockstore" )
92
94
resource .set_version (custom_mdb_version )
93
- resource . update ()
94
- return resource
95
+
96
+ return resource . update ()
95
97
96
98
97
99
@fixture (scope = "module" )
@@ -259,11 +261,23 @@ def mdb_latest(self, ops_manager: MongoDBOpsManager, namespace, custom_mdb_versi
259
261
namespace = namespace ,
260
262
name = "mdb-four-two" ,
261
263
).configure (ops_manager , "firstProject" )
262
- resource .set_version (ensure_ent_version (custom_mdb_version ))
264
+
265
+ if try_load (resource ):
266
+ return resource
267
+
268
+ if is_multi_cluster ():
269
+ enable_multi_cluster_deployment_mdb (
270
+ resource ,
271
+ shard_members_array = [1 , 1 , 1 ],
272
+ mongos_members_array = [1 , None , None ],
273
+ configsrv_members_array = [None , 1 , None ],
274
+ )
275
+
263
276
resource .configure_backup (mode = "disabled" )
277
+ resource .set_version (ensure_ent_version (custom_mdb_version ))
278
+ resource .set_architecture_annotation ()
264
279
265
- try_load (resource )
266
- return resource
280
+ return resource .update ()
267
281
268
282
@fixture (scope = "class" )
269
283
def mdb_prev (self , ops_manager : MongoDBOpsManager , namespace , custom_mdb_prev_version : str ):
@@ -272,23 +286,37 @@ def mdb_prev(self, ops_manager: MongoDBOpsManager, namespace, custom_mdb_prev_ve
272
286
namespace = namespace ,
273
287
name = "mdb-four-zero" ,
274
288
).configure (ops_manager , "secondProject" )
275
- resource .set_version (ensure_ent_version (custom_mdb_prev_version ))
289
+
290
+ if try_load (resource ):
291
+ return resource
292
+
293
+ if is_multi_cluster ():
294
+ enable_multi_cluster_deployment_mdb (
295
+ resource ,
296
+ shard_members_array = [1 , 1 , 1 ],
297
+ mongos_members_array = [1 , None , None ],
298
+ configsrv_members_array = [None , 1 , None ],
299
+ )
300
+
276
301
resource .configure_backup (mode = "disabled" )
302
+ resource .set_version (ensure_ent_version (custom_mdb_prev_version ))
303
+ resource .set_architecture_annotation ()
277
304
278
- try_load (resource )
279
- return resource
305
+ return resource .update ()
280
306
281
- def test_mdbs_created (self , mdb_latest : MongoDB , mdb_prev : MongoDB ):
282
- mdb_latest .update ()
283
- mdb_prev .update ()
284
- mdb_latest .assert_reaches_phase (Phase .Running , timeout = 1000 )
285
- mdb_prev .assert_reaches_phase (Phase .Running , timeout = 1000 )
307
+ @fixture (scope = "class" )
308
+ def mdb_latest_tester (self , mdb_latest : MongoDB ) -> MongoTester :
309
+ service_names = get_mongos_service_names (mdb_latest )
286
310
287
- def test_mdbs_enable_backup (self , mdb_latest : MongoDB , mdb_prev : MongoDB ):
288
- mdb_latest .load ()
311
+ return mdb_latest .tester (service_names = service_names )
289
312
313
+ def test_mdbs_created (self , mdb_latest : MongoDB , mdb_prev : MongoDB ):
314
+ mdb_latest .assert_reaches_phase (Phase .Running , timeout = 1200 )
315
+ mdb_prev .assert_reaches_phase (Phase .Running , timeout = 1200 )
316
+
317
+ def test_mdbs_enable_backup (self , mdb_latest : MongoDB , mdb_prev : MongoDB , mdb_latest_tester : MongoTester ):
290
318
def until_shards_are_here ():
291
- shards = mdb_latest . tester () .client .admin .command ("listShards" )
319
+ shards = mdb_latest_tester .client .admin .command ("listShards" )
292
320
if len (shards ["shards" ]) == 2 :
293
321
return True
294
322
else :
@@ -299,26 +327,27 @@ def until_shards_are_here():
299
327
# we need to sleep here to give OM some time to recognize the shards.
300
328
# otherwise, if you start a backup during a topology change will lead the backup to be aborted.
301
329
time .sleep (30 )
330
+ mdb_latest .load ()
302
331
mdb_latest .configure_backup (mode = "enabled" )
303
332
mdb_latest .update ()
304
333
305
334
mdb_prev .load ()
306
335
mdb_prev .configure_backup (mode = "enabled" )
307
336
mdb_prev .update ()
308
337
309
- mdb_prev .assert_reaches_phase (Phase .Running , timeout = 600 )
310
- mdb_latest .assert_reaches_phase (Phase .Running , timeout = 600 )
338
+ mdb_prev .assert_reaches_phase (Phase .Running , timeout = 1200 )
339
+ mdb_latest .assert_reaches_phase (Phase .Running , timeout = 1200 )
311
340
312
341
def test_mdbs_backuped (self , ops_manager : MongoDBOpsManager ):
313
342
om_tester_first = ops_manager .get_om_tester (project_name = "firstProject" )
314
343
om_tester_second = ops_manager .get_om_tester (project_name = "secondProject" )
315
344
316
345
# wait until a first snapshot is ready for both
317
346
om_tester_first .wait_until_backup_snapshots_are_ready (
318
- expected_count = 1 , expected_config_count = 4 , is_sharded_cluster = True
347
+ expected_count = 1 , expected_config_count = 4 , is_sharded_cluster = True , timeout = 1600
319
348
)
320
349
om_tester_second .wait_until_backup_snapshots_are_ready (
321
- expected_count = 1 , expected_config_count = 4 , is_sharded_cluster = True
350
+ expected_count = 1 , expected_config_count = 4 , is_sharded_cluster = True , timeout = 1600
322
351
)
323
352
324
353
def test_can_transition_from_started_to_stopped (self , mdb_latest : MongoDB , mdb_prev : MongoDB ):
@@ -327,22 +356,22 @@ def test_can_transition_from_started_to_stopped(self, mdb_latest: MongoDB, mdb_p
327
356
mdb_prev .assert_backup_reaches_status ("STARTED" , timeout = 100 )
328
357
mdb_prev .configure_backup (mode = "disabled" )
329
358
mdb_prev .update ()
330
- mdb_prev .assert_backup_reaches_status ("STOPPED" , timeout = 600 )
359
+ mdb_prev .assert_backup_reaches_status ("STOPPED" , timeout = 1600 )
331
360
332
361
def test_can_transition_from_started_to_terminated_0 (self , mdb_latest : MongoDB , mdb_prev : MongoDB ):
333
362
# a direct transition from enabled to terminated is not possible
334
363
# the operator should handle the transition from STARTED -> STOPPED -> TERMINATING
335
364
mdb_latest .assert_backup_reaches_status ("STARTED" , timeout = 100 )
336
365
mdb_latest .configure_backup (mode = "terminated" )
337
366
mdb_latest .update ()
338
- mdb_latest .assert_backup_reaches_status ("TERMINATING" , timeout = 600 )
367
+ mdb_latest .assert_backup_reaches_status ("TERMINATING" , timeout = 1600 )
339
368
340
369
def test_backup_terminated_for_deleted_resource (self , ops_manager : MongoDBOpsManager , mdb_prev : MongoDB ):
341
370
# re-enable backup
342
371
mdb_prev .configure_backup (mode = "enabled" )
343
372
mdb_prev ["spec" ]["backup" ]["autoTerminateOnDeletion" ] = True
344
373
mdb_prev .update ()
345
- mdb_prev .assert_backup_reaches_status ("STARTED" , timeout = 600 )
374
+ mdb_prev .assert_backup_reaches_status ("STARTED" , timeout = 1600 )
346
375
mdb_prev .delete ()
347
376
348
377
def resource_is_deleted () -> bool :
0 commit comments