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 <cr...@redhat.com> 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 <cr...@redhat.com> >>> --- >>> 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 <cr...@redhat.com> >>> +# >>> +# 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. >