Skip to content

Commit ee211d1

Browse files
MaciejKarasfealebenpae
authored andcommitted
CLOUDP-278184 - om_ops_manager_backup_sharded_cluster test multi-cluster adoption (#3913)
# Summary CLOUDP-278184 - om_ops_manager_backup_sharded_cluster test multi-cluster adoption ## Documentation changes * [ ] Add an entry to [release notes](.../RELEASE_NOTES.md). * [ ] When needed, make sure you create a new [DOCSP ticket](https://jira.mongodb.org/projects/DOCSP) that documents your change. ## Changes to CRDs * [ ] Add `slaskawi`(Sebastian) and `@giohan` (George) as reviewers. * [ ] Make sure any changes are reflected on `/public/samples` directory.
1 parent 4445f12 commit ee211d1

File tree

5 files changed

+75
-52
lines changed

5 files changed

+75
-52
lines changed

docker/mongodb-enterprise-tests/tests/opsmanager/om_ops_manager_backup_sharded_cluster.py

Lines changed: 57 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,16 @@
1414
from kubetester.kubetester import run_periodically
1515
from kubetester.mongodb import MongoDB, Phase
1616
from kubetester.mongodb_user import MongoDBUser
17+
from kubetester.mongotester import MongoTester
1718
from kubetester.opsmanager import MongoDBOpsManager
1819
from pytest import fixture, mark
1920
from tests.conftest import is_multi_cluster
20-
from tests.opsmanager.backup_snapshot_schedule_tests import BackupSnapshotScheduleTests
2121
from tests.opsmanager.om_ops_manager_backup import create_aws_secret, create_s3_bucket
2222
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
2327

2428
HEAD_PATH = "/head/"
2529
S3_SECRET_NAME = "my-s3-secret"
@@ -65,8 +69,7 @@ def oplog_replica_set(ops_manager, namespace, custom_mdb_version: str) -> MongoD
6569
# mongoURI not being updated unless pod is killed. This is documented in CLOUDP-60443, once resolved this skip & comment can be deleted
6670
resource["spec"]["security"] = {"authentication": {"enabled": True, "modes": ["SCRAM"]}}
6771

68-
resource.update()
69-
return resource
72+
return resource.update()
7073

7174

7275
@fixture(scope="module")
@@ -78,8 +81,7 @@ def s3_replica_set(ops_manager, namespace, custom_mdb_version: str) -> MongoDB:
7881
).configure(ops_manager, "s3metadata")
7982
resource.set_version(custom_mdb_version)
8083

81-
resource.update()
82-
return resource
84+
return resource.update()
8385

8486

8587
@fixture(scope="module")
@@ -90,8 +92,8 @@ def blockstore_replica_set(ops_manager, namespace, custom_mdb_version: str) -> M
9092
name=BLOCKSTORE_RS_NAME,
9193
).configure(ops_manager, "blockstore")
9294
resource.set_version(custom_mdb_version)
93-
resource.update()
94-
return resource
95+
96+
return resource.update()
9597

9698

9799
@fixture(scope="module")
@@ -259,11 +261,23 @@ def mdb_latest(self, ops_manager: MongoDBOpsManager, namespace, custom_mdb_versi
259261
namespace=namespace,
260262
name="mdb-four-two",
261263
).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+
263276
resource.configure_backup(mode="disabled")
277+
resource.set_version(ensure_ent_version(custom_mdb_version))
278+
resource.set_architecture_annotation()
264279

265-
try_load(resource)
266-
return resource
280+
return resource.update()
267281

268282
@fixture(scope="class")
269283
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
272286
namespace=namespace,
273287
name="mdb-four-zero",
274288
).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+
276301
resource.configure_backup(mode="disabled")
302+
resource.set_version(ensure_ent_version(custom_mdb_prev_version))
303+
resource.set_architecture_annotation()
277304

