def testQmp(self): # Set up the stub socket_file = tempfile.NamedTemporaryFile() os.remove(socket_file.name) qmp_stub = QmpStub(socket_file.name, self.SERVER_RESPONSES) qmp_stub.start() # Set up the QMP connection qmp_connection = hv_kvm.QmpConnection(socket_file.name) try: qmp_connection.connect() # Format the script for request, expected_response in zip(self.REQUESTS, self.EXPECTED_RESPONSES): response = qmp_connection.Execute(request["execute"], request["arguments"]) self.assertEqual(response, expected_response) msg = hv_kvm.QmpMessage({"return": expected_response}) self.assertEqual(len(str(msg).splitlines()), 1, msg="Got multi-line message") self.assertRaises(monitor.QmpCommandNotSupported, qmp_connection.Execute, "unsupported-command") finally: qmp_stub.shutdown() qmp_connection.close()
def testQmpContextManager(self): # Set up the stub socket_file = tempfile.NamedTemporaryFile() os.remove(socket_file.name) qmp_stub = QmpStub(socket_file.name, self.SERVER_RESPONSES) qmp_stub.start() # Test the context manager functionality with hv_kvm.QmpConnection(socket_file.name) as qmp: for request, expected_response in zip(self.REQUESTS, self.EXPECTED_RESPONSES): response = qmp.Execute(request["execute"], request["arguments"]) self.assertEqual(response, expected_response)
def testQmp(self): requests = [ {"execute": "query-kvm", "arguments": []}, {"execute": "eject", "arguments": {"device": "ide1-cd0"}}, {"execute": "query-status", "arguments": []}, {"execute": "query-name", "arguments": []}, ] server_responses = [ # One message, one send() '{"return": {"enabled": true, "present": true}}\r\n', # Message sent using multiple send() ['{"retur', 'n": {}}\r\n'], # Multiple messages sent using one send() '{"return": [{"name": "quit"}, {"name": "eject"}]}\r\n' '{"return": {"running": true, "singlestep": false}}\r\n', ] expected_responses = [ {"return": {"enabled": True, "present": True}}, {"return": {}}, {"return": [{"name": "quit"}, {"name": "eject"}]}, {"return": {"running": True, "singlestep": False}}, ] # Set up the stub socket_file = tempfile.NamedTemporaryFile() os.remove(socket_file.name) qmp_stub = QmpStub(socket_file.name, server_responses) qmp_stub.start() # Set up the QMP connection qmp_connection = hv_kvm.QmpConnection(socket_file.name) qmp_connection.connect() # Format the script for request, expected_response in zip(requests, expected_responses): response = qmp_connection.Execute(request) msg = hv_kvm.QmpMessage(expected_response) self.assertEqual(len(str(msg).splitlines()), 1, msg="Got multi-line message") self.assertEqual(response, msg)