Files
cc-ci/tests/mumble/custom/test_protocol_handshake.py
autonomic-bot 07fc6d4af5
Some checks failed
continuous-integration/drone/push Build is failing
fix(mumble): widen handshake readiness budget 60s->180s (load flake stabilization)
The TCP READY_PROBE proves 64738 is listening, but the murmur control channel needs more warmup to
complete a full TLS+ServerSync handshake; under concurrent sweep load that exceeded the 60s budget
(green in isolation, red under load). Longer budget absorbs the delay; assertions unchanged (a dead
server still fails after all retries).
2026-06-18 01:58:16 +00:00

39 lines
2.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""mumble — protocol integration parity port (Phase 2 P2 + §4.3 recipe-specific depth).
SOURCE: recipe-info/mumble/tests/mumble_connect.py — "connects via TLS, authenticates, verifies
server version, channel list, welcome text, and ServerSync handshake. Zero external dependencies."
This is mumble's characteristic "is it really working" check: the voice server has no HTTP API, so
the meaningful liveness/behaviour proof is the control-channel handshake — a TLS connection that is
ACCEPTED (anonymous auth, no Reject), receives the server Version, sees the root channel
(channel presence — §4.3 "channel presence beyond TCP health"), and completes with ServerSync.
"""
from __future__ import annotations
import os
import sys
sys.path.insert(0, os.path.dirname(__file__))
import _mumble_proto # noqa: E402
def test_handshake_completes_with_channel_presence(live_app):
# Readiness budget: 36×5s = 180s. The TCP READY_PROBE (recipe_meta) only proves port 64738 is
# LISTENING; the murmur control channel needs additional warmup before it completes a full
# TLS+Version+ServerSync handshake. Under concurrent node load (the canon sweep) that warmup
# exceeded the old 60s budget and flaked this test RED, while it is reliably GREEN in isolation
# (phase redfix M1: 3× isolation green, 0 isolation reds). The longer budget absorbs the
# load-induced readiness delay WITHOUT weakening the assertion — a genuinely non-responsive
# server still exhausts all retries and FAILs (the asserts below are unchanged).
r = _mumble_proto.retry_handshake(attempts=36, interval=5.0)
assert r["tls_connect"], f"TLS connection to 127.0.0.1:64738 failed — {r.get('error')}"
assert r["server_version"] is not None, "server did not send a Version message"
assert r["auth_accepted"], f"authentication not accepted — {r.get('error')}"
# Channel presence: the server must expose at least the root channel (beyond a bare TCP open).
assert (
len(r["channels"]) >= 1
), f"server reported no channels (expected >=1 root channel) — {r!r}"
assert r["server_sync"], f"ServerSync handshake did not complete — {r.get('error')}"