[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC 10/24] avocado_qemu: Add support to request image for
From: |
Eduardo Habkost |
Subject: |
[Qemu-devel] [RFC 10/24] avocado_qemu: Add support to request image for testing |
Date: |
Fri, 20 Apr 2018 15:19:37 -0300 |
From: Lukáš Doktor <address@hidden>
Some of the tests require (usually bootable) image to be executed, let's
add a helper function which uses the default params to define the image
or provides useful default and explains what's going on in case the
image is not available.
Signed-off-by: Lukáš Doktor <address@hidden>
Signed-off-by: Eduardo Habkost <address@hidden>
---
tests/avocado/README.rst | 12 ++++++-----
tests/avocado/avocado_qemu/test.py | 44 ++++++++++++++++++++++++++++++++------
2 files changed, 44 insertions(+), 12 deletions(-)
diff --git a/tests/avocado/README.rst b/tests/avocado/README.rst
index f0e703fe06..07852e790a 100644
--- a/tests/avocado/README.rst
+++ b/tests/avocado/README.rst
@@ -59,14 +59,16 @@ file using the Avocado parameters system:
- ``arch``: Probe the Qemu binary from a given architecture. It has no
effect if ``qemu_bin`` is specified. If not provided, the binary probe
will use the system architecture. Example: ``arch: x86_64``
-- ``image_path``: VMs are defined without image. If the ``image_path``
- is specified, it will be used as the VM image. The ``-snapshot``
- option will then be used to avoid writing into the image. Example:
- ``image_path: /var/lib/images/fedora-25.img``
+- ``image_path``: When a test requires (usually a bootable) image, this
+ parameter is used to define where the image is located. When undefined
+ it uses ``$QEMU_ROOT/bootable_image_$arch.qcow2``. The image is added
+ to the qemu command __only__ when the test requires an image. By
+ default ``,snapshot=on`` is used, but it can be altered by
+ ``image_snapshot`` parameter.
- ``image_user`` and ``image_pass``: When using a ``image_path``, if you
want to get the console from the Guest OS you have to define the Guest
OS credentials. Example: ``image_user: root`` and
- ``image_pass: p4ssw0rd``
+ ``image_pass: p4ssw0rd``. By default it uses ``root`` and ``123456``.
- ``machine_type``: Use this option to define a machine type for the VM.
Example: ``machine_type: pc``
- ``machine_accel``: Use this option to define a machine acceleration
diff --git a/tests/avocado/avocado_qemu/test.py
b/tests/avocado/avocado_qemu/test.py
index 966936a52f..57c63b2853 100644
--- a/tests/avocado/avocado_qemu/test.py
+++ b/tests/avocado/avocado_qemu/test.py
@@ -39,8 +39,10 @@ from avocado.utils import network
from avocado.utils import process
from avocado.utils import path as utils_path
from avocado.utils import wait
-sys.path.append(os.path.join(os.path.dirname(__file__),
- '..', '..', '..', 'scripts'))
+
+QEMU_ROOT = os.path.abspath(os.path.dirname(os.path.dirname(os.path.dirname(
+ os.path.dirname(__file__)))))
+sys.path.append(os.path.join(QEMU_ROOT, 'scripts'))
import qemu
@@ -360,11 +362,6 @@ class QemuTest(Test):
password=self.params.get('image_pass', default="123456"),
qemu_dst_bin=self.params.get('qemu_dst_bin'))
- self.vm.image = self.params.get('image_path')
- if self.vm.image is not None:
- self.vm.args.extend(['-drive', 'file=%s' % self.vm.image])
- self.vm.args.append('-snapshot')
-
machine_type = self.params.get('machine_type')
machine_accel = self.params.get('machine_accel')
machine_kvm_type = self.params.get('machine_kvm_type')
@@ -377,3 +374,36 @@ class QemuTest(Test):
machine += "kvm-type=%s," % machine_kvm_type
if machine:
self.vm.args.extend(['-machine', machine])
+
+ def request_image(self, path=None, snapshot=None, extra=None):
+ """
+ Add image to the `self.vm` using params or arguments.
+
+ Unless it's overridden by arguments it uses following test params
+ to specify the image:
+
+ * image_path - defines the path to the user-image. If not specified
+ it uses "QEMU_ROOT/boot_image_$arch.qcow2"
+ * image_snapshot - whether to use "snapshot=on" (snapshot=off is not
+ supplied)
+ * image_extra - free-form string to extend the "-drive" params
+
+ :param path: Override the path ("image_path" param is used otherwise)
+ :param snapshot: Override the usage of snapshot
+ :param extra: Extra arguments to be added to drive definition
+ """
+ if snapshot is None:
+ snapshot = self.params.get("image_snapshot", default=True)
+ if extra is None:
+ extra = self.params.get("image_extra", default="")
+ if path is None:
+ path = self.params.get("image_path")
+ if path is None:
+ arch = self.vm.arch
+ path = os.path.join(QEMU_ROOT, "boot_image_%s.qcow2" % arch)
+ if not os.path.exists(path):
+ self.error("Require a bootable image, which was not found. "
+ "Please provide one in '%s'." % path)
+ if snapshot:
+ extra += ",snapshot=on"
+ self.vm.args.extend(['-drive', 'file=%s%s' % (path, extra)])
--
2.14.3
- Re: [Qemu-devel] [RFC 01/24] qemu.py: Introduce _create_console() method, (continued)
- [Qemu-devel] [RFC 02/24] Introduce the basic framework to run Avocado tests, Eduardo Habkost, 2018/04/20
- [Qemu-devel] [RFC 03/24] avocado_qemu: Improve handle_prompts to allow login after booted vm, Eduardo Habkost, 2018/04/20
- [Qemu-devel] [RFC 04/24] avocado_qemu: Be lenient towards poluted serial console, Eduardo Habkost, 2018/04/20
- [Qemu-devel] [RFC 05/24] avocado_qemu: Increase the login timeout to 60s, Eduardo Habkost, 2018/04/20
- [Qemu-devel] [RFC 06/24] avocado_qemu: Add " " after the default prompt regexp, Eduardo Habkost, 2018/04/20
- [Qemu-devel] [RFC 07/24] avocado_qemu: Store "arch" in VM, Eduardo Habkost, 2018/04/20
- [Qemu-devel] [RFC 08/24] avocado_qemu: Provide defaults for user and pass, Eduardo Habkost, 2018/04/20
- [Qemu-devel] [RFC 09/24] avocado_qemu: Ignore kernel messages on get_console, Eduardo Habkost, 2018/04/20
- [Qemu-devel] [RFC 10/24] avocado_qemu: Add support to request image for testing,
Eduardo Habkost <=
- [Qemu-devel] [RFC 11/24] avocado_qemu: Fix exception name in caller, Eduardo Habkost, 2018/04/20
- [Qemu-devel] [RFC 12/24] avocado_qemu: Improve migration error message, Eduardo Habkost, 2018/04/20
- [Qemu-devel] [RFC 13/24] avocado_qemu: Functional test for RHBZ#1431939, Eduardo Habkost, 2018/04/20
- [Qemu-devel] [RFC 14/24] avocado_qemu: Functional test for RHBZ#1447027, Eduardo Habkost, 2018/04/20
- [Qemu-devel] [RFC 15/24] avocado_qemu: Functional test for RHBZ#1436616, Eduardo Habkost, 2018/04/20
- [Qemu-devel] [RFC 16/24] avocado_qemu: Functional test for RHBZ1473203, Eduardo Habkost, 2018/04/20
- [Qemu-devel] [RFC 17/24] avocado_qemu: Remove duplicate PortTracker implementation, Eduardo Habkost, 2018/04/20
- [Qemu-devel] [RFC 19/24] avocado_qemu: Clean unneeded 'pass', Eduardo Habkost, 2018/04/20
- [Qemu-devel] [RFC 18/24] avocado_qemu: Simplify the installation instructions, Eduardo Habkost, 2018/04/20