Dismiss WiFi boot prompt when mobile session opens

This commit is contained in:
2026-10-09 12:26:55 +08:00
parent a277da0f96
commit c0e26b97fe
16 changed files with 250 additions and 18 deletions
@@ -4,9 +4,11 @@ from app.mobile.protocol import Handshake, ProtocolError, fragments
from app.mobile.session import SessionManager
def connection(clock=lambda: 0):
def connection(clock=lambda: 0, *, manager=None, on_session_open=None):
calls = []
manager = SessionManager(lambda method, params: calls.append(method) or {}, lambda: {"device_id": "test"}, clock=clock)
if manager is None:
manager = SessionManager(lambda method, params: calls.append(method) or {}, lambda: {"device_id": "test"},
clock=clock, on_session_open=on_session_open)
assert manager.connect('a')
assert not manager.connect('b')
client = Handshake()
@@ -69,6 +71,42 @@ def test_negotiated_receive_mtu_resets_on_disconnect():
@pytest.mark.parametrize('mtu', [0, 22, 518, True, '247'])
def test_invalid_receive_mtu_never_opens_session(mtu):
manager, cipher, _ = connection()
opened = []
manager, cipher, _ = connection(on_session_open=lambda: opened.append(True))
assert not request(manager, cipher, 1, '1', 'session.open', {'client_name': '手机', 'receive_mtu': mtu})['ok']
assert not manager.opened
assert opened == []
def test_open_notification_only_after_valid_encrypted_session():
opened = []
manager, cipher, _ = connection(on_session_open=lambda: opened.append(manager.status()['connected']))
assert opened == [] # Neither the link nor the handshake is a session.
assert not request(manager, cipher, 1, '1', 'session.open', {'client_name': ''})['ok']
assert opened == []
assert request(manager, cipher, 2, '2', 'session.open', {'client_name': '手机'})['ok']
assert opened == [True]
assert not request(manager, cipher, 3, '3', 'session.open', {'client_name': '手机'})['ok']
request(manager, cipher, 4, '4', 'session.ping')
manager.disconnect('a')
assert opened == [True]
def test_failed_handshake_never_notifies():
opened = []
manager = SessionManager(lambda *args: {}, lambda: {}, on_session_open=lambda: opened.append(True))
assert manager.connect('a')
with pytest.raises(ProtocolError):
for part in fragments(1, 0, b'invalid-handshake', 247):
manager.accept('a', part)
assert not manager.opened
assert opened == []
def test_notification_failure_does_not_break_open_session(caplog):
def failed_notification():
raise OSError('test notification failure')
manager, cipher, _ = connection(on_session_open=failed_notification)
assert request(manager, cipher, 1, '1', 'session.open', {'client_name': '手机'})['ok']
assert request(manager, cipher, 2, '2', 'session.ping')['ok']
assert 'session-open notification failed' in caplog.text