From: Lukáš Doktor <ldok...@redhat.com> 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 <ldok...@redhat.com> Signed-off-by: Eduardo Habkost <ehabk...@redhat.com> --- 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