qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] Add "boot_linux" acceptance test


From: Philippe Mathieu-Daudé
Subject: Re: [Qemu-devel] [PATCH] Add "boot_linux" acceptance test
Date: Wed, 26 Sep 2018 19:27:29 +0100

Hi Cleber,

On Thu, Sep 20, 2018 at 6:18 PM Cleber Rosa <address@hidden> wrote:
>
> This acceptance test, validates that a full blown Linux guest can
> successfully boot in QEMU.  In this specific case, the guest
> chosen is Fedora version 28.  By passing parameters, the same
> test can attempt to boot different distros, arches, etc.
>
> The method for checking the successfull boot is based on "cloudinit"
> and its "phone home" feature.  The guest is given an ISO image
> with the location of the phone home server, and the information to
> post (the instance ID).  Upon receiving the correct information,
> from the guest, the test is considered to have PASSed.
>
> This test is currently limited to user mode networking only, and
> instructs the guest to connect to the "router" address that is hard
> coded in QEMU.
>
> This test requires features present in Avocado version 64.0, and when
> running under Python 3, requires a fix to the avocado.utils.vmimage
> library (to be included in version 65.0).  To create the cloudinit ISO
> image that will be used to configure the guest, the pycdlib library is
> also required.  The idea for a effortless execution of this test, is
> to set those requirements, that is:
>
>    avocado-framework==65.0
>    pycdlib==1.6.0
>
> In the "tests/venv-requirements.txt" file introduced in another patch
> series.
>
> Reference: https://lists.gnu.org/archive/html/qemu-devel/2018-09/msg02503.html
> Reference: 
> https://github.com/avocado-framework/avocado/commit/02c47b1eade667d18fb0adef3293d86a6b5fd2e9
> Signed-off-by: Cleber Rosa <address@hidden>
> ---
>  tests/acceptance/boot_linux.py | 52 ++++++++++++++++++++++++++++++++++
>  1 file changed, 52 insertions(+)
>  create mode 100644 tests/acceptance/boot_linux.py
>
> diff --git a/tests/acceptance/boot_linux.py b/tests/acceptance/boot_linux.py
> new file mode 100644
> index 0000000000..658211f15f
> --- /dev/null
> +++ b/tests/acceptance/boot_linux.py
> @@ -0,0 +1,52 @@
> +# Functional test that boots a complete Linux system via a cloud image
> +#
> +# Copyright (c) 2018 Red Hat, Inc.
> +#
> +# Author:
> +#  Cleber Rosa <address@hidden>
> +#
> +# This work is licensed under the terms of the GNU GPL, version 2 or
> +# later.  See the COPYING file in the top-level directory.
> +
> +import os
> +
> +from avocado_qemu import Test
> +
> +from avocado.utils import cloudinit
> +from avocado.utils import network
> +from avocado.utils import vmimage
> +
> +
> +class BootLinux(Test):
> +    """
> +    Boots a Linux system, checking for a successful initialization
> +
> +    :avocado: enable
> +    """
> +
> +    timeout = 600
> +
> +    def test(self):
> +        self.vm.set_machine(self.params.get('machine', default='pc'))
> +        self.vm.add_args('-accel', self.params.get('accel', default='kvm'))
> +        self.vm.add_args('-smp', self.params.get('smp', default='2'))
> +        self.vm.add_args('-m', self.params.get('memory', default='4096'))
> +
> +        arch = self.params.get('arch', default=os.uname()[4])
> +        distro = self.params.get('distro', default='fedora')
> +        version = self.params.get('version', default='28')
> +        boot = vmimage.get(distro, arch=arch, version=version,
> +                           cache_dir=self.cache_dirs[0],
> +                           snapshot_dir=self.workdir)
> +        self.vm.add_args('-drive', 'file=%s' % boot.path)
> +
> +        cloudinit_iso = os.path.join(self.workdir, 'cloudinit.iso')
> +        phone_home_port = network.find_free_port()
> +        cloudinit.iso(cloudinit_iso, self.name,
> +                      # QEMU's hard coded usermode router address
> +                      phone_home_host='10.0.2.2',
> +                      phone_home_port=phone_home_port)
> +        self.vm.add_args('-drive', 'file=%s' % cloudinit_iso)
> +
> +        self.vm.launch()
> +        cloudinit.wait_for_phone_home(('0.0.0.0', phone_home_port), 
> self.name)
> --
> 2.17.1
>

Using:

(venv) $ avocado run tests/acceptance

I'm getting:

DEBUG| DATA (filename=output.expected) => NOT FOUND (data sources:
variant, test, file)
DEBUG| PARAMS (key=qemu_bin, path=*,
default=x86_64-softmmu/qemu-system-x86_64) =>
'x86_64-softmmu/qemu-system-x86_64'
DEBUG| PARAMS (key=machine, path=*, default=pc) => 'pc'
DEBUG| PARAMS (key=accel, path=*, default=kvm) => 'kvm'
DEBUG| PARAMS (key=smp, path=*, default=2) => '2'
DEBUG| PARAMS (key=memory, path=*, default=4096) => '4096'
DEBUG| PARAMS (key=arch, path=*, default=x86_64) => 'x86_64'
DEBUG| PARAMS (key=distro, path=*, default=fedora) => 'fedora'
DEBUG| PARAMS (key=version, path=*, default=28) => '28'
ERROR|
ERROR| Reproduced traceback from:
/build/tests/venv/lib64/python3.6/site-packages/avocado/core/test.py:831
ERROR| Traceback (most recent call last):
ERROR|   File "/home/philmd/source/qemu/tests/acceptance/boot_linux.py",
line 40, in test
ERROR|     snapshot_dir=self.workdir)
ERROR|   File 
"/build/tests/venv/lib64/python3.6/site-packages/avocado/utils/vmimage.py",
line 371, in get
ERROR|     url=cls.get_image_url(),
ERROR|   File 
"/build/tests/venv/lib64/python3.6/site-packages/avocado/utils/vmimage.py",
line 144, in get_image_url
ERROR|     if int(self.version) >= 28:
ERROR|   File 
"/build/tests/venv/lib64/python3.6/site-packages/avocado/utils/vmimage.py",
line 81, in version
ERROR|     return self._best_version or self.get_version()
ERROR|   File 
"/build/tests/venv/lib64/python3.6/site-packages/avocado/utils/vmimage.py",
line 90, in get_version
ERROR|     parser.feed(urlopen(self.url_versions).read())
ERROR|   File "/usr/lib64/python3.6/html/parser.py", line 110, in feed
ERROR|     self.rawdata = self.rawdata + data
ERROR| TypeError: must be str, not bytes

Any hint?



reply via email to

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