import os, sys, unittest sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'payload', 'user', 'remote_access', 'pager-webui')) import server import mk8_guard class GuardTest(unittest.TestCase): def setUp(self): self.calls = [] self.uci = {} self.pool = 0 self.mon_up = {'wlan0mon': True, 'wlan1mon': True} self.old_iface_up = server._iface_up self.old_server_device_run = server.device_run self.old_guard_device_run = mk8_guard.device_run server._iface_up = lambda name: self.mon_up.get(name, True) def fake_run(args, timeout=20, input_data=None): a = list(args) self.calls.append(a) if a[:2] == ['uci', 'get']: key = a[2] if key == 'pineapd.@ssidpool[0].ssid': return (0, ''.join('s%d\n' % i for i in range(self.pool)), '') return (0, self.uci.get(key, '') + '\n', '') if a[:2] == ['uci', 'set']: k, _, v = a[2].partition('=') self.uci[k] = v if a[:2] == ['uci', 'delete']: self.pool = 0 return (0, '', '') mk8_guard.device_run = fake_run server.device_run = fake_run def tearDown(self): server._iface_up = self.old_iface_up server.device_run = self.old_server_device_run mk8_guard.device_run = self.old_guard_device_run def test_applies_all_wanted_when_missing(self): self.pool = 0 result = mk8_guard.reconcile(clear_pool=False) sets = [c[2] for c in self.calls if c[:2] == ['uci', 'set']] self.assertEqual(len(sets), len(server.PINEAPD_SAFE_UCI) + len(mk8_guard.WANTED_EXTRA)) self.assertTrue(result['changed']) def test_clears_large_pool_only(self): self.pool = 25 result = mk8_guard.reconcile(clear_pool=True) self.assertTrue(result['pool_cleared']) self.assertIn(['uci', 'delete', 'pineapd.@ssidpool[0].ssid'], self.calls) def test_small_pool_untouched(self): self.pool = 5 result = mk8_guard.reconcile(clear_pool=True) self.assertFalse(result['pool_cleared']) if __name__ == '__main__': unittest.main()