qemu-devel
[Top][All Lists]
Advanced

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

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


From: Cleber Rosa
Subject: [Qemu-devel] [PATCH] Add "boot_linux" acceptance test
Date: Thu, 20 Sep 2018 13:17:56 -0400

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




reply via email to

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