mirror of https://github.com/xemu-project/xemu.git
iotests: implement QemuIoInteractive class
Implement QemuIoInteractive to test nbd-server-remove command when there are active connections. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Message-Id: <20180119135719.24745-5-vsementsov@virtuozzo.com> Signed-off-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
549084eaed
commit
9fa90eec04
|
@ -93,6 +93,44 @@ def qemu_io(*args):
|
||||||
sys.stderr.write('qemu-io received signal %i: %s\n' % (-exitcode, ' '.join(args)))
|
sys.stderr.write('qemu-io received signal %i: %s\n' % (-exitcode, ' '.join(args)))
|
||||||
return subp.communicate()[0]
|
return subp.communicate()[0]
|
||||||
|
|
||||||
|
|
||||||
|
class QemuIoInteractive:
|
||||||
|
def __init__(self, *args):
|
||||||
|
self.args = qemu_io_args + list(args)
|
||||||
|
self._p = subprocess.Popen(self.args, stdin=subprocess.PIPE,
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
stderr=subprocess.STDOUT)
|
||||||
|
assert self._p.stdout.read(9) == 'qemu-io> '
|
||||||
|
|
||||||
|
def close(self):
|
||||||
|
self._p.communicate('q\n')
|
||||||
|
|
||||||
|
def _read_output(self):
|
||||||
|
pattern = 'qemu-io> '
|
||||||
|
n = len(pattern)
|
||||||
|
pos = 0
|
||||||
|
s = []
|
||||||
|
while pos != n:
|
||||||
|
c = self._p.stdout.read(1)
|
||||||
|
# check unexpected EOF
|
||||||
|
assert c != ''
|
||||||
|
s.append(c)
|
||||||
|
if c == pattern[pos]:
|
||||||
|
pos += 1
|
||||||
|
else:
|
||||||
|
pos = 0
|
||||||
|
|
||||||
|
return ''.join(s[:-n])
|
||||||
|
|
||||||
|
def cmd(self, cmd):
|
||||||
|
# quit command is in close(), '\n' is added automatically
|
||||||
|
assert '\n' not in cmd
|
||||||
|
cmd = cmd.strip()
|
||||||
|
assert cmd != 'q' and cmd != 'quit'
|
||||||
|
self._p.stdin.write(cmd + '\n')
|
||||||
|
return self._read_output()
|
||||||
|
|
||||||
|
|
||||||
def qemu_nbd(*args):
|
def qemu_nbd(*args):
|
||||||
'''Run qemu-nbd in daemon mode and return the parent's exit code'''
|
'''Run qemu-nbd in daemon mode and return the parent's exit code'''
|
||||||
return subprocess.call(qemu_nbd_args + ['--fork'] + list(args))
|
return subprocess.call(qemu_nbd_args + ['--fork'] + list(args))
|
||||||
|
|
Loading…
Reference in New Issue