fix(reliability): supervisor restores hop baseline unless a role holds the pause

This commit is contained in:
2026-08-22 19:31:15 -06:00
parent 107cf17611
commit 712d381093
2 changed files with 83 additions and 0 deletions
+62
View File
@@ -244,3 +244,65 @@ class SupervisorExtrasTest(unittest.TestCase):
if __name__ == '__main__':
unittest.main()
class HopBaselineTest(unittest.TestCase):
def setUp(self):
self.runs = []
self.old_run = server.device_run
self.old_iface = server._iface_up
server._iface_up = lambda name: True
def fake_run(args, timeout=20, input_data=None):
a = list(args)
self.runs.append(a)
if a[:2] == ['pidof', 'pineapd']:
return (0, '123\n', '')
if a[:3] == ['uci', 'get', 'pineapd.wlan1mon.hop']:
return (0, self.hop + '\n', '')
return (0, '', '')
server.device_run = fake_run
self.hop = '0'
def tearDown(self):
server.device_run = self.old_run
server._iface_up = self.old_iface
server._health['ticks'] = 0
def test_resume_called_when_not_held(self):
import unittest.mock as um
old_held = server._HOP_PAUSE_HELD
server._HOP_PAUSE_HELD = False
server._health['ticks'] = server.HEALTH_STA_PARK_INTERVAL - 1
try:
with mock.patch.object(server, '_sta_uplink_enabled',
return_value=False), \
mock.patch.object(server, '_raise_monitors',
return_value=[]), \
mock.patch('mk8_guard.reconcile',
return_value={'changed': [], 'pool_cleared': False,
'monitors_raised': []}), \
mock.patch.object(server, '_resume_hop') as resume:
server.health_check()
resume.assert_called_once()
finally:
server._HOP_PAUSE_HELD = old_held
def test_resume_skipped_while_pause_held(self):
old_held = server._HOP_PAUSE_HELD
server._HOP_PAUSE_HELD = True
server._health['ticks'] = server.HEALTH_STA_PARK_INTERVAL - 1
try:
with mock.patch.object(server, '_sta_uplink_enabled',
return_value=False), \
mock.patch.object(server, '_raise_monitors',
return_value=[]), \
mock.patch('mk8_guard.reconcile',
return_value={'changed': [], 'pool_cleared': False,
'monitors_raised': []}), \
mock.patch.object(server, '_resume_hop') as resume:
server.health_check()
resume.assert_not_called()
finally:
server._HOP_PAUSE_HELD = old_held