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
"""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
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):
# 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):
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):
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()