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?