Skip to content

Commit 87e8d36

Browse files
authored
flakiness: fix flaky scram auth (#20)
# Summary - pr migrated from: 10gen/ops-manager-kubernetes#4305 - will be cherry-picked over later ## Proof of Work - test suite is green
1 parent 6d7c9b7 commit 87e8d36

File tree

2 files changed

+70
-2
lines changed

2 files changed

+70
-2
lines changed

docker/mongodb-enterprise-tests/kubetester/kubetester.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
from kubernetes.stream import stream
2828
from kubetester.crypto import wait_for_certs_to_be_issued
2929
from requests.auth import HTTPBasicAuth, HTTPDigestAuth
30+
from tests import test_logger
3031

3132
SSL_CA_CERT = "/var/run/secrets/kubernetes.io/serviceaccount/..data/ca.crt"
3233
EXTERNALLY_MANAGED_TAG = "EXTERNALLY_MANAGED_BY_KUBERNETES"
@@ -46,6 +47,11 @@
4647
"MongoDBMultiCluster": "mongodbmulticluster",
4748
}
4849

50+
from opentelemetry import trace
51+
52+
TRACER = trace.get_tracer("evergreen-agent")
53+
logger = test_logger.get_test_logger(__name__)
54+
4955

5056
def running_locally():
5157
return os.getenv("POD_NAME", "local") == "local"
@@ -946,6 +952,16 @@ def get_automation_config(group_id=None, group_name=None):
946952

947953
return response.json()
948954

955+
@staticmethod
956+
def get_automation_status(group_id=None, group_name=None):
957+
if group_id is None:
958+
group_id = KubernetesTester.get_om_group_id(group_name=group_name)
959+
960+
url = build_automation_status_endpoint(KubernetesTester.get_om_base_url(), group_id)
961+
response = KubernetesTester.om_request("get", url)
962+
963+
return response.json()
964+
949965
@staticmethod
950966
def get_monitoring_config(group_id=None):
951967
if group_id is None:
@@ -1544,6 +1560,10 @@ def build_automation_config_endpoint(base_url, group_id):
15441560
return "{}/api/public/v1.0/groups/{}/automationConfig".format(base_url, group_id)
15451561

15461562

1563+
def build_automation_status_endpoint(base_url, group_id):
1564+
return "{}/api/public/v1.0/groups/{}/automationStatus".format(base_url, group_id)
1565+
1566+
15471567
def build_monitoring_config_endpoint(base_url, group_id):
15481568
return "{}/api/public/v1.0/groups/{}/automationConfig/monitoringAgentConfig".format(base_url, group_id)
15491569

@@ -1683,3 +1703,35 @@ def ensure_ent_version(mdb_version: str) -> str:
16831703
if "-ent" not in mdb_version:
16841704
return mdb_version + "-ent"
16851705
return mdb_version
1706+
1707+
1708+
@TRACER.start_as_current_span("wait_processes_ready")
1709+
def wait_processes_ready():
1710+
# Get current automation status
1711+
def processes_are_ready():
1712+
auto_status = KubernetesTester.get_automation_status()
1713+
goal_version = auto_status.get("goalVersion")
1714+
1715+
logger.info(f"Checking if all processes have reached goal version: {goal_version}")
1716+
processes_not_ready = []
1717+
for process in auto_status.get("processes", []):
1718+
process_name = process.get("name", "unknown")
1719+
process_version = process.get("lastGoalVersionAchieved")
1720+
if process_version != goal_version:
1721+
logger.info(f"Process {process_name} at version {process_version}, expected {goal_version}")
1722+
processes_not_ready.append(process_name)
1723+
1724+
all_processes_ready = len(processes_not_ready) == 0
1725+
if all_processes_ready:
1726+
logger.info("All processes have reached the goal version")
1727+
else:
1728+
logger.info(f"{len(processes_not_ready)} processes have not yet reached the goal version")
1729+
1730+
return all_processes_ready
1731+
1732+
timeout = 600 # 5 minutes timeout
1733+
KubernetesTester.wait_until(
1734+
processes_are_ready,
1735+
timeout=timeout,
1736+
sleep_time=5,
1737+
)

docker/mongodb-enterprise-tests/tests/authentication/sharded_cluster_x509_to_scram_transition.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1+
import time
2+
13
import pytest
4+
from kubetester import kubetester
25
from kubetester.automation_config_tester import AutomationConfigTester
36
from kubetester.certs import (
47
ISSUER_CA_NAME,
@@ -12,11 +15,13 @@
1215
from kubetester.mongotester import ShardedClusterTester
1316
from kubetester.omtester import get_sc_cert_names
1417
from pytest import fixture
18+
from tests import test_logger
1519

1620
MDB_RESOURCE = "sharded-cluster-x509-to-scram-256"
1721
USER_NAME = "mms-user-1"
1822
PASSWORD_SECRET_NAME = "mms-user-1-password"
1923
USER_PASSWORD = "my-password"
24+
logger = test_logger.get_test_logger(__name__)
2025

2126

2227
@fixture(scope="module")
@@ -76,6 +81,8 @@ def test_x509_is_still_configured():
7681
@pytest.mark.e2e_sharded_cluster_x509_to_scram_transition
7782
class TestShardedClusterDisableAuthentication(KubernetesTester):
7883
def test_disable_auth(self, sharded_cluster: MongoDB):
84+
kubetester.wait_processes_ready()
85+
sharded_cluster.assert_reaches_phase(Phase.Running, timeout=800)
7986
sharded_cluster.load()
8087
sharded_cluster["spec"]["security"]["authentication"]["enabled"] = False
8188
sharded_cluster.update()
@@ -90,17 +97,26 @@ def test_ops_manager_state_updated_correctly(self):
9097
tester.assert_authentication_disabled()
9198

9299

100+
from opentelemetry import trace
101+
102+
TRACER = trace.get_tracer("evergreen-agent")
103+
104+
93105
@pytest.mark.e2e_sharded_cluster_x509_to_scram_transition
94106
class TestCanEnableScramSha256:
95-
def test_can_enable_scram_sha_256(self, sharded_cluster: MongoDB):
107+
@TRACER.start_as_current_span("test_can_enable_scram_sha_256")
108+
def test_can_enable_scram_sha_256(self, sharded_cluster: MongoDB, ca_path: str):
109+
kubetester.wait_processes_ready()
110+
sharded_cluster.assert_reaches_phase(Phase.Running, timeout=800)
111+
96112
sharded_cluster.load()
97113
sharded_cluster["spec"]["security"]["authentication"]["enabled"] = True
98114
sharded_cluster["spec"]["security"]["authentication"]["modes"] = [
99115
"SCRAM",
100116
]
101117
sharded_cluster["spec"]["security"]["authentication"]["agents"]["mode"] = "SCRAM"
102118
sharded_cluster.update()
103-
sharded_cluster.assert_reaches_phase(Phase.Running, timeout=1200)
119+
sharded_cluster.assert_reaches_phase(Phase.Running, timeout=800)
104120

105121
def test_assert_connectivity(self, ca_path: str):
106122
ShardedClusterTester(MDB_RESOURCE, 1, ssl=True, ca_path=ca_path).assert_connectivity(attempts=25)

0 commit comments

Comments
 (0)