scripts: refactor the VM class in iotests for reuse

The iotests module has a python class for controlling QEMU
processes. Pull the generic functionality out of this file
and create a scripts/qemu.py module containing a QEMUMachine
class. Put the QTest integration support into a subclass
QEMUQtestMachine.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Message-Id: <1469020993-29426-4-git-send-email-berrange@redhat.com>
Signed-off-by: Amit Shah <amit.shah@redhat.com>
This commit is contained in:
Daniel P. Berrange 2016-07-20 14:23:10 +01:00 committed by Amit Shah
parent 991e7c4650
commit 6661397446
3 changed files with 240 additions and 131 deletions

View file

@ -13,6 +13,11 @@
import errno
import socket
import string
import os
import subprocess
import qmp.qmp
import qemu
class QEMUQtestProtocol(object):
def __init__(self, address, server=False):
@ -69,3 +74,32 @@ class QEMUQtestProtocol(object):
def settimeout(self, timeout):
self._sock.settimeout(timeout)
class QEMUQtestMachine(qemu.QEMUMachine):
'''A QEMU VM'''
def __init__(self, binary, args=[], name=None, test_dir="/var/tmp"):
super(self, QEMUQtestMachine).__init__(binary, args, name, test_dir)
self._qtest_path = os.path.join(test_dir, name + "-qtest.sock")
def _base_args(self):
args = super(self, QEMUQtestMachine)._base_args()
args.extend(['-qtest', 'unix:path=' + self._qtest_path])
return args
def _pre_launch(self):
super(self, QEMUQtestMachine)._pre_launch()
self._qtest = QEMUQtestProtocol(self._qtest_path, server=True)
def _post_launch(self):
super(self, QEMUQtestMachine)._post_launch()
self._qtest.accept()
def _post_shutdown(self):
super(self, QEMUQtestMachine)._post_shutdown()
self._remove_if_exists(self._qtest_path)
def qtest(self, cmd):
'''Send a qtest command to guest'''
return self._qtest.cmd(cmd)