yeahuh / rpms / qemu-kvm

Forked from rpms/qemu-kvm 2 years ago
Clone
26ba25
From a326b17336ae12d9fa492ea34b9b1b08150262d0 Mon Sep 17 00:00:00 2001
26ba25
From: Yash Mankad <ymankad@redhat.com>
26ba25
Date: Wed, 12 Dec 2018 00:14:39 +0000
26ba25
Subject: [PATCH 11/13] Acceptance tests: add Linux kernel boot and console
26ba25
 checking test
26ba25
MIME-Version: 1.0
26ba25
Content-Type: text/plain; charset=UTF-8
26ba25
Content-Transfer-Encoding: 8bit
26ba25
26ba25
RH-Author: Yash Mankad <ymankad@redhat.com>
26ba25
Message-id: <d56f34e8ffd54d5df93dadface61538e5a3c99ab.1544573601.git.ymankad@redhat.com>
26ba25
Patchwork-id: 83433
26ba25
O-Subject: [RHEL-8.0 qemu-kvm PATCH v2 5/7] Acceptance tests: add Linux kernel boot and console checking test
26ba25
Bugzilla: 1655807
26ba25
RH-Acked-by: Eduardo Habkost <ehabkost@redhat.com>
26ba25
RH-Acked-by: John Snow <jsnow@redhat.com>
26ba25
RH-Acked-by: Philippe Mathieu-Daudé <philmd@redhat.com>
26ba25
26ba25
From: Cleber Rosa <crosa@redhat.com>
26ba25
26ba25
This test boots a Linux kernel, and checks that the given command
26ba25
line was effective in two ways:
26ba25
26ba25
 * It makes the kernel use the set "console device" as a console
26ba25
 * The kernel records the command line as expected in the console
26ba25
26ba25
Given that way too many error conditions may occur, and detecting the
26ba25
kernel boot progress status may not be trivial, this test relies on a
26ba25
timeout to handle unexpected situations.  Also, it's *not* tagged as a
26ba25
quick test for obvious reasons.
26ba25
26ba25
It may be useful, while interactively running/debugging this test, or
26ba25
tests similar to this one, to show some of the logging channels.
26ba25
Example:
26ba25
26ba25
 $ avocado --show=QMP,console run boot_linux_console.py
26ba25
26ba25
Signed-off-by: Cleber Rosa <crosa@redhat.com>
26ba25
Message-Id: <20180530184156.15634-6-crosa@redhat.com>
26ba25
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
26ba25
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
26ba25
(cherry picked from commit c1cc73f407b890c4e7ab5bf520c0637e0364e92a)
26ba25
Signed-off-by: Yash Mankad <ymankad@redhat.com>
26ba25
Signed-off-by: Danilo C. L. de Paula <ddepaula@redhat.com>
26ba25
---
26ba25
 tests/acceptance/boot_linux_console.py | 47 ++++++++++++++++++++++++++++++++++
26ba25
 1 file changed, 47 insertions(+)
26ba25
 create mode 100644 tests/acceptance/boot_linux_console.py
26ba25
26ba25
diff --git a/tests/acceptance/boot_linux_console.py b/tests/acceptance/boot_linux_console.py
26ba25
new file mode 100644
26ba25
index 0000000..98324f7
26ba25
--- /dev/null
26ba25
+++ b/tests/acceptance/boot_linux_console.py
26ba25
@@ -0,0 +1,47 @@
26ba25
+# Functional test that boots a Linux kernel and checks the console
26ba25
+#
26ba25
+# Copyright (c) 2018 Red Hat, Inc.
26ba25
+#
26ba25
+# Author:
26ba25
+#  Cleber Rosa <crosa@redhat.com>
26ba25
+#
26ba25
+# This work is licensed under the terms of the GNU GPL, version 2 or
26ba25
+# later.  See the COPYING file in the top-level directory.
26ba25
+
26ba25
+import logging
26ba25
+
26ba25
+from avocado_qemu import Test
26ba25
+
26ba25
+
26ba25
+class BootLinuxConsole(Test):
26ba25
+    """
26ba25
+    Boots a x86_64 Linux kernel and checks that the console is operational
26ba25
+    and the kernel command line is properly passed from QEMU to the kernel
26ba25
+
26ba25
+    :avocado: enable
26ba25
+    :avocado: tags=x86_64
26ba25
+    """
26ba25
+
26ba25
+    timeout = 60
26ba25
+
26ba25
+    def test(self):
26ba25
+        kernel_url = ('https://mirrors.kernel.org/fedora/releases/28/'
26ba25
+                      'Everything/x86_64/os/images/pxeboot/vmlinuz')
26ba25
+        kernel_hash = '238e083e114c48200f80d889f7e32eeb2793e02a'
26ba25
+        kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
26ba25
+
26ba25
+        self.vm.set_machine('pc')
26ba25
+        self.vm.set_console()
26ba25
+        kernel_command_line = 'console=ttyS0'
26ba25
+        self.vm.add_args('-kernel', kernel_path,
26ba25
+                         '-append', kernel_command_line)
26ba25
+        self.vm.launch()
26ba25
+        console = self.vm.console_socket.makefile()
26ba25
+        console_logger = logging.getLogger('console')
26ba25
+        while True:
26ba25
+            msg = console.readline()
26ba25
+            console_logger.debug(msg.strip())
26ba25
+            if 'Kernel command line: %s' % kernel_command_line in msg:
26ba25
+                break
26ba25
+            if 'Kernel panic - not syncing' in msg:
26ba25
+                self.fail("Kernel panic reached")
26ba25
-- 
26ba25
1.8.3.1
26ba25