Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions tests/native_host/e2e/cluster.py
Original file line number Diff line number Diff line change
Expand Up @@ -548,6 +548,18 @@ def etcd_member_count(self) -> int:
return len(members)
return 0

def wait_etcd_members(self, count: int, timeout: int = 120) -> int:
"""Poll until etcd reports `count` members. The `ready` phase only means every
k0scontroller unit is systemd-active; etcd quorum converges shortly after."""
Comment thread
yansun1996 marked this conversation as resolved.
deadline = time.time() + timeout
last = 0
while time.time() < deadline:
last = self.etcd_member_count()
if last >= count:
return last
time.sleep(3)
return last

def sacct(self, args: list[str]) -> str:
return self.cli(["sacct"] + args)

Expand Down
8 changes: 5 additions & 3 deletions tests/native_host/e2e/test_k8s_multicp.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,11 @@ def test_three_control_planes_form_etcd_quorum(self, k8s_multicp_cluster):
active = cluster.k8s_active_controllers()
assert len(active) == 3, f"expected 3 active controllers, got {active}"

# Ground truth: the embedded etcd formed a real 3-member quorum.
assert cluster.etcd_member_count() == 3, (
f"expected a 3-member etcd quorum\n{cluster.k8s_status()}"
# Ground truth: the embedded etcd formed a real 3-member quorum. etcd
# membership converges shortly after the cluster reports ready.
Comment thread
yansun1996 marked this conversation as resolved.
members = cluster.wait_etcd_members(3)
assert members == 3, (
f"expected a 3-member etcd quorum, got {members}\n{cluster.k8s_status()}"
)

def test_even_replica_count_rejected(self, k8s_multicp_cluster):
Expand Down