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: Thu, 27 Sep 2018 01:41:57 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.0

On 9/27/18 1:05 AM, Cleber Rosa wrote:
> On 9/26/18 2:27 PM, Philippe Mathieu-Daudé wrote:
>> 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?
>>
> 
> Yep, this is the bug I meant in the commit message:
> 
> "when running under Python 3, requires a fix to the avocado.utils.vmimage".

Shame on me, I applied this patch on top of your "venv-requirements"
series, expecting it would contain:

avocado-framework==65.0
pycdlib==1.6.0

but it indeed contains:

avocado-framework==64.0

> Right now, your best bet to run this test is the latest Avocado master,
> or 64.0 on Python 2.
> 
> We should be releasing 65.0 next Monday (Oct 1st) so thing will be
> smooth for this test.
> 
> Thanks for trying it out!
> 
> - Cleber.
> 



reply via email to

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