X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/4d2cdb5a001dfd5a0d16a845a8d925261b28cb1e..48aaca91efa214b37dba94f28582be73f3c90dbd:/test/ganeti.hypervisor.hv_kvm_unittest.py diff --git a/test/ganeti.hypervisor.hv_kvm_unittest.py b/test/ganeti.hypervisor.hv_kvm_unittest.py index 14ab345..230efff 100755 --- a/test/ganeti.hypervisor.hv_kvm_unittest.py +++ b/test/ganeti.hypervisor.hv_kvm_unittest.py @@ -32,6 +32,8 @@ from ganeti import constants from ganeti import compat from ganeti import objects from ganeti import errors +from ganeti import utils +from ganeti import pathutils from ganeti.hypervisor import hv_kvm @@ -42,12 +44,22 @@ class QmpStub(threading.Thread): """Stub for a QMP endpoint for a KVM instance """ - _QMP_BANNER_DATA = {"QMP": {"version": { - "package": "", - "qemu": {"micro": 50, "minor": 13, "major": 0}, - "capabilities": [], - }}} - _EMPTY_RESPONSE = {"return": []} + _QMP_BANNER_DATA = { + "QMP": { + "version": { + "package": "", + "qemu": { + "micro": 50, + "minor": 13, + "major": 0, + }, + "capabilities": [], + }, + } + } + _EMPTY_RESPONSE = { + "return": [], + } def __init__(self, socket_filename, server_responses): """Creates a QMP stub @@ -101,20 +113,27 @@ class QmpStub(threading.Thread): conn.close() def encode_string(self, message): - return (serializer.DumpJson(message, indent=False) + + return (serializer.DumpJson(message) + hv_kvm.QmpConnection._MESSAGE_END_TOKEN) class TestQmpMessage(testutils.GanetiTestCase): def testSerialization(self): - test_data = {"execute": "command", "arguments": ["a", "b", "c"]} + test_data = { + "execute": "command", + "arguments": ["a", "b", "c"], + } message = hv_kvm.QmpMessage(test_data) for k, v in test_data.items(): - self.failUnless(message[k] == v) + self.assertEqual(message[k], v) + + serialized = str(message) + self.assertEqual(len(serialized.splitlines()), 1, + msg="Got multi-line message") - rebuilt_message = hv_kvm.QmpMessage.BuildFromJsonString(str(message)) - self.failUnless(rebuilt_message == message) + rebuilt_message = hv_kvm.QmpMessage.BuildFromJsonString(serialized) + self.assertEqual(rebuilt_message, message) class TestQmp(testutils.GanetiTestCase): @@ -158,7 +177,10 @@ class TestQmp(testutils.GanetiTestCase): # Format the script for request, expected_response in zip(requests, expected_responses): response = qmp_connection.Execute(request) - self.failUnless(response == hv_kvm.QmpMessage(expected_response)) + msg = hv_kvm.QmpMessage(expected_response) + self.assertEqual(len(str(msg).splitlines()), 1, + msg="Got multi-line message") + self.assertEqual(response, msg) class TestConsole(unittest.TestCase): @@ -178,7 +200,7 @@ class TestConsole(unittest.TestCase): cons = self._Test(instance, hvparams) self.assertEqual(cons.kind, constants.CONS_SSH) self.assertEqual(cons.host, instance.primary_node) - self.assertEqual(cons.command[0], constants.KVM_CONSOLE_WRAPPER) + self.assertEqual(cons.command[0], pathutils.KVM_CONSOLE_WRAPPER) self.assertEqual(cons.command[1], constants.SOCAT_PATH) def testVnc(self): @@ -223,5 +245,18 @@ class TestConsole(unittest.TestCase): self.assertEqual(cons.kind, constants.CONS_MESSAGE) +class TestVersionChecking(testutils.GanetiTestCase): + def testParseVersion(self): + parse = hv_kvm.KVMHypervisor._ParseKVMVersion + help_10 = utils.ReadFile(self._TestDataFilename("kvm_1.0_help.txt")) + help_01590 = utils.ReadFile(self._TestDataFilename("kvm_0.15.90_help.txt")) + help_0125 = utils.ReadFile(self._TestDataFilename("kvm_0.12.5_help.txt")) + help_091 = utils.ReadFile(self._TestDataFilename("kvm_0.9.1_help.txt")) + self.assertEqual(parse(help_10), ("1.0", 1, 0, 0)) + self.assertEqual(parse(help_01590), ("0.15.90", 0, 15, 90)) + self.assertEqual(parse(help_0125), ("0.12.5", 0, 12, 5)) + self.assertEqual(parse(help_091), ("0.9.1", 0, 9, 1)) + + if __name__ == "__main__": testutils.GanetiTestProgram()