Browse Source

Introduce a Python module structure

This is a simple move of Python code that wraps common QEMU
functionality, and are used by a number of different tests
and scripts.

By treating that code as a real Python module, we can more easily:
 * reuse code
 * have a proper place for the module's own unittests
 * apply a more consistent style
 * generate documentation

Signed-off-by: Cleber Rosa <crosa@redhat.com>
Reviewed-by: Caio Carrara <ccarrara@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-Id: <20190206162901.19082-2-crosa@redhat.com>
Signed-off-by: Cleber Rosa <crosa@redhat.com>
pull/80/head
Cleber Rosa 8 years ago
parent
commit
8f8fd9edba
  1. 1
      configure
  2. 11
      python/qemu/__init__.py
  3. 0
      python/qemu/qmp.py
  4. 5
      python/qemu/qtest.py
  5. 2
      scripts/device-crash-test
  6. 0
      scripts/qmp/__init__.py
  7. 5
      scripts/qmp/qemu-ga-client
  8. 4
      scripts/qmp/qmp-shell
  9. 2
      scripts/render_block_graph.py
  10. 5
      tests/acceptance/avocado_qemu/__init__.py
  11. 2
      tests/acceptance/virtio_version.py
  12. 7
      tests/migration/guestperf/engine.py
  13. 2
      tests/qemu-iotests/235
  14. 2
      tests/qemu-iotests/238
  15. 4
      tests/qemu-iotests/iotests.py
  16. 2
      tests/vm/basevm.py

1
configure

@ -7604,6 +7604,7 @@ LINKS="$LINKS pc-bios/qemu-icon.bmp"
LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
LINKS="$LINKS tests/acceptance tests/data"
LINKS="$LINKS tests/qemu-iotests/check"
LINKS="$LINKS python"
for bios_file in \
$source_path/pc-bios/*.bin \
$source_path/pc-bios/*.lid \

11
scripts/qemu.py → python/qemu/__init__.py

@ -16,12 +16,13 @@ import errno
import logging
import os
import subprocess
import qmp.qmp
import re
import shutil
import socket
import tempfile
from . import qmp
LOG = logging.getLogger(__name__)
@ -66,7 +67,7 @@ class QEMUMachineAddDeviceError(QEMUMachineError):
failures reported by the QEMU binary itself.
"""
class MonitorResponseError(qmp.qmp.QMPError):
class MonitorResponseError(qmp.QMPError):
"""
Represents erroneous QMP monitor reply
"""
@ -267,8 +268,8 @@ class QEMUMachine(object):
self._qemu_log_path = os.path.join(self._temp_dir, self._name + ".log")
self._qemu_log_file = open(self._qemu_log_path, 'wb')
self._qmp = qmp.qmp.QEMUMonitorProtocol(self._vm_monitor,
server=True)
self._qmp = qmp.QEMUMonitorProtocol(self._vm_monitor,
server=True)
def _post_launch(self):
self._qmp.accept()
@ -384,7 +385,7 @@ class QEMUMachine(object):
"""
reply = self.qmp(cmd, conv_keys, **args)
if reply is None:
raise qmp.qmp.QMPError("Monitor is closed")
raise qmp.QMPError("Monitor is closed")
if "error" in reply:
raise MonitorResponseError(reply)
return reply["return"]

0
scripts/qmp/qmp.py → python/qemu/qmp.py

5
scripts/qtest.py → python/qemu/qtest.py

@ -13,7 +13,8 @@
import socket
import os
import qemu
from . import QEMUMachine
class QEMUQtestProtocol(object):
@ -79,7 +80,7 @@ class QEMUQtestProtocol(object):
self._sock.settimeout(timeout)
class QEMUQtestMachine(qemu.QEMUMachine):
class QEMUQtestMachine(QEMUMachine):
'''A QEMU VM'''
def __init__(self, binary, args=None, name=None, test_dir="/var/tmp",

2
scripts/device-crash-test

@ -25,6 +25,7 @@ check for crashes and unexpected errors.
"""
from __future__ import print_function
import os
import sys
import glob
import logging
@ -34,6 +35,7 @@ import random
import argparse
from itertools import chain
sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'python'))
from qemu import QEMUMachine
logger = logging.getLogger('device-crash-test')

0
scripts/qmp/__init__.py

5
scripts/qmp/qemu-ga-client

@ -37,10 +37,13 @@
#
from __future__ import print_function
import os
import sys
import base64
import random
import qmp
sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
from qemu import qmp
class QemuGuestAgent(qmp.QEMUMonitorProtocol):

4
scripts/qmp/qmp-shell

@ -66,7 +66,6 @@
# sent to QEMU, which is useful for debugging and documentation generation.
from __future__ import print_function
import qmp
import json
import ast
import readline
@ -76,6 +75,9 @@ import errno
import atexit
import shlex
sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
from qemu import qmp
class QMPCompleter(list):
def complete(self, text, state):
for cmd in self:

2
scripts/render_block_graph.py

@ -23,6 +23,8 @@ import sys
import subprocess
import json
from graphviz import Digraph
sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'python'))
from qemu import MonitorResponseError

5
tests/acceptance/avocado_qemu/__init__.py

@ -13,9 +13,8 @@ import sys
import avocado
SRC_ROOT_DIR = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
SRC_ROOT_DIR = os.path.abspath(os.path.dirname(SRC_ROOT_DIR))
sys.path.append(os.path.join(SRC_ROOT_DIR, 'scripts'))
SRC_ROOT_DIR = os.path.join(os.path.dirname(__file__), '..', '..', '..')
sys.path.append(os.path.join(SRC_ROOT_DIR, 'python'))
from qemu import QEMUMachine

2
tests/acceptance/virtio_version.py

@ -11,7 +11,7 @@ Check compatibility of virtio device types
import sys
import os
sys.path.append(os.path.join(os.path.dirname(__file__), "..", "..", "scripts"))
sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
from qemu import QEMUMachine
from avocado_qemu import Test

7
tests/migration/guestperf/engine.py

@ -24,13 +24,14 @@ import re
import sys
import time
sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..', 'scripts'))
import qemu
import qmp.qmp
from guestperf.progress import Progress, ProgressStats
from guestperf.report import Report
from guestperf.timings import TimingRecord, Timings
sys.path.append(os.path.join(os.path.dirname(__file__),
'..', '..', '..', 'python'))
import qemu
class Engine(object):

2
tests/qemu-iotests/235

@ -23,7 +23,7 @@ import os
import iotests
from iotests import qemu_img_create, qemu_io, file_path, log
sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'scripts'))
sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
from qemu import QEMUMachine

2
tests/qemu-iotests/238

@ -23,7 +23,7 @@ import os
import iotests
from iotests import log
sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'scripts'))
sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
from qemu import QEMUMachine

4
tests/qemu-iotests/iotests.py

@ -32,8 +32,8 @@ import atexit
import io
from collections import OrderedDict
sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'scripts'))
import qtest
sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
from qemu import qtest
# This will not work if arguments contain spaces but is necessary if we

2
tests/vm/basevm.py

@ -17,7 +17,7 @@ import sys
import logging
import time
import datetime
sys.path.append(os.path.join(os.path.dirname(__file__), "..", "..", "scripts"))
sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
from qemu import QEMUMachine, kvm_available
import subprocess
import hashlib

Loading…
Cancel
Save