On Wed, Jan 29, 2014 at 04:40:41PM +0800, Fam Zheng wrote: > This will allow test case to run command in qtest protocol. It's > write-only for now. > > Signed-off-by: Fam Zheng <f...@redhat.com> > --- > tests/qemu-iotests/iotests.py | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py > index e4fa9af..ca79d09 100644 > --- a/tests/qemu-iotests/iotests.py > +++ b/tests/qemu-iotests/iotests.py > @@ -153,13 +153,16 @@ class VM(object): > stderr=sys.stderr) > return p.wait() > > + def qtest_cmd(self, cmd): > + self._popen.stdin.write(cmd + "\n") > + > def launch(self): > '''Launch the VM and establish a QMP connection''' > - devnull = open('/dev/null', 'rb') > qemulog = open(self._qemu_log_path, 'wb') > try: > self._qmp = qmp.QEMUMonitorProtocol(self._monitor_path, > server=True) > - self._popen = subprocess.Popen(self._args, stdin=devnull, > stdout=qemulog, > + self._popen = subprocess.Popen(self._args, stdin=subprocess.PIPE, > + stdout=qemulog, > stderr=subprocess.STDOUT)
Commit 0fd05e8dd1ee7ae143fba3d6bcc6abe3fbeaeb34 ("qemu-iotests: start vms in qtest mode") put qtest on stdio. I think that was a mistake and it should be fixed if you want to drive qtest. Let's not mix qtest output with QEMU stderr. If you need to drive qtest, put it on a dedicated UNIX domain socket (just like QMP). Implement the qtest protocol as documented in qtest.c: * Line based protocol, request/response based. Server can send async messages * so clients should always handle many async messages before the response * comes in. Stefan