mirror of https://github.com/xemu-project/xemu.git
- Python 3 cleanups:
. Remove text about Python 2 in qemu-deprecated (Thomas) . Remove shebang header (Paolo, Philippe) . scripts/checkpatch.pl now allows Python 3 interpreter (Philippe) . Explicit usage of Python 3 interpreter in scripts (Philippe) . Fix Python scripts permissions (Paolo, Philippe) . Drop 'from __future__ import print_function' (Paolo) . Specify minimum python requirements in ReadTheDocs configuration (Alex) - Test UNIX/EXEC transports with migration (Oksana) - Added extract_from_rpm helper, improved extract_from_deb (Liam) - Allow to use other serial consoles than default one (Philippe) - Various improvements in QEMUMonitorProtocol (Wainer) - Fix kvm_available() on ppc64le (Wainer) -----BEGIN PGP SIGNATURE----- iQIyBAABCAAdFiEE+qvnXhKRciHc/Wuy4+MsLN6twN4FAl49e+QACgkQ4+MsLN6t wN7E6A/3dzCLP0QDoT/C2rC1uu2yXBpXsSUSGeRCA+NLGEOpkyWiEK/vCQp/WxGO YU3ToO5NIGMxjVGhy14D1U4NrmiUhxmkGlJQJ60WKAO/oJBElHz8aR2keGlbkBp3 mh/Amyw+ubM3aBYcAmBbgn0y7yr+lV62mD1JmffQebwIMsT+6aL4XhZ6Lf8PAEkY 0pCK30O0j8Mwk8ppwKjoRT0WhhcKInmaLElbcOstoqVjQerGV7ho7VjlS9v2BPeg uQbDbv5lask7XVoJzortQ9nP2Tq3R+T7hNc0RPa0/tuqZ/6ucq6eYbFgbr/S7r3/ Lem3ByA1EPlNzjq1HZoU3zx0/Ydq6qPyiudO9fLOCDIGVG6ZKXmKVq71lWHotcAw Oir+RPSVhPmOekhOPXAEi3mwAqRX3iSUGSsm+aLgq9I1DJfdE8dG2n5ZKVSWClmF xwb8Dhlz1T5SIlLderfVFryLzV2/LoHQOpr37phw6Ec5gox6UR0i4ozKEaY1zmZV THvweFraoBUGwIN7ULfP8jxs8hjQY9HIxhYjNvPxqAQekH6hO97qkjbs44ujvNrS D/yL4Gk4XgDjGP37aeBoY0zCUMM3cpWZdVfycDiXe6r949ifOoF0gZSny7ryRTGh s1RvQAM9VaYcGTERkLLCC+QMuz24nN/cEg9H3SFlfHBGVBxaBw== =8xBQ -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/philmd-gitlab/tags/python-next-20200207' into staging - Python 3 cleanups: . Remove text about Python 2 in qemu-deprecated (Thomas) . Remove shebang header (Paolo, Philippe) . scripts/checkpatch.pl now allows Python 3 interpreter (Philippe) . Explicit usage of Python 3 interpreter in scripts (Philippe) . Fix Python scripts permissions (Paolo, Philippe) . Drop 'from __future__ import print_function' (Paolo) . Specify minimum python requirements in ReadTheDocs configuration (Alex) - Test UNIX/EXEC transports with migration (Oksana) - Added extract_from_rpm helper, improved extract_from_deb (Liam) - Allow to use other serial consoles than default one (Philippe) - Various improvements in QEMUMonitorProtocol (Wainer) - Fix kvm_available() on ppc64le (Wainer) # gpg: Signature made Fri 07 Feb 2020 15:01:56 GMT # gpg: using RSA key FAABE75E12917221DCFD6BB2E3E32C2CDEADC0DE # gpg: Good signature from "Philippe Mathieu-Daudé (F4BUG) <f4bug@amsat.org>" [full] # Primary key fingerprint: FAAB E75E 1291 7221 DCFD 6BB2 E3E3 2C2C DEAD C0DE * remotes/philmd-gitlab/tags/python-next-20200207: (46 commits) .readthedocs.yml: specify some minimum python requirements drop "from __future__ import print_function" make all Python scripts executable scripts/signrom: remove Python 2 support, add shebang tests/qemu-iotests/check: Only check for Python 3 interpreter scripts: Explicit usage of Python 3 (scripts without __main__) tests/qemu-iotests: Explicit usage of Python3 (scripts without __main__) tests/vm: Remove shebang header tests/acceptance: Remove shebang header scripts/tracetool: Remove shebang header scripts/minikconf: Explicit usage of Python 3 scripts: Explicit usage of Python 3 (scripts with __main__) tests: Explicit usage of Python 3 tests/qemu-iotests: Explicit usage of Python 3 (scripts with __main__) tests/qemu-iotests/check: Allow use of python3 interpreter scripts/checkpatch.pl: Only allow Python 3 interpreter tests/acceptance/migration: Default to -nodefaults tests/acceptance/migration: Add the 'migration' tag tests/acceptance/migration: Test EXEC transport when migrating tests/acceptance/migration: Test UNIX transport when migrating ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
73d336510c
|
@ -0,0 +1,20 @@
|
||||||
|
# .readthedocs.yml
|
||||||
|
# Read the Docs configuration file
|
||||||
|
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
||||||
|
|
||||||
|
# Required
|
||||||
|
version: 2
|
||||||
|
|
||||||
|
# Build documentation in the docs/ directory with Sphinx
|
||||||
|
sphinx:
|
||||||
|
configuration: docs/conf.py
|
||||||
|
|
||||||
|
# We want all the document formats
|
||||||
|
formats: all
|
||||||
|
|
||||||
|
# For consistency, we require that QEMU's Sphinx extensions
|
||||||
|
# run with at least the same minimum version of Python that
|
||||||
|
# we require for other Python in our codebase (our conf.py
|
||||||
|
# enforces this, and some code needs it.)
|
||||||
|
python:
|
||||||
|
version: 3.5
|
|
@ -313,7 +313,7 @@ matrix:
|
||||||
# Acceptance (Functional) tests
|
# Acceptance (Functional) tests
|
||||||
- name: "GCC check-acceptance"
|
- name: "GCC check-acceptance"
|
||||||
env:
|
env:
|
||||||
- CONFIG="--target-list=x86_64-softmmu,mips-softmmu,mips64el-softmmu,aarch64-softmmu,arm-softmmu,s390x-softmmu,alpha-softmmu,ppc-softmmu,ppc64-softmmu,m68k-softmmu,sparc-softmmu"
|
- CONFIG="--target-list=aarch64-softmmu,alpha-softmmu,arm-softmmu,m68k-softmmu,microblaze-softmmu,mips-softmmu,mips64el-softmmu,nios2-softmmu,or1k-softmmu,ppc-softmmu,ppc64-softmmu,s390x-softmmu,sparc-softmmu,x86_64-softmmu,xtensa-softmmu"
|
||||||
- TEST_CMD="make check-acceptance"
|
- TEST_CMD="make check-acceptance"
|
||||||
after_script:
|
after_script:
|
||||||
- python3 -c 'import json; r = json.load(open("tests/results/latest/results.json")); [print(t["logfile"]) for t in r["tests"] if t["status"] not in ("PASS", "SKIP")]' | xargs cat
|
- python3 -c 'import json; r = json.load(open("tests/results/latest/results.json")); [print(t["logfile"]) for t in r["tests"] if t["status"] not in ("PASS", "SKIP")]' | xargs cat
|
||||||
|
@ -323,6 +323,7 @@ matrix:
|
||||||
- python3-pil
|
- python3-pil
|
||||||
- python3-pip
|
- python3-pip
|
||||||
- python3.5-venv
|
- python3.5-venv
|
||||||
|
- rpm2cpio
|
||||||
- tesseract-ocr
|
- tesseract-ocr
|
||||||
- tesseract-ocr-eng
|
- tesseract-ocr-eng
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,8 @@ LOG = logging.getLogger(__name__)
|
||||||
# support which often includes its 32 bit cousin.
|
# support which often includes its 32 bit cousin.
|
||||||
ADDITIONAL_ARCHES = {
|
ADDITIONAL_ARCHES = {
|
||||||
"x86_64" : "i386",
|
"x86_64" : "i386",
|
||||||
"aarch64" : "armhf"
|
"aarch64" : "armhf",
|
||||||
|
"ppc64le" : "ppc64",
|
||||||
}
|
}
|
||||||
|
|
||||||
def list_accel(qemu_bin):
|
def list_accel(qemu_bin):
|
||||||
|
|
|
@ -112,6 +112,7 @@ class QEMUMachine(object):
|
||||||
self._sock_dir = sock_dir
|
self._sock_dir = sock_dir
|
||||||
self._launched = False
|
self._launched = False
|
||||||
self._machine = None
|
self._machine = None
|
||||||
|
self._console_index = 0
|
||||||
self._console_set = False
|
self._console_set = False
|
||||||
self._console_device_type = None
|
self._console_device_type = None
|
||||||
self._console_address = None
|
self._console_address = None
|
||||||
|
@ -241,6 +242,8 @@ class QEMUMachine(object):
|
||||||
'chardev=mon,mode=control'])
|
'chardev=mon,mode=control'])
|
||||||
if self._machine is not None:
|
if self._machine is not None:
|
||||||
args.extend(['-machine', self._machine])
|
args.extend(['-machine', self._machine])
|
||||||
|
for i in range(self._console_index):
|
||||||
|
args.extend(['-serial', 'null'])
|
||||||
if self._console_set:
|
if self._console_set:
|
||||||
self._console_address = os.path.join(self._sock_dir,
|
self._console_address = os.path.join(self._sock_dir,
|
||||||
self._name + "-console.sock")
|
self._name + "-console.sock")
|
||||||
|
@ -527,7 +530,7 @@ class QEMUMachine(object):
|
||||||
"""
|
"""
|
||||||
self._machine = machine_type
|
self._machine = machine_type
|
||||||
|
|
||||||
def set_console(self, device_type=None):
|
def set_console(self, device_type=None, console_index=0):
|
||||||
"""
|
"""
|
||||||
Sets the device type for a console device
|
Sets the device type for a console device
|
||||||
|
|
||||||
|
@ -548,9 +551,14 @@ class QEMUMachine(object):
|
||||||
chardev:console" command line argument will
|
chardev:console" command line argument will
|
||||||
be used instead, resorting to the machine's
|
be used instead, resorting to the machine's
|
||||||
default device type.
|
default device type.
|
||||||
|
@param console_index: the index of the console device to use.
|
||||||
|
If not zero, the command line will create
|
||||||
|
'index - 1' consoles and connect them to
|
||||||
|
the 'null' backing character device.
|
||||||
"""
|
"""
|
||||||
self._console_set = True
|
self._console_set = True
|
||||||
self._console_device_type = device_type
|
self._console_device_type = device_type
|
||||||
|
self._console_index = console_index
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def console_socket(self):
|
def console_socket(self):
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
# QEMU Monitor Protocol Python class
|
""" QEMU Monitor Protocol Python class """
|
||||||
#
|
|
||||||
# Copyright (C) 2009, 2010 Red Hat Inc.
|
# Copyright (C) 2009, 2010 Red Hat Inc.
|
||||||
#
|
#
|
||||||
# Authors:
|
# Authors:
|
||||||
|
@ -15,29 +14,37 @@ import logging
|
||||||
|
|
||||||
|
|
||||||
class QMPError(Exception):
|
class QMPError(Exception):
|
||||||
pass
|
"""
|
||||||
|
QMP base exception
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
class QMPConnectError(QMPError):
|
class QMPConnectError(QMPError):
|
||||||
pass
|
"""
|
||||||
|
QMP connection exception
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
class QMPCapabilitiesError(QMPError):
|
class QMPCapabilitiesError(QMPError):
|
||||||
pass
|
"""
|
||||||
|
QMP negotiate capabilities exception
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
class QMPTimeoutError(QMPError):
|
class QMPTimeoutError(QMPError):
|
||||||
pass
|
"""
|
||||||
|
QMP timeout exception
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
class QEMUMonitorProtocol(object):
|
class QEMUMonitorProtocol:
|
||||||
|
"""
|
||||||
|
Provide an API to connect to QEMU via QEMU Monitor Protocol (QMP) and then
|
||||||
|
allow to handle commands and events.
|
||||||
|
"""
|
||||||
|
|
||||||
#: Logger object for debugging messages
|
#: Logger object for debugging messages
|
||||||
logger = logging.getLogger('QMP')
|
logger = logging.getLogger('QMP')
|
||||||
#: Socket's error class
|
|
||||||
error = socket.error
|
|
||||||
#: Socket's timeout
|
|
||||||
timeout = socket.timeout
|
|
||||||
|
|
||||||
def __init__(self, address, server=False):
|
def __init__(self, address, server=False):
|
||||||
"""
|
"""
|
||||||
|
@ -47,7 +54,7 @@ class QEMUMonitorProtocol(object):
|
||||||
or a tuple in the form ( address, port ) for a TCP
|
or a tuple in the form ( address, port ) for a TCP
|
||||||
connection
|
connection
|
||||||
@param server: server mode listens on the socket (bool)
|
@param server: server mode listens on the socket (bool)
|
||||||
@raise socket.error on socket connection errors
|
@raise OSError on socket connection errors
|
||||||
@note No connection is established, this is done by the connect() or
|
@note No connection is established, this is done by the connect() or
|
||||||
accept() methods
|
accept() methods
|
||||||
"""
|
"""
|
||||||
|
@ -73,7 +80,7 @@ class QEMUMonitorProtocol(object):
|
||||||
raise QMPConnectError
|
raise QMPConnectError
|
||||||
# Greeting seems ok, negotiate capabilities
|
# Greeting seems ok, negotiate capabilities
|
||||||
resp = self.cmd('qmp_capabilities')
|
resp = self.cmd('qmp_capabilities')
|
||||||
if "return" in resp:
|
if resp and "return" in resp:
|
||||||
return greeting
|
return greeting
|
||||||
raise QMPCapabilitiesError
|
raise QMPCapabilitiesError
|
||||||
|
|
||||||
|
@ -81,7 +88,7 @@ class QEMUMonitorProtocol(object):
|
||||||
while True:
|
while True:
|
||||||
data = self.__sockfile.readline()
|
data = self.__sockfile.readline()
|
||||||
if not data:
|
if not data:
|
||||||
return
|
return None
|
||||||
resp = json.loads(data)
|
resp = json.loads(data)
|
||||||
if 'event' in resp:
|
if 'event' in resp:
|
||||||
self.logger.debug("<<< %s", resp)
|
self.logger.debug("<<< %s", resp)
|
||||||
|
@ -107,8 +114,8 @@ class QEMUMonitorProtocol(object):
|
||||||
self.__sock.setblocking(0)
|
self.__sock.setblocking(0)
|
||||||
try:
|
try:
|
||||||
self.__json_read()
|
self.__json_read()
|
||||||
except socket.error as err:
|
except OSError as err:
|
||||||
if err[0] == errno.EAGAIN:
|
if err.errno == errno.EAGAIN:
|
||||||
# No data available
|
# No data available
|
||||||
pass
|
pass
|
||||||
self.__sock.setblocking(1)
|
self.__sock.setblocking(1)
|
||||||
|
@ -128,12 +135,21 @@ class QEMUMonitorProtocol(object):
|
||||||
raise QMPConnectError("Error while reading from socket")
|
raise QMPConnectError("Error while reading from socket")
|
||||||
self.__sock.settimeout(None)
|
self.__sock.settimeout(None)
|
||||||
|
|
||||||
|
def __enter__(self):
|
||||||
|
# Implement context manager enter function.
|
||||||
|
return self
|
||||||
|
|
||||||
|
def __exit__(self, exc_type, exc_value, exc_traceback):
|
||||||
|
# Implement context manager exit function.
|
||||||
|
self.close()
|
||||||
|
return False
|
||||||
|
|
||||||
def connect(self, negotiate=True):
|
def connect(self, negotiate=True):
|
||||||
"""
|
"""
|
||||||
Connect to the QMP Monitor and perform capabilities negotiation.
|
Connect to the QMP Monitor and perform capabilities negotiation.
|
||||||
|
|
||||||
@return QMP greeting dict
|
@return QMP greeting dict, or None if negotiate is false
|
||||||
@raise socket.error on socket connection errors
|
@raise OSError on socket connection errors
|
||||||
@raise QMPConnectError if the greeting is not received
|
@raise QMPConnectError if the greeting is not received
|
||||||
@raise QMPCapabilitiesError if fails to negotiate capabilities
|
@raise QMPCapabilitiesError if fails to negotiate capabilities
|
||||||
"""
|
"""
|
||||||
|
@ -141,17 +157,25 @@ class QEMUMonitorProtocol(object):
|
||||||
self.__sockfile = self.__sock.makefile()
|
self.__sockfile = self.__sock.makefile()
|
||||||
if negotiate:
|
if negotiate:
|
||||||
return self.__negotiate_capabilities()
|
return self.__negotiate_capabilities()
|
||||||
|
return None
|
||||||
|
|
||||||
def accept(self):
|
def accept(self, timeout=15.0):
|
||||||
"""
|
"""
|
||||||
Await connection from QMP Monitor and perform capabilities negotiation.
|
Await connection from QMP Monitor and perform capabilities negotiation.
|
||||||
|
|
||||||
|
@param timeout: timeout in seconds (nonnegative float number, or
|
||||||
|
None). The value passed will set the behavior of the
|
||||||
|
underneath QMP socket as described in [1]. Default value
|
||||||
|
is set to 15.0.
|
||||||
@return QMP greeting dict
|
@return QMP greeting dict
|
||||||
@raise socket.error on socket connection errors
|
@raise OSError on socket connection errors
|
||||||
@raise QMPConnectError if the greeting is not received
|
@raise QMPConnectError if the greeting is not received
|
||||||
@raise QMPCapabilitiesError if fails to negotiate capabilities
|
@raise QMPCapabilitiesError if fails to negotiate capabilities
|
||||||
|
|
||||||
|
[1]
|
||||||
|
https://docs.python.org/3/library/socket.html#socket.socket.settimeout
|
||||||
"""
|
"""
|
||||||
self.__sock.settimeout(15)
|
self.__sock.settimeout(timeout)
|
||||||
self.__sock, _ = self.__sock.accept()
|
self.__sock, _ = self.__sock.accept()
|
||||||
self.__sockfile = self.__sock.makefile()
|
self.__sockfile = self.__sock.makefile()
|
||||||
return self.__negotiate_capabilities()
|
return self.__negotiate_capabilities()
|
||||||
|
@ -167,10 +191,10 @@ class QEMUMonitorProtocol(object):
|
||||||
self.logger.debug(">>> %s", qmp_cmd)
|
self.logger.debug(">>> %s", qmp_cmd)
|
||||||
try:
|
try:
|
||||||
self.__sock.sendall(json.dumps(qmp_cmd).encode('utf-8'))
|
self.__sock.sendall(json.dumps(qmp_cmd).encode('utf-8'))
|
||||||
except socket.error as err:
|
except OSError as err:
|
||||||
if err[0] == errno.EPIPE:
|
if err.errno == errno.EPIPE:
|
||||||
return
|
return None
|
||||||
raise socket.error(err)
|
raise err
|
||||||
resp = self.__json_read()
|
resp = self.__json_read()
|
||||||
self.logger.debug("<<< %s", resp)
|
self.logger.debug("<<< %s", resp)
|
||||||
return resp
|
return resp
|
||||||
|
@ -243,14 +267,35 @@ class QEMUMonitorProtocol(object):
|
||||||
self.__events = []
|
self.__events = []
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
|
"""
|
||||||
|
Close the socket and socket file.
|
||||||
|
"""
|
||||||
|
if self.__sock:
|
||||||
self.__sock.close()
|
self.__sock.close()
|
||||||
|
if self.__sockfile:
|
||||||
self.__sockfile.close()
|
self.__sockfile.close()
|
||||||
|
|
||||||
def settimeout(self, timeout):
|
def settimeout(self, timeout):
|
||||||
|
"""
|
||||||
|
Set the socket timeout.
|
||||||
|
|
||||||
|
@param timeout (float): timeout in seconds, or None.
|
||||||
|
@note This is a wrap around socket.settimeout
|
||||||
|
"""
|
||||||
self.__sock.settimeout(timeout)
|
self.__sock.settimeout(timeout)
|
||||||
|
|
||||||
def get_sock_fd(self):
|
def get_sock_fd(self):
|
||||||
|
"""
|
||||||
|
Get the socket file descriptor.
|
||||||
|
|
||||||
|
@return The file descriptor number.
|
||||||
|
"""
|
||||||
return self.__sock.fileno()
|
return self.__sock.fileno()
|
||||||
|
|
||||||
def is_scm_available(self):
|
def is_scm_available(self):
|
||||||
|
"""
|
||||||
|
Check if the socket allows for SCM_RIGHTS.
|
||||||
|
|
||||||
|
@return True if SCM_RIGHTS is available, otherwise False.
|
||||||
|
"""
|
||||||
return self.__sock.family == socket.AF_UNIX
|
return self.__sock.family == socket.AF_UNIX
|
||||||
|
|
|
@ -320,14 +320,6 @@ they have no effect when used with @option{-n} to skip image creation.
|
||||||
Silently ignored options can be confusing, so this combination of
|
Silently ignored options can be confusing, so this combination of
|
||||||
options will be made an error in future versions.
|
options will be made an error in future versions.
|
||||||
|
|
||||||
@section Build system
|
|
||||||
|
|
||||||
@subsection Python 2 support (since 4.1.0)
|
|
||||||
|
|
||||||
In the future, QEMU will require Python 3 to be available at
|
|
||||||
build time. Support for Python 2 in scripts shipped with QEMU
|
|
||||||
is deprecated.
|
|
||||||
|
|
||||||
@section Backwards compatibility
|
@section Backwards compatibility
|
||||||
|
|
||||||
@subsection Runnability guarantee of CPU models (since 4.1.0)
|
@subsection Runnability guarantee of CPU models (since 4.1.0)
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
# Pretty print 9p simpletrace log
|
# Pretty print 9p simpletrace log
|
||||||
# Usage: ./analyse-9p-simpletrace <trace-events> <trace-pid>
|
# Usage: ./analyse-9p-simpletrace <trace-events> <trace-pid>
|
||||||
#
|
#
|
||||||
# Author: Harsh Prateek Bora
|
# Author: Harsh Prateek Bora
|
||||||
from __future__ import print_function
|
|
||||||
import os
|
import os
|
||||||
import simpletrace
|
import simpletrace
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#
|
#
|
||||||
# Analyse lock events and compute statistics
|
# Analyse lock events and compute statistics
|
||||||
|
@ -6,7 +6,6 @@
|
||||||
# Author: Alex Bennée <alex.bennee@linaro.org>
|
# Author: Alex Bennée <alex.bennee@linaro.org>
|
||||||
#
|
#
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
import simpletrace
|
import simpletrace
|
||||||
import argparse
|
import argparse
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
|
@ -1460,6 +1460,12 @@ sub process {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Only allow Python 3 interpreter
|
||||||
|
if ($realline == 1 &&
|
||||||
|
$line =~ /^\+#!\ *\/usr\/bin\/(?:env )?python$/) {
|
||||||
|
ERROR("please use python3 interpreter\n" . $herecurr);
|
||||||
|
}
|
||||||
|
|
||||||
# Accept git diff extended headers as valid patches
|
# Accept git diff extended headers as valid patches
|
||||||
if ($line =~ /^(?:rename|copy) (?:from|to) [\w\/\.\-]+\s*$/) {
|
if ($line =~ /^(?:rename|copy) (?:from|to) [\w\/\.\-]+\s*$/) {
|
||||||
$is_patch = 1;
|
$is_patch = 1;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
# Copyright (c) 2018 Linaro Limited
|
# Copyright (c) 2018 Linaro Limited
|
||||||
#
|
#
|
||||||
# This library is free software; you can redistribute it and/or
|
# This library is free software; you can redistribute it and/or
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Copyright (c) 2017 Red Hat Inc
|
# Copyright (c) 2017 Red Hat Inc
|
||||||
#
|
#
|
||||||
|
@ -23,7 +23,6 @@
|
||||||
Run QEMU with all combinations of -machine and -device types,
|
Run QEMU with all combinations of -machine and -device types,
|
||||||
check for crashes and unexpected errors.
|
check for crashes and unexpected errors.
|
||||||
"""
|
"""
|
||||||
from __future__ import print_function
|
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
|
@ -12,7 +12,6 @@ Authors:
|
||||||
This work is licensed under the terms of the GNU GPL, version 2 or later. See
|
This work is licensed under the terms of the GNU GPL, version 2 or later. See
|
||||||
the COPYING file in the top-level directory.
|
the COPYING file in the top-level directory.
|
||||||
"""
|
"""
|
||||||
from __future__ import print_function
|
|
||||||
|
|
||||||
import ctypes
|
import ctypes
|
||||||
import struct
|
import struct
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# KVM Flight Recorder - ring buffer tracing script
|
# KVM Flight Recorder - ring buffer tracing script
|
||||||
#
|
#
|
||||||
|
@ -32,7 +32,6 @@
|
||||||
# consuming CPU cycles. No disk I/O is performed since the ring buffer holds a
|
# consuming CPU cycles. No disk I/O is performed since the ring buffer holds a
|
||||||
# fixed-size in-memory trace.
|
# fixed-size in-memory trace.
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
# This work is licensed under the terms of the GNU GPL, version 2. See
|
# This work is licensed under the terms of the GNU GPL, version 2. See
|
||||||
# the COPYING file in the top-level directory.
|
# the COPYING file in the top-level directory.
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
MSR_IA32_VMX_BASIC = 0x480
|
MSR_IA32_VMX_BASIC = 0x480
|
||||||
MSR_IA32_VMX_PINBASED_CTLS = 0x481
|
MSR_IA32_VMX_PINBASED_CTLS = 0x481
|
||||||
MSR_IA32_VMX_PROCBASED_CTLS = 0x482
|
MSR_IA32_VMX_PROCBASED_CTLS = 0x482
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Mini-Kconfig parser
|
# Mini-Kconfig parser
|
||||||
#
|
#
|
||||||
|
@ -10,7 +11,6 @@
|
||||||
# or, at your option, any later version. See the COPYING file in
|
# or, at your option, any later version. See the COPYING file in
|
||||||
# the top-level directory.
|
# the top-level directory.
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import re
|
import re
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
# This work is licensed under the terms of the GNU GPL, version 2.
|
# This work is licensed under the terms of the GNU GPL, version 2.
|
||||||
# See the COPYING file in the top-level directory.
|
# See the COPYING file in the top-level directory.
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
# QAPI generator
|
# QAPI generator
|
||||||
#
|
#
|
||||||
# This work is licensed under the terms of the GNU GPL, version 2 or later.
|
# This work is licensed under the terms of the GNU GPL, version 2 or later.
|
||||||
# See the COPYING file in the top-level directory.
|
# See the COPYING file in the top-level directory.
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import re
|
import re
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
# See the COPYING file in the top-level directory.
|
# See the COPYING file in the top-level directory.
|
||||||
"""This script produces the documentation of a qapi schema in texinfo format"""
|
"""This script produces the documentation of a qapi schema in texinfo format"""
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
import re
|
import re
|
||||||
from qapi.gen import QAPIGenDoc, QAPISchemaVisitor
|
from qapi.gen import QAPIGenDoc, QAPISchemaVisitor
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/python
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
# QEMU Guest Agent Client
|
# QEMU Guest Agent Client
|
||||||
#
|
#
|
||||||
|
@ -36,7 +36,6 @@
|
||||||
# See also: https://wiki.qemu.org/Features/QAPI/GuestAgent
|
# See also: https://wiki.qemu.org/Features/QAPI/GuestAgent
|
||||||
#
|
#
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import base64
|
import base64
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# QMP command line tool
|
# QMP command line tool
|
||||||
#
|
#
|
||||||
|
@ -10,7 +10,6 @@
|
||||||
# This work is licensed under the terms of the GNU GPLv2 or later.
|
# This work is licensed under the terms of the GNU GPLv2 or later.
|
||||||
# See the COPYING file in the top-level directory.
|
# See the COPYING file in the top-level directory.
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
import sys, os
|
import sys, os
|
||||||
from qmp import QEMUMonitorProtocol
|
from qmp import QEMUMonitorProtocol
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Low-level QEMU shell on top of QMP.
|
# Low-level QEMU shell on top of QMP.
|
||||||
#
|
#
|
||||||
|
@ -65,7 +65,6 @@
|
||||||
# which will echo back the properly formatted JSON-compliant QMP that is being
|
# which will echo back the properly formatted JSON-compliant QMP that is being
|
||||||
# sent to QEMU, which is useful for debugging and documentation generation.
|
# sent to QEMU, which is useful for debugging and documentation generation.
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
import json
|
import json
|
||||||
import ast
|
import ast
|
||||||
import readline
|
import readline
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/python
|
#!/usr/bin/env python3
|
||||||
##
|
##
|
||||||
# QEMU Object Model test tools
|
# QEMU Object Model test tools
|
||||||
#
|
#
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
# the COPYING file in the top-level directory.
|
# the COPYING file in the top-level directory.
|
||||||
##
|
##
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
from qmp import QEMUMonitorProtocol
|
from qmp import QEMUMonitorProtocol
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
# the COPYING file in the top-level directory.
|
# the COPYING file in the top-level directory.
|
||||||
##
|
##
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
from qmp import QEMUMonitorProtocol
|
from qmp import QEMUMonitorProtocol
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
# the COPYING file in the top-level directory.
|
# the COPYING file in the top-level directory.
|
||||||
##
|
##
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
from qmp import QEMUMonitorProtocol
|
from qmp import QEMUMonitorProtocol
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
# the COPYING file in the top-level directory.
|
# the COPYING file in the top-level directory.
|
||||||
##
|
##
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
from qmp import QEMUMonitorProtocol
|
from qmp import QEMUMonitorProtocol
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Render Qemu Block Graph
|
# Render Qemu Block Graph
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#
|
#
|
||||||
# Dump the contents of a recorded execution stream
|
# Dump the contents of a recorded execution stream
|
||||||
|
@ -18,7 +18,6 @@
|
||||||
# You should have received a copy of the GNU Lesser General Public
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
# License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
import argparse
|
import argparse
|
||||||
import struct
|
import struct
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
from __future__ import print_function
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
#
|
#
|
||||||
# Option ROM signing utility
|
# Option ROM signing utility
|
||||||
#
|
#
|
||||||
|
@ -44,14 +45,8 @@ fout.write(data)
|
||||||
|
|
||||||
checksum = 0
|
checksum = 0
|
||||||
for b in data:
|
for b in data:
|
||||||
# catch Python 2 vs. 3 differences
|
checksum = (checksum - b) & 255
|
||||||
if isinstance(b, int):
|
|
||||||
checksum += b
|
|
||||||
else:
|
|
||||||
checksum += ord(b)
|
|
||||||
checksum = (256 - checksum) % 256
|
|
||||||
|
|
||||||
# Python 3 no longer allows chr(checksum)
|
|
||||||
fout.write(struct.pack('B', checksum))
|
fout.write(struct.pack('B', checksum))
|
||||||
|
|
||||||
fin.close()
|
fin.close()
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Pretty-printer for simple trace backend binary trace files
|
# Pretty-printer for simple trace backend binary trace files
|
||||||
#
|
#
|
||||||
|
@ -9,7 +9,6 @@
|
||||||
#
|
#
|
||||||
# For help see docs/devel/tracing.txt
|
# For help see docs/devel/tracing.txt
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
import struct
|
import struct
|
||||||
import inspect
|
import inspect
|
||||||
from tracetool import read_events, Event
|
from tracetool import read_events, Event
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Compares vmstate information stored in JSON format, obtained from
|
# Compares vmstate information stored in JSON format, obtained from
|
||||||
# the -dump-vmstate QEMU command.
|
# the -dump-vmstate QEMU command.
|
||||||
|
@ -19,7 +19,6 @@
|
||||||
# You should have received a copy of the GNU General Public License along
|
# You should have received a copy of the GNU General Public License along
|
||||||
# with this program; if not, see <http://www.gnu.org/licenses/>.
|
# with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
import argparse
|
import argparse
|
||||||
import json
|
import json
|
||||||
import sys
|
import sys
|
||||||
|
|
|
@ -55,19 +55,16 @@ def pick_default_qemu_bin(arch=None):
|
||||||
return qemu_bin_from_src_dir_path
|
return qemu_bin_from_src_dir_path
|
||||||
|
|
||||||
|
|
||||||
def wait_for_console_pattern(test, success_message, failure_message=None):
|
def _console_interaction(test, success_message, failure_message,
|
||||||
"""
|
send_string, keep_sending=False):
|
||||||
Waits for messages to appear on the console, while logging the content
|
assert not keep_sending or send_string
|
||||||
|
|
||||||
:param test: an Avocado test containing a VM that will have its console
|
|
||||||
read and probed for a success or failure message
|
|
||||||
:type test: :class:`avocado_qemu.Test`
|
|
||||||
:param success_message: if this message appears, test succeeds
|
|
||||||
:param failure_message: if this message appears, test fails
|
|
||||||
"""
|
|
||||||
console = test.vm.console_socket.makefile()
|
console = test.vm.console_socket.makefile()
|
||||||
console_logger = logging.getLogger('console')
|
console_logger = logging.getLogger('console')
|
||||||
while True:
|
while True:
|
||||||
|
if send_string:
|
||||||
|
test.vm.console_socket.sendall(send_string.encode())
|
||||||
|
if not keep_sending:
|
||||||
|
send_string = None # send only once
|
||||||
msg = console.readline().strip()
|
msg = console.readline().strip()
|
||||||
if not msg:
|
if not msg:
|
||||||
continue
|
continue
|
||||||
|
@ -79,6 +76,43 @@ def wait_for_console_pattern(test, success_message, failure_message=None):
|
||||||
fail = 'Failure message found in console: %s' % failure_message
|
fail = 'Failure message found in console: %s' % failure_message
|
||||||
test.fail(fail)
|
test.fail(fail)
|
||||||
|
|
||||||
|
def interrupt_interactive_console_until_pattern(test, success_message,
|
||||||
|
failure_message=None,
|
||||||
|
interrupt_string='\r'):
|
||||||
|
"""
|
||||||
|
Keep sending a string to interrupt a console prompt, while logging the
|
||||||
|
console output. Typical use case is to break a boot loader prompt, such:
|
||||||
|
|
||||||
|
Press a key within 5 seconds to interrupt boot process.
|
||||||
|
5
|
||||||
|
4
|
||||||
|
3
|
||||||
|
2
|
||||||
|
1
|
||||||
|
Booting default image...
|
||||||
|
|
||||||
|
:param test: an Avocado test containing a VM that will have its console
|
||||||
|
read and probed for a success or failure message
|
||||||
|
:type test: :class:`avocado_qemu.Test`
|
||||||
|
:param success_message: if this message appears, test succeeds
|
||||||
|
:param failure_message: if this message appears, test fails
|
||||||
|
:param interrupt_string: a string to send to the console before trying
|
||||||
|
to read a new line
|
||||||
|
"""
|
||||||
|
_console_interaction(test, success_message, failure_message,
|
||||||
|
interrupt_string, True)
|
||||||
|
|
||||||
|
def wait_for_console_pattern(test, success_message, failure_message=None):
|
||||||
|
"""
|
||||||
|
Waits for messages to appear on the console, while logging the content
|
||||||
|
|
||||||
|
:param test: an Avocado test containing a VM that will have its console
|
||||||
|
read and probed for a success or failure message
|
||||||
|
:type test: :class:`avocado_qemu.Test`
|
||||||
|
:param success_message: if this message appears, test succeeds
|
||||||
|
:param failure_message: if this message appears, test fails
|
||||||
|
"""
|
||||||
|
_console_interaction(test, success_message, failure_message, None)
|
||||||
|
|
||||||
def exec_command_and_wait_for_pattern(test, command,
|
def exec_command_and_wait_for_pattern(test, command,
|
||||||
success_message, failure_message=None):
|
success_message, failure_message=None):
|
||||||
|
@ -94,10 +128,7 @@ def exec_command_and_wait_for_pattern(test, command,
|
||||||
:param success_message: if this message appears, test succeeds
|
:param success_message: if this message appears, test succeeds
|
||||||
:param failure_message: if this message appears, test fails
|
:param failure_message: if this message appears, test fails
|
||||||
"""
|
"""
|
||||||
command += '\r'
|
_console_interaction(test, success_message, failure_message, command + '\r')
|
||||||
test.vm.console_socket.sendall(command.encode())
|
|
||||||
wait_for_console_pattern(test, success_message, failure_message)
|
|
||||||
|
|
||||||
|
|
||||||
class Test(avocado.Test):
|
class Test(avocado.Test):
|
||||||
def _get_unique_tag_val(self, tag_name):
|
def _get_unique_tag_val(self, tag_name):
|
||||||
|
|
|
@ -40,7 +40,7 @@ class BootLinuxConsole(Test):
|
||||||
Extracts a file from a deb package into the test workdir
|
Extracts a file from a deb package into the test workdir
|
||||||
|
|
||||||
:param deb: path to the deb archive
|
:param deb: path to the deb archive
|
||||||
:param file: path within the deb archive of the file to be extracted
|
:param path: path within the deb archive of the file to be extracted
|
||||||
:returns: path of the extracted file
|
:returns: path of the extracted file
|
||||||
"""
|
"""
|
||||||
cwd = os.getcwd()
|
cwd = os.getcwd()
|
||||||
|
@ -49,7 +49,28 @@ class BootLinuxConsole(Test):
|
||||||
process.run("ar x %s %s" % (deb, file_path))
|
process.run("ar x %s %s" % (deb, file_path))
|
||||||
archive.extract(file_path, self.workdir)
|
archive.extract(file_path, self.workdir)
|
||||||
os.chdir(cwd)
|
os.chdir(cwd)
|
||||||
return self.workdir + path
|
# Return complete path to extracted file. Because callers to
|
||||||
|
# extract_from_deb() specify 'path' with a leading slash, it is
|
||||||
|
# necessary to use os.path.relpath() as otherwise os.path.join()
|
||||||
|
# interprets it as an absolute path and drops the self.workdir part.
|
||||||
|
return os.path.normpath(os.path.join(self.workdir,
|
||||||
|
os.path.relpath(path, '/')))
|
||||||
|
|
||||||
|
def extract_from_rpm(self, rpm, path):
|
||||||
|
"""
|
||||||
|
Extracts a file from an RPM package into the test workdir.
|
||||||
|
|
||||||
|
:param rpm: path to the rpm archive
|
||||||
|
:param path: path within the rpm archive of the file to be extracted
|
||||||
|
needs to be a relative path (starting with './') because
|
||||||
|
cpio(1), which is used to extract the file, expects that.
|
||||||
|
:returns: path of the extracted file
|
||||||
|
"""
|
||||||
|
cwd = os.getcwd()
|
||||||
|
os.chdir(self.workdir)
|
||||||
|
process.run("rpm2cpio %s | cpio -id %s" % (rpm, path), shell=True)
|
||||||
|
os.chdir(cwd)
|
||||||
|
return os.path.normpath(os.path.join(self.workdir, path))
|
||||||
|
|
||||||
def test_x86_64_pc(self):
|
def test_x86_64_pc(self):
|
||||||
"""
|
"""
|
||||||
|
@ -304,6 +325,7 @@ class BootLinuxConsole(Test):
|
||||||
:avocado: tags=arch:arm
|
:avocado: tags=arch:arm
|
||||||
:avocado: tags=machine:emcraft-sf2
|
:avocado: tags=machine:emcraft-sf2
|
||||||
:avocado: tags=endian:little
|
:avocado: tags=endian:little
|
||||||
|
:avocado: tags=u-boot
|
||||||
"""
|
"""
|
||||||
uboot_url = ('https://raw.githubusercontent.com/'
|
uboot_url = ('https://raw.githubusercontent.com/'
|
||||||
'Subbaraya-Sundeep/qemu-test-binaries/'
|
'Subbaraya-Sundeep/qemu-test-binaries/'
|
||||||
|
@ -519,7 +541,7 @@ class BootLinuxConsole(Test):
|
||||||
|
|
||||||
self.vm.set_console()
|
self.vm.set_console()
|
||||||
kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0'
|
kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0'
|
||||||
self.vm.add_args('-vga', 'std',
|
self.vm.add_args('-nodefaults',
|
||||||
'-kernel', uncompressed_kernel,
|
'-kernel', uncompressed_kernel,
|
||||||
'-append', kernel_command_line)
|
'-append', kernel_command_line)
|
||||||
self.vm.launch()
|
self.vm.launch()
|
||||||
|
@ -568,3 +590,99 @@ class BootLinuxConsole(Test):
|
||||||
self.wait_for_console_pattern(console_pattern)
|
self.wait_for_console_pattern(console_pattern)
|
||||||
console_pattern = 'No filesystem could mount root'
|
console_pattern = 'No filesystem could mount root'
|
||||||
self.wait_for_console_pattern(console_pattern)
|
self.wait_for_console_pattern(console_pattern)
|
||||||
|
|
||||||
|
def do_test_advcal_2018(self, day, tar_hash, kernel_name):
|
||||||
|
tar_url = ('https://www.qemu-advent-calendar.org'
|
||||||
|
'/2018/download/day' + day + '.tar.xz')
|
||||||
|
file_path = self.fetch_asset(tar_url, asset_hash=tar_hash)
|
||||||
|
archive.extract(file_path, self.workdir)
|
||||||
|
self.vm.set_console()
|
||||||
|
self.vm.add_args('-kernel',
|
||||||
|
self.workdir + '/day' + day + '/' + kernel_name)
|
||||||
|
self.vm.launch()
|
||||||
|
self.wait_for_console_pattern('QEMU advent calendar')
|
||||||
|
|
||||||
|
def test_arm_vexpressa9(self):
|
||||||
|
"""
|
||||||
|
:avocado: tags=arch:arm
|
||||||
|
:avocado: tags=machine:vexpress-a9
|
||||||
|
"""
|
||||||
|
tar_hash = '32b7677ce8b6f1471fb0059865f451169934245b'
|
||||||
|
self.vm.add_args('-dtb', self.workdir + '/day16/vexpress-v2p-ca9.dtb')
|
||||||
|
self.do_test_advcal_2018('16', tar_hash, 'winter.zImage')
|
||||||
|
|
||||||
|
def test_m68k_mcf5208evb(self):
|
||||||
|
"""
|
||||||
|
:avocado: tags=arch:m68k
|
||||||
|
:avocado: tags=machine:mcf5208evb
|
||||||
|
"""
|
||||||
|
tar_hash = 'ac688fd00561a2b6ce1359f9ff6aa2b98c9a570c'
|
||||||
|
self.do_test_advcal_2018('07', tar_hash, 'sanity-clause.elf')
|
||||||
|
|
||||||
|
def test_microblaze_s3adsp1800(self):
|
||||||
|
"""
|
||||||
|
:avocado: tags=arch:microblaze
|
||||||
|
:avocado: tags=machine:petalogix-s3adsp1800
|
||||||
|
"""
|
||||||
|
tar_hash = '08bf3e3bfb6b6c7ce1e54ab65d54e189f2caf13f'
|
||||||
|
self.do_test_advcal_2018('17', tar_hash, 'ballerina.bin')
|
||||||
|
|
||||||
|
def test_or1k_sim(self):
|
||||||
|
"""
|
||||||
|
:avocado: tags=arch:or1k
|
||||||
|
:avocado: tags=machine:or1k-sim
|
||||||
|
"""
|
||||||
|
tar_hash = '20334cdaf386108c530ff0badaecc955693027dd'
|
||||||
|
self.do_test_advcal_2018('20', tar_hash, 'vmlinux')
|
||||||
|
|
||||||
|
def test_nios2_10m50(self):
|
||||||
|
"""
|
||||||
|
:avocado: tags=arch:nios2
|
||||||
|
:avocado: tags=machine:10m50-ghrd
|
||||||
|
"""
|
||||||
|
tar_hash = 'e4251141726c412ac0407c5a6bceefbbff018918'
|
||||||
|
self.do_test_advcal_2018('14', tar_hash, 'vmlinux.elf')
|
||||||
|
|
||||||
|
def test_ppc64_e500(self):
|
||||||
|
"""
|
||||||
|
:avocado: tags=arch:ppc64
|
||||||
|
:avocado: tags=machine:ppce500
|
||||||
|
"""
|
||||||
|
tar_hash = '6951d86d644b302898da2fd701739c9406527fe1'
|
||||||
|
self.vm.add_args('-cpu', 'e5500')
|
||||||
|
self.do_test_advcal_2018('19', tar_hash, 'uImage')
|
||||||
|
|
||||||
|
def test_ppc_g3beige(self):
|
||||||
|
"""
|
||||||
|
:avocado: tags=arch:ppc
|
||||||
|
:avocado: tags=machine:g3beige
|
||||||
|
"""
|
||||||
|
tar_hash = 'e0b872a5eb8fdc5bed19bd43ffe863900ebcedfc'
|
||||||
|
self.vm.add_args('-M', 'graphics=off')
|
||||||
|
self.do_test_advcal_2018('15', tar_hash, 'invaders.elf')
|
||||||
|
|
||||||
|
def test_ppc_mac99(self):
|
||||||
|
"""
|
||||||
|
:avocado: tags=arch:ppc
|
||||||
|
:avocado: tags=machine:mac99
|
||||||
|
"""
|
||||||
|
tar_hash = 'e0b872a5eb8fdc5bed19bd43ffe863900ebcedfc'
|
||||||
|
self.vm.add_args('-M', 'graphics=off')
|
||||||
|
self.do_test_advcal_2018('15', tar_hash, 'invaders.elf')
|
||||||
|
|
||||||
|
def test_sparc_ss20(self):
|
||||||
|
"""
|
||||||
|
:avocado: tags=arch:sparc
|
||||||
|
:avocado: tags=machine:SS-20
|
||||||
|
"""
|
||||||
|
tar_hash = 'b18550d5d61c7615d989a06edace051017726a9f'
|
||||||
|
self.do_test_advcal_2018('11', tar_hash, 'zImage.elf')
|
||||||
|
|
||||||
|
def test_xtensa_lx60(self):
|
||||||
|
"""
|
||||||
|
:avocado: tags=arch:xtensa
|
||||||
|
:avocado: tags=machine:lx60
|
||||||
|
"""
|
||||||
|
tar_hash = '49e88d9933742f0164b60839886c9739cb7a0d34'
|
||||||
|
self.vm.add_args('-cpu', 'dc233c')
|
||||||
|
self.do_test_advcal_2018('02', tar_hash, 'santas-sleigh-ride.elf')
|
||||||
|
|
|
@ -10,13 +10,19 @@
|
||||||
# later. See the COPYING file in the top-level directory.
|
# later. See the COPYING file in the top-level directory.
|
||||||
|
|
||||||
|
|
||||||
|
import tempfile
|
||||||
from avocado_qemu import Test
|
from avocado_qemu import Test
|
||||||
|
from avocado import skipUnless
|
||||||
|
|
||||||
from avocado.utils import network
|
from avocado.utils import network
|
||||||
from avocado.utils import wait
|
from avocado.utils import wait
|
||||||
|
from avocado.utils.path import find_command
|
||||||
|
|
||||||
|
|
||||||
class Migration(Test):
|
class Migration(Test):
|
||||||
|
"""
|
||||||
|
:avocado: tags=migration
|
||||||
|
"""
|
||||||
|
|
||||||
timeout = 10
|
timeout = 10
|
||||||
|
|
||||||
|
@ -24,6 +30,28 @@ class Migration(Test):
|
||||||
def migration_finished(vm):
|
def migration_finished(vm):
|
||||||
return vm.command('query-migrate')['status'] in ('completed', 'failed')
|
return vm.command('query-migrate')['status'] in ('completed', 'failed')
|
||||||
|
|
||||||
|
def assert_migration(self, src_vm, dst_vm):
|
||||||
|
wait.wait_for(self.migration_finished,
|
||||||
|
timeout=self.timeout,
|
||||||
|
step=0.1,
|
||||||
|
args=(src_vm,))
|
||||||
|
self.assertEqual(src_vm.command('query-migrate')['status'], 'completed')
|
||||||
|
self.assertEqual(dst_vm.command('query-migrate')['status'], 'completed')
|
||||||
|
self.assertEqual(dst_vm.command('query-status')['status'], 'running')
|
||||||
|
self.assertEqual(src_vm.command('query-status')['status'],'postmigrate')
|
||||||
|
|
||||||
|
def do_migrate(self, dest_uri, src_uri=None):
|
||||||
|
dest_vm = self.get_vm('-incoming', dest_uri)
|
||||||
|
dest_vm.add_args('-nodefaults')
|
||||||
|
dest_vm.launch()
|
||||||
|
if src_uri is None:
|
||||||
|
src_uri = dest_uri
|
||||||
|
source_vm = self.get_vm()
|
||||||
|
source_vm.add_args('-nodefaults')
|
||||||
|
source_vm.launch()
|
||||||
|
source_vm.qmp('migrate', uri=src_uri)
|
||||||
|
self.assert_migration(source_vm, dest_vm)
|
||||||
|
|
||||||
def _get_free_port(self):
|
def _get_free_port(self):
|
||||||
port = network.find_free_port()
|
port = network.find_free_port()
|
||||||
if port is None:
|
if port is None:
|
||||||
|
@ -32,19 +60,18 @@ class Migration(Test):
|
||||||
|
|
||||||
|
|
||||||
def test_migration_with_tcp_localhost(self):
|
def test_migration_with_tcp_localhost(self):
|
||||||
source_vm = self.get_vm()
|
|
||||||
dest_uri = 'tcp:localhost:%u' % self._get_free_port()
|
dest_uri = 'tcp:localhost:%u' % self._get_free_port()
|
||||||
dest_vm = self.get_vm('-incoming', dest_uri)
|
self.do_migrate(dest_uri)
|
||||||
dest_vm.launch()
|
|
||||||
source_vm.launch()
|
def test_migration_with_unix(self):
|
||||||
source_vm.qmp('migrate', uri=dest_uri)
|
with tempfile.TemporaryDirectory(prefix='socket_') as socket_path:
|
||||||
wait.wait_for(
|
dest_uri = 'unix:%s/qemu-test.sock' % socket_path
|
||||||
self.migration_finished,
|
self.do_migrate(dest_uri)
|
||||||
timeout=self.timeout,
|
|
||||||
step=0.1,
|
@skipUnless(find_command('nc', default=False), "'nc' command not found")
|
||||||
args=(source_vm,)
|
def test_migration_with_exec(self):
|
||||||
)
|
"""
|
||||||
self.assertEqual(dest_vm.command('query-migrate')['status'], 'completed')
|
The test works for both netcat-traditional and netcat-openbsd packages
|
||||||
self.assertEqual(source_vm.command('query-migrate')['status'], 'completed')
|
"""
|
||||||
self.assertEqual(dest_vm.command('query-status')['status'], 'running')
|
free_port = self._get_free_port()
|
||||||
self.assertEqual(source_vm.command('query-status')['status'], 'postmigrate')
|
dest_uri = 'exec:nc -l localhost %u' % free_port
|
||||||
|
|
|
@ -17,6 +17,7 @@ class Version(Test):
|
||||||
:avocado: tags=quick
|
:avocado: tags=quick
|
||||||
"""
|
"""
|
||||||
def test_qmp_human_info_version(self):
|
def test_qmp_human_info_version(self):
|
||||||
|
self.vm.add_args('-nodefaults')
|
||||||
self.vm.launch()
|
self.vm.launch()
|
||||||
res = self.vm.command('human-monitor-command',
|
res = self.vm.command('human-monitor-command',
|
||||||
command_line='info version')
|
command_line='info version')
|
||||||
|
|
12
tests/acceptance/virtio_seg_max_adjust.py → tests/acceptance/virtio_check_params.py
Executable file → Normal file
12
tests/acceptance/virtio_seg_max_adjust.py → tests/acceptance/virtio_check_params.py
Executable file → Normal file
|
@ -1,4 +1,3 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
#
|
#
|
||||||
# Test virtio-scsi and virtio-blk queue settings for all machine types
|
# Test virtio-scsi and virtio-blk queue settings for all machine types
|
||||||
#
|
#
|
||||||
|
@ -21,10 +20,12 @@
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
import logging
|
||||||
|
|
||||||
sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
|
sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
|
||||||
from qemu.machine import QEMUMachine
|
from qemu.machine import QEMUMachine
|
||||||
from avocado_qemu import Test
|
from avocado_qemu import Test
|
||||||
|
from avocado import skip
|
||||||
|
|
||||||
#list of machine types and virtqueue properties to test
|
#list of machine types and virtqueue properties to test
|
||||||
VIRTIO_SCSI_PROPS = {'seg_max_adjust': 'seg_max_adjust'}
|
VIRTIO_SCSI_PROPS = {'seg_max_adjust': 'seg_max_adjust'}
|
||||||
|
@ -73,12 +74,20 @@ class VirtioMaxSegSettingsCheck(Test):
|
||||||
return query_ok, props, error
|
return query_ok, props, error
|
||||||
|
|
||||||
def check_mt(self, mt, dev_type_name):
|
def check_mt(self, mt, dev_type_name):
|
||||||
|
mt['device'] = dev_type_name # Only for the debug() call.
|
||||||
|
logger = logging.getLogger('machine')
|
||||||
|
logger.debug(mt)
|
||||||
with QEMUMachine(self.qemu_bin) as vm:
|
with QEMUMachine(self.qemu_bin) as vm:
|
||||||
vm.set_machine(mt["name"])
|
vm.set_machine(mt["name"])
|
||||||
|
vm.add_args('-nodefaults')
|
||||||
for s in VM_DEV_PARAMS[dev_type_name]:
|
for s in VM_DEV_PARAMS[dev_type_name]:
|
||||||
vm.add_args(s)
|
vm.add_args(s)
|
||||||
|
try:
|
||||||
vm.launch()
|
vm.launch()
|
||||||
query_ok, props, error = self.query_virtqueue(vm, dev_type_name)
|
query_ok, props, error = self.query_virtqueue(vm, dev_type_name)
|
||||||
|
except:
|
||||||
|
query_ok = False
|
||||||
|
error = sys.exc_info()[0]
|
||||||
|
|
||||||
if not query_ok:
|
if not query_ok:
|
||||||
self.fail('machine type {0}: {1}'.format(mt['name'], error))
|
self.fail('machine type {0}: {1}'.format(mt['name'], error))
|
||||||
|
@ -108,6 +117,7 @@ class VirtioMaxSegSettingsCheck(Test):
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@skip("break multi-arch CI")
|
||||||
def test_machine_types(self):
|
def test_machine_types(self):
|
||||||
# collect all machine types except 'none', 'isapc', 'microvm'
|
# collect all machine types except 'none', 'isapc', 'microvm'
|
||||||
with QEMUMachine(self.qemu_bin) as vm:
|
with QEMUMachine(self.qemu_bin) as vm:
|
|
@ -1,4 +1,3 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
#
|
#
|
||||||
# Basic validation of x86 versioned CPU models and CPU model aliases
|
# Basic validation of x86 versioned CPU models and CPU model aliases
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Travis YAML config parser
|
# Travis YAML config parser
|
||||||
#
|
#
|
||||||
|
@ -11,7 +11,6 @@
|
||||||
# or (at your option) any later version. See the COPYING file in
|
# or (at your option) any later version. See the COPYING file in
|
||||||
# the top-level directory.
|
# the top-level directory.
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
import sys
|
import sys
|
||||||
import yaml
|
import yaml
|
||||||
import itertools
|
import itertools
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
from __future__ import print_function
|
|
||||||
#
|
#
|
||||||
# This script needs to be run on startup
|
# This script needs to be run on startup
|
||||||
# qemu -kernel ${KERNEL} -s -S
|
# qemu -kernel ${KERNEL} -s -S
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
from __future__ import print_function
|
|
||||||
#
|
#
|
||||||
# Migration test main engine
|
# Migration test main engine
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
from __future__ import print_function
|
|
||||||
#
|
#
|
||||||
# Migration test graph plotting
|
# Migration test graph plotting
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
from __future__ import print_function
|
|
||||||
#
|
#
|
||||||
# Migration test command line shell integration
|
# Migration test command line shell integration
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# QAPI parser test harness
|
# QAPI parser test harness
|
||||||
#
|
#
|
||||||
|
@ -11,7 +11,6 @@
|
||||||
# See the COPYING file in the top-level directory.
|
# See the COPYING file in the top-level directory.
|
||||||
#
|
#
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import difflib
|
import difflib
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Tests for image streaming.
|
# Tests for image streaming.
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Tests for image block commit.
|
# Tests for image block commit.
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Tests for image mirroring.
|
# Tests for image mirroring.
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Tests growing a large refcount table.
|
# Tests growing a large refcount table.
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Tests for fdsets and getfd.
|
# Tests for fdsets and getfd.
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Tests for drive-backup and blockdev-backup
|
# Tests for drive-backup and blockdev-backup
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Tests for drive-backup
|
# Tests for drive-backup
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Tests for internal snapshot.
|
# Tests for internal snapshot.
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Test for additional information emitted by qemu-img info on qcow2
|
# Test for additional information emitted by qemu-img info on qcow2
|
||||||
# images
|
# images
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Tests for IO throttling
|
# Tests for IO throttling
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Test that snapshots move the throttling configuration to the active
|
# Test that snapshots move the throttling configuration to the active
|
||||||
# layer
|
# layer
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Test case for the QMP 'change' command and all other associated
|
# Test case for the QMP 'change' command and all other associated
|
||||||
# commands
|
# commands
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Tests for incremental drive-backup
|
# Tests for incremental drive-backup
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Tests that "bdrv_drain_all" doesn't drain block jobs
|
# Tests that "bdrv_drain_all" doesn't drain block jobs
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Test mirror with unmap
|
# Test mirror with unmap
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Tests for block device statistics
|
# Tests for block device statistics
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Test cases for the QMP 'blockdev-del' command
|
# Test cases for the QMP 'blockdev-del' command
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Test case for NBD's blockdev-add interface
|
# Test case for NBD's blockdev-add interface
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Test the rate limit of QMP events
|
# Test the rate limit of QMP events
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Copyright (C) 2016 Red Hat, Inc.
|
# Copyright (C) 2016 Red Hat, Inc.
|
||||||
#
|
#
|
||||||
|
@ -20,7 +20,6 @@
|
||||||
# Exercise the QEMU 'luks' block driver to validate interoperability
|
# Exercise the QEMU 'luks' block driver to validate interoperability
|
||||||
# with the Linux dm-crypt + cryptsetup implementation
|
# with the Linux dm-crypt + cryptsetup implementation
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
import subprocess
|
import subprocess
|
||||||
import os
|
import os
|
||||||
import os.path
|
import os.path
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Tests for active mirroring
|
# Tests for active mirroring
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Tests for drive-mirror with source size unaligned to granularity
|
# Tests for drive-mirror with source size unaligned to granularity
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Test whether the backing BDSs are correct after completion of a
|
# Test whether the backing BDSs are correct after completion of a
|
||||||
# mirror block job; in "existing" modes (drive-mirror with
|
# mirror block job; in "existing" modes (drive-mirror with
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Tests for shrinking images
|
# Tests for shrinking images
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Tests for persistent dirty bitmaps.
|
# Tests for persistent dirty bitmaps.
|
||||||
#
|
#
|
||||||
|
@ -18,7 +18,6 @@
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import iotests
|
import iotests
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Tests for dirty bitmaps migration.
|
# Tests for dirty bitmaps migration.
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Copyright (C) 2017 Red Hat, Inc.
|
# Copyright (C) 2017 Red Hat, Inc.
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Test clearing unknown autoclear_features flag by qcow2 after
|
# Test clearing unknown autoclear_features flag by qcow2 after
|
||||||
# migration. This test mimics migration to older qemu.
|
# migration. This test mimics migration to older qemu.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Tests for dirty bitmaps postcopy migration.
|
# Tests for dirty bitmaps postcopy migration.
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Copyright (C) 2017 Red Hat, Inc.
|
# Copyright (C) 2017 Red Hat, Inc.
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Copyright (C) 2017 Red Hat, Inc.
|
# Copyright (C) 2017 Red Hat, Inc.
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Tests for qmp command nbd-server-remove.
|
# Tests for qmp command nbd-server-remove.
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Test qcow2 and file image creation
|
# Test qcow2 and file image creation
|
||||||
#
|
#
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue