Files
Mark-VIII/tests/test_pineap_modes.py
T
2026-08-11 20:24:24 -07:00

127 lines
5.1 KiB
Python

import os
import shutil
import sys
import tempfile
import unittest
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'payload', 'user', 'remote_access', 'pager-webui'))
import server
def setUpModule():
__import__('importlib').reload(server)
def ctx(body=None):
return type('C', (), {'body': body, 'args': (), 'query': {}})()
class PineapModeTest(unittest.TestCase):
def setUp(self):
self.tmp = tempfile.mkdtemp(prefix='pager-mode-')
self.old_state_file = server.PINEAP_STATE_FILE
self.old_proxy = server._daemon_proxy
self.old_sock = server.daemon_sock_call
server.PINEAP_STATE_FILE = os.path.join(self.tmp, 'state.json')
def tearDown(self):
server.PINEAP_STATE_FILE = self.old_state_file
server._daemon_proxy = self.old_proxy
server.daemon_sock_call = self.old_sock
shutil.rmtree(self.tmp)
def test_passive_applies_mark_vii_supported_preset(self):
calls = []
server._daemon_proxy = lambda method, path, body=None, timeout=15: (
calls.append((method, path, body)) or (200, {'success': True}))
status, payload = server.h_pineap_mode_post(ctx({'mode': 'passive'}))
self.assertEqual(status, 200)
self.assertEqual([c[1] for c in calls], [
'hostapd/enable_pineap', 'ssidpool/enable_collect',
'ssidpool/disable'])
self.assertEqual(calls[0][2], {'enable': False})
self.assertEqual(payload['mode'], 'passive')
self.assertTrue(payload['collect'])
self.assertFalse(payload['advertise'])
self.assertFalse(payload['karma'])
self.assertFalse(payload['enabled'])
def test_active_enables_response_engine_and_pool_broadcasting(self):
calls = []
server._daemon_proxy = lambda method, path, body=None, timeout=15: (
calls.append((method, path, body)) or (200, {'success': True}))
status, payload = server.h_pineap_mode_post(ctx({'mode': 'active'}))
self.assertEqual(status, 200)
self.assertEqual(calls[0], ('PUT', 'hostapd/enable_pineap', {'enable': True}))
self.assertNotIn('mimic/disable', [c[1] for c in calls])
self.assertEqual(calls[-1], ('POST', 'ssidpool/enable', {'enable': True}))
self.assertEqual(payload['mode'], 'active')
self.assertTrue(payload['advertise'])
self.assertTrue(payload['karma'])
self.assertTrue(payload['enabled'])
def test_advanced_preserves_device_settings(self):
calls = []
server._daemon_proxy = lambda *args, **kwargs: (calls.append(args) or (200, {}))
status, payload = server.h_pineap_mode_post(ctx({'mode': 'advanced'}))
self.assertEqual(status, 200)
self.assertEqual(calls, [])
self.assertEqual(payload['mode'], 'advanced')
def test_get_invalidates_preset_when_device_state_disagrees(self):
server.update_pineap_state(mode='passive', collect=True, advertise=False)
def fake(method, path, body=None, timeout=10):
if path.endswith('/get_config') and 'hostapd' not in path:
return 200, {'autossidpool': False}
return 200, {'pineap_disabled': False}
server.daemon_sock_call = fake
status, payload = server.h_pineap_mode_get(ctx())
self.assertEqual(status, 200)
self.assertEqual(payload['mode'], 'advanced')
self.assertFalse(payload['collect'])
def test_get_keeps_passive_when_response_engine_is_disabled(self):
server.update_pineap_state(mode='passive', enabled=False,
collect=True, advertise=False)
def fake(method, path, body=None, timeout=10):
if 'hostapd' in path:
return 200, {'pineap_disabled': True}
return 200, {'autossidpool': True}
server.daemon_sock_call = fake
status, payload = server.h_pineap_mode_get(ctx())
self.assertEqual(status, 200)
self.assertEqual(payload['mode'], 'passive')
self.assertFalse(payload['enabled'])
def test_get_invalidates_active_when_response_engine_stops(self):
server.update_pineap_state(mode='active', enabled=True,
collect=True, advertise=True)
def fake(method, path, body=None, timeout=10):
if 'hostapd' in path:
return 200, {'pineap_disabled': True}
return 200, {'autossidpool': True}
server.daemon_sock_call = fake
status, payload = server.h_pineap_mode_get(ctx())
self.assertEqual(status, 200)
self.assertEqual(payload['mode'], 'advanced')
self.assertFalse(payload['enabled'])
def test_manual_mimic_change_marks_advanced(self):
server.update_pineap_state(mode='passive', karma=False)
server._daemon_proxy = lambda *args, **kwargs: (200, {'success': True})
status, _ = server.h_pineap_mimic(ctx({'enable': True}))
self.assertEqual(status, 200)
state = server.load_pineap_state()
self.assertEqual(state['mode'], 'advanced')
self.assertTrue(state['karma'])
if __name__ == '__main__':
unittest.main()