qemu-devel
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]