core-admin-client/qubesmgmt/tests/__init__.py
Marek Marczykowski-Górecki 310d9da381
tests: add convenient TestVM and TestVMCollection classes
Very simple mockups for other tests.
2017-03-13 04:37:30 +01:00

76 lines
2.4 KiB
Python

# -*- encoding: utf8 -*-
#
# The Qubes OS Project, http://www.qubes-os.org
#
# Copyright (C) 2017 Marek Marczykowski-Górecki
# <marmarek@invisiblethingslab.com>
#
# This program 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 program 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 program; if not, see <http://www.gnu.org/licenses/>.
import unittest
import qubesmgmt
import qubesmgmt.app
class TestVM(object):
def __init__(self, name, **kwargs):
self.name = name
for key, value in kwargs.items():
setattr(self, key, value)
def get_power_state(self):
return getattr(self, 'power_state', 'Running')
def __str__(self):
return self.name
def __lt__(self, other):
if isinstance(other, TestVM):
return self.name < other.name
return NotImplemented
class TestVMCollection(dict):
def __iter__(self):
return iter(self.values())
class QubesTest(qubesmgmt.app.QubesBase):
expected_calls = None
actual_calls = None
def __init__(self):
super(QubesTest, self).__init__()
#: expected calls and saved replies for them
self.expected_calls = {}
#: actual calls made
self.actual_calls = []
def qubesd_call(self, dest, method, arg=None, payload=None):
call_key = (dest, method, arg, payload)
self.actual_calls.append(call_key)
if call_key not in self.expected_calls:
raise AssertionError('Unexpected call {!r}'.format(call_key))
return_data = self.expected_calls[call_key]
return self._parse_qubesd_response(return_data)
class QubesTestCase(unittest.TestCase):
def setUp(self):
super(QubesTestCase, self).setUp()
self.app = QubesTest()
def assertAllCalled(self):
self.assertEqual(
set(self.app.expected_calls.keys()),
set(self.app.actual_calls))