#!/usr/bin/python # # The Qubes OS Project, https://www.qubes-os.org/ # # Copyright (C) 2017 boring-stuff # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, see . # import sys import unittest from qubespolicy.tests.gtkhelpers import GtkTestCase, FocusStealingHelperMock from qubespolicy.tests.gtkhelpers import mock_domains_info, mock_whitelist from qubespolicy.gtkhelpers import VMListModeler from qubespolicy.rpcconfirmation import RPCConfirmationWindow class MockRPCConfirmationWindow(RPCConfirmationWindow): def _new_vm_list_modeler(self): return VMListModeler(mock_domains_info) def _new_focus_stealing_helper(self): return FocusStealingHelperMock( self._rpc_window, self._rpc_ok_button, self._focus_stealing_seconds) def __init__(self, source, rpc_operation, whitelist, target=None, focus_stealing_seconds=1): self._focus_stealing_seconds = focus_stealing_seconds RPCConfirmationWindow.__init__( self, mock_domains_info, source, rpc_operation, whitelist, target) def is_error_visible(self): return self._error_bar.get_visible() def get_shown_domains(self): model = self._rpc_combo_box.get_model() model_iter = model.get_iter_first() domains = [] while model_iter is not None: domain_name = model.get_value(model_iter, 1) domains += [domain_name] model_iter = model.iter_next(model_iter) return domains class RPCConfirmationWindowTestBase(MockRPCConfirmationWindow, GtkTestCase): def __init__(self, test_method, source_name="test-source", rpc_operation="test.Operation", whitelist=mock_whitelist, target_name=None): GtkTestCase.__init__(self, test_method) self.test_source_name = source_name self.test_rpc_operation = rpc_operation self.test_target_name = target_name self._test_time = 0.1 self.test_called_close = False self.test_called_show = False self.test_clicked_ok = False self.test_clicked_cancel = False MockRPCConfirmationWindow.__init__(self, self.test_source_name, self.test_rpc_operation, whitelist, self.test_target_name, focus_stealing_seconds=self._test_time) def _can_perform_action(self): return True def _close(self): self.test_called_close = True def _show(self): self.test_called_show = True def _clicked_ok(self, button): MockRPCConfirmationWindow._clicked_ok(self, button) self.test_clicked_ok = True def _clicked_cancel(self, button): MockRPCConfirmationWindow._clicked_cancel(self, button) self.test_clicked_cancel = True def test_has_linked_the_fields(self): self.assertIsNotNone(self._rpc_window) self.assertIsNotNone(self._rpc_ok_button) self.assertIsNotNone(self._rpc_cancel_button) self.assertIsNotNone(self._rpc_label) self.assertIsNotNone(self._source_entry) self.assertIsNotNone(self._rpc_combo_box) self.assertIsNotNone(self._error_bar) self.assertIsNotNone(self._error_message) def test_is_showing_source(self): self.assertTrue(self.test_source_name in self._source_entry.get_text()) def test_is_showing_operation(self): self.assertTrue(self.test_rpc_operation in self._rpc_label.get_text()) def test_escape_and_format_rpc_text(self): self.assertEquals("qubes.Test", self._escape_and_format_rpc_text("qubes.Test")) self.assertEquals("custom.Domain", self._escape_and_format_rpc_text("custom.Domain")) self.assertEquals("nodomain", self._escape_and_format_rpc_text("nodomain")) self.assertEquals("domain.Sub.Operation", self._escape_and_format_rpc_text("domain.Sub.Operation")) self.assertEquals("", self._escape_and_format_rpc_text("")) self.assertEquals(".", self._escape_and_format_rpc_text(".")) self.assertEquals("inject.<script>", self._escape_and_format_rpc_text("inject.