278-
try_load(resource)
279-
return resource
305+
return resource.update()
280306

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)
286310

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)
289312

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):
290318
def until_shards_are_here():
291-
shards = mdb_latest.tester().client.admin.command("listShards")
319+
shards = mdb_latest_tester.client.admin.command("listShards")
292320
if len(shards["shards"]) == 2:
293321
return True
294322
else:
@@ -299,26 +327,27 @@ def until_shards_are_here():
299327
# we need to sleep here to give OM some time to recognize the shards.
300328
# otherwise, if you start a backup during a topology change will lead the backup to be aborted.
301329
time.sleep(30)
330+
mdb_latest.load()
302331
mdb_latest.configure_backup(mode="enabled")
303332
mdb_latest.update()
304333

305334
mdb_prev.load()
306335
mdb_prev.configure_backup(mode="enabled")
307336
mdb_prev.update()
308337

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)
311340

312341
def test_mdbs_backuped(self, ops_manager: MongoDBOpsManager):
313342
om_tester_first = ops_manager.get_om_tester(project_name="firstProject")
314343
om_tester_second = ops_manager.get_om_tester(project_name="secondProject")
315344

316345
# wait until a first snapshot is ready for both
317346
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
319348
)
320349
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
322351
)
323352

324353
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
327356
mdb_prev.assert_backup_reaches_status("STARTED", timeout=100)
328357
mdb_prev.configure_backup(mode="disabled")
329358
mdb_prev.update()
330-
mdb_prev.assert_backup_reaches_status("STOPPED", timeout=600)
359+
mdb_prev.assert_backup_reaches_status("STOPPED", timeout=1600)
331360

332361
def test_can_transition_from_started_to_terminated_0(self, mdb_latest: MongoDB, mdb_prev: MongoDB):
333362
# a direct transition from enabled to terminated is not possible
334363
# the operator should handle the transition from STARTED -> STOPPED -> TERMINATING
335364
mdb_latest.assert_backup_reaches_status("STARTED", timeout=100)
336365
mdb_latest.configure_backup(mode="terminated")
337366
mdb_latest.update()
338-
mdb_latest.assert_backup_reaches_status("TERMINATING", timeout=600)
367+
mdb_latest.assert_backup_reaches_status("TERMINATING", timeout=1600)
339368

340369
def test_backup_terminated_for_deleted_resource(self, ops_manager: MongoDBOpsManager, mdb_prev: MongoDB):
341370
# re-enable backup
342371
mdb_prev.configure_backup(mode="enabled")
343372
mdb_prev["spec"]["backup"]["autoTerminateOnDeletion"] = True
344373
mdb_prev.update()
345-
mdb_prev.assert_backup_reaches_status("STARTED", timeout=600)
374+
mdb_prev.assert_backup_reaches_status("STARTED", timeout=1600)
346375
mdb_prev.delete()
347376

348377
def resource_is_deleted() -> bool:

docker/mongodb-enterprise-tests/tests/shardedcluster/conftest.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,12 @@ def get_member_cluster_clients_using_cluster_mapping(resource_name: str, namespa
6868
return get_member_cluster_clients(cluster_mapping)
6969

7070

71-
def get_mongos_service_names(sc) -> [str]:
71+
def get_mongos_service_names(resource: MongoDB):
7272
service_names = []
73-
for cluster_member_client in get_member_cluster_clients_using_cluster_mapping(sc.name, sc.namespace):
74-
for member_idx in range(sc.mongos_members_in_cluster(cluster_member_client.cluster_name)):
75-
service_names.append(sc.mongos_service_name(member_idx, cluster_member_client.cluster_index))
73+
for cluster_member_client in get_member_cluster_clients_using_cluster_mapping(resource.name, resource.namespace):
74+
for member_idx in range(resource.mongos_members_in_cluster(cluster_member_client.cluster_name)):
75+
service_name = resource.mongos_service_name(member_idx, cluster_member_client.cluster_index)
76+
service_names.append(service_name)
7677

7778
return service_names
7879

docker/mongodb-enterprise-tests/tests/shardedcluster/sharded_cluster.py

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from tests.shardedcluster.conftest import (
1313
enable_multi_cluster_deployment,
1414
get_member_cluster_clients_using_cluster_mapping,
15+
get_mongos_service_names,
1516
)
1617

1718
SCALED_SHARD_COUNT = 2
@@ -81,21 +82,17 @@ def test_mongod_sharded_cluster_service(self, sc: MongoDB):
8182
# When testing locally make sure you have kubefwd forwarding all cluster hostnames
8283
# kubefwd does not contain fix for multiple cluster, use https://github.com/lsierant/kubefwd fork instead
8384
def test_shards_were_configured_and_accessible(self, sc: MongoDB):
84-
for cluster_member_client in get_member_cluster_clients_using_cluster_mapping(sc.name, sc.namespace):
85-
for member_idx in range(sc.mongos_members_in_cluster(cluster_member_client.cluster_name)):
86-
service_name = sc.mongos_service_name(member_idx, cluster_member_client.cluster_index)
87-
tester = sc.tester(service_names=[service_name])
88-
tester.assert_connectivity()
85+
for service_name in get_mongos_service_names(sc):
86+
tester = sc.tester(service_names=[service_name])
87+
tester.assert_connectivity()
8988

9089
@skip_if_local() # Local machine DNS don't contain K8s CoreDNS SRV records which are required
9190
@skip_if_multi_cluster() # srv option does not work for multi-cluster tests as each cluster DNS contains entries
9291
# related only to that cluster. Additionally, we don't pass srv option when building multi-cluster conn string
9392
def test_shards_were_configured_with_srv_and_accessible(self, sc: MongoDB):
94-
for cluster_member_client in get_member_cluster_clients_using_cluster_mapping(sc.name, sc.namespace):
95-
for member_idx in range(sc.mongos_members_in_cluster(cluster_member_client.cluster_name)):
96-
service_name = sc.mongos_service_name(member_idx, cluster_member_client.cluster_index)
97-
tester = sc.tester(service_names=[service_name], srv=True)
98-
tester.assert_connectivity()
93+
for service_name in get_mongos_service_names(sc):
94+
tester = sc.tester(service_names=[service_name], srv=True)
95+
tester.assert_connectivity()
9996

10097
def test_monitoring_versions(self, sc: MongoDB):
10198
"""Verifies that monitoring agent is configured for each process in the deployment"""

docker/mongodb-enterprise-tests/tests/shardedcluster/sharded_cluster_pv.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from tests.shardedcluster.conftest import (
1212
enable_multi_cluster_deployment,
1313
get_member_cluster_clients_using_cluster_mapping,
14+
get_mongos_service_names,
1415
)
1516

1617

@@ -119,11 +120,9 @@ def test_pvc_are_bound(self, sc: MongoDB):
119120
self.check_pvc_labels(pvc)
120121

121122
def test_mongos_are_reachable(self, sc: MongoDB):
122-
for cluster_member_client in get_member_cluster_clients_using_cluster_mapping(sc.name, sc.namespace):
123-
for member_idx in range(sc.mongos_members_in_cluster(cluster_member_client.cluster_name)):
124-
service_name = sc.mongos_service_name(member_idx, cluster_member_client.cluster_index)
125-
tester = sc.tester(service_names=[service_name])
126-
tester.assert_connectivity()
123+
for service_name in get_mongos_service_names(sc):
124+
tester = sc.tester(service_names=[service_name])
125+
tester.assert_connectivity()
127126

128127

129128
@mark.e2e_sharded_cluster_pv

docker/mongodb-enterprise-tests/tests/shardedcluster/sharded_cluster_upgrade_downgrade.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from tests.shardedcluster.conftest import (
1111
enable_multi_cluster_deployment,
1212
get_member_cluster_clients_using_cluster_mapping,
13+
get_mongos_service_names,
1314
)
1415

1516

@@ -36,11 +37,7 @@ def sc(namespace: str, custom_mdb_prev_version: str) -> MongoDB:
3637

3738
@fixture(scope="module")
3839
def mongod_tester(sc: MongoDB) -> MongoTester:
39-
service_names = []
40-
for cluster_member_client in get_member_cluster_clients_using_cluster_mapping(sc.name, sc.namespace):
41-
for member_idx in range(sc.mongos_members_in_cluster(cluster_member_client.cluster_name)):
42-
service_name = sc.mongos_service_name(member_idx, cluster_member_client.cluster_index)
43-
service_names.append(service_name)
40+
service_names = get_mongos_service_names(sc)
4441

4542
return sc.tester(service_names=service_names)
4643

0 commit comments

Comments
 (0)