import os, sys, tempfile, unittest sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'payload', 'user', 'remote_access', 'pager-webui')) import mk8_profiles CONFIGS = ('pineapd', 'wireless', 'network') class ProfilesTest(unittest.TestCase): def setUp(self): self.dir = tempfile.mkdtemp() mk8_profiles.PROFILES_DIR = os.path.join(self.dir, 'profiles') self.state = {'pineapd': 'config pineapd\n\toption x y\n', 'wireless': 'config wireless\n', 'network': 'config network\n'} def fake_run(args, timeout=20, input_data=None): a = list(args) if a[:2] == ['uci', 'import']: self.imports = getattr(self, 'imports', []) self.imports.append((a[2], input_data)) return (0, '', '') if a[:2] == ['uci', 'export']: return (0, self.state.get(a[2], ''), '') if a[:2] == ['uci', 'commit']: return (0, '', '') return (0, '', '') self.runs = [] mk8_profiles.run_cmd = lambda args, timeout=20, input_data=None: ( self.runs.append(list(args)) or fake_run(args, timeout, input_data)) def test_snapshot_and_list(self): self.assertTrue(mk8_profiles.snapshot('testprof')) self.assertIn('testprof', mk8_profiles.list_profiles()) def test_restore_issues_import_per_config(self): mk8_profiles.snapshot('p1') ok = mk8_profiles.restore('p1') self.assertTrue(ok['ok']) imported = [r for r in self.runs if r[:2] == ['uci', 'import']] self.assertEqual(len(imported), len(CONFIGS)) commits = [r for r in self.runs if r[:2] == ['uci', 'commit']] self.assertGreaterEqual(len(commits), 1) self.assertIn(('pineapd', 'config pineapd\n\toption x y\n'), self.imports) self.assertEqual(ok['restored'], list(CONFIGS)) def test_auto_name_format(self): name = mk8_profiles.auto_name('client_connect') self.assertTrue(name.startswith('pre-client_connect-')) def test_promote_lastknown_good(self): self.assertTrue(mk8_profiles.promote_lastknown_good()) self.assertIn(mk8_profiles.LASTKNOWN_GOOD, mk8_profiles.list_profiles()) again = mk8_profiles.promote_lastknown_good() self.assertTrue(again) def test_snapshot_false_when_nothing_written(self): self.state = {} self.assertFalse(mk8_profiles.snapshot('empty')) if __name__ == '__main__': unittest.main()