From nobody Thu Nov 6 06:41:18 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1537463966981906.0161095599123; Thu, 20 Sep 2018 10:19:26 -0700 (PDT) Received: from localhost ([::1]:52184 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1g32bh-0007pU-QG for importer@patchew.org; Thu, 20 Sep 2018 13:19:13 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35920) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1g32ac-0007Wa-88 for qemu-devel@nongnu.org; Thu, 20 Sep 2018 13:18:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1g32aZ-0005rK-4e for qemu-devel@nongnu.org; Thu, 20 Sep 2018 13:18:06 -0400 Received: from mx1.redhat.com ([209.132.183.28]:56892) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1g32aY-0005qn-QS for qemu-devel@nongnu.org; Thu, 20 Sep 2018 13:18:03 -0400 Received: from smtp.corp.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.26]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 08E573082A42 for ; Thu, 20 Sep 2018 17:18:02 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-125-88.rdu2.redhat.com [10.10.125.88]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 8BDA43091327; Thu, 20 Sep 2018 17:17:57 +0000 (UTC) From: Cleber Rosa To: qemu-devel@nongnu.org Date: Thu, 20 Sep 2018 13:17:56 -0400 Message-Id: <20180920171756.1009-1-crosa@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.26 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.45]); Thu, 20 Sep 2018 17:18:02 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH] Add "boot_linux" acceptance test X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Fam Zheng , Eduardo Habkost , Stefan Hajnoczi , Cleber Rosa Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RDMRC_1 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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=3D=3D65.0 pycdlib=3D=3D1.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.h= tml Reference: https://github.com/avocado-framework/avocado/commit/02c47b1eade6= 67d18fb0adef3293d86a6b5fd2e9 Signed-off-by: Cleber Rosa --- 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 +# +# 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 =3D 600 + + def test(self): + self.vm.set_machine(self.params.get('machine', default=3D'pc')) + self.vm.add_args('-accel', self.params.get('accel', default=3D'kvm= ')) + self.vm.add_args('-smp', self.params.get('smp', default=3D'2')) + self.vm.add_args('-m', self.params.get('memory', default=3D'4096')) + + arch =3D self.params.get('arch', default=3Dos.uname()[4]) + distro =3D self.params.get('distro', default=3D'fedora') + version =3D self.params.get('version', default=3D'28') + boot =3D vmimage.get(distro, arch=3Darch, version=3Dversion, + cache_dir=3Dself.cache_dirs[0], + snapshot_dir=3Dself.workdir) + self.vm.add_args('-drive', 'file=3D%s' % boot.path) + + cloudinit_iso =3D os.path.join(self.workdir, 'cloudinit.iso') + phone_home_port =3D network.find_free_port() + cloudinit.iso(cloudinit_iso, self.name, + # QEMU's hard coded usermode router address + phone_home_host=3D'10.0.2.2', + phone_home_port=3Dphone_home_port) + self.vm.add_args('-drive', 'file=3D%s' % cloudinit_iso) + + self.vm.launch() + cloudinit.wait_for_phone_home(('0.0.0.0', phone_home_port), self.n= ame) --=20 2.17.1