]>
Commit | Line | Data |
---|---|---|
82d4c923 WSM |
1 | # Linux initrd acceptance test. |
2 | # | |
3 | # Copyright (c) 2018 Red Hat, Inc. | |
4 | # | |
5 | # Author: | |
6 | # Wainer dos Santos Moschetta <[email protected]> | |
7 | # | |
8 | # This work is licensed under the terms of the GNU GPL, version 2 or | |
9 | # later. See the COPYING file in the top-level directory. | |
10 | ||
3c1de3af | 11 | import os |
8f1c89ec | 12 | import logging |
82d4c923 | 13 | import tempfile |
82d4c923 WSM |
14 | |
15 | from avocado_qemu import Test | |
3c1de3af | 16 | from avocado import skipIf |
82d4c923 WSM |
17 | |
18 | ||
19 | class LinuxInitrd(Test): | |
20 | """ | |
21 | Checks QEMU evaluates correctly the initrd file passed as -initrd option. | |
22 | ||
b194713f | 23 | :avocado: tags=arch:x86_64 |
ba21bde9 | 24 | :avocado: tags=machine:pc |
82d4c923 WSM |
25 | """ |
26 | ||
8f1c89ec | 27 | timeout = 300 |
82d4c923 | 28 | |
3c7156fd | 29 | def test_with_2gib_file_should_exit_error_msg_with_linux_v3_6(self): |
82d4c923 WSM |
30 | """ |
31 | Pretends to boot QEMU with an initrd file with size of 2GiB | |
32 | and expect it exits with error message. | |
3c7156fd LZ |
33 | Fedora-18 shipped with linux-3.6 which have not supported xloadflags |
34 | cannot support more than 2GiB initrd. | |
82d4c923 | 35 | """ |
3c7156fd LZ |
36 | kernel_url = ('https://archives.fedoraproject.org/pub/archive/fedora/li' |
37 | 'nux/releases/18/Fedora/x86_64/os/images/pxeboot/vmlinuz') | |
38 | kernel_hash = '41464f68efe42b9991250bed86c7081d2ccdbb21' | |
82d4c923 WSM |
39 | kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) |
40 | max_size = 2 * (1024 ** 3) - 1 | |
41 | ||
42 | with tempfile.NamedTemporaryFile() as initrd: | |
43 | initrd.seek(max_size) | |
44 | initrd.write(b'\0') | |
45 | initrd.flush() | |
c80c6beb WSM |
46 | self.vm.add_args('-kernel', kernel_path, '-initrd', initrd.name, |
47 | '-m', '4096') | |
48 | self.vm.set_qmp_monitor(enabled=False) | |
49 | self.vm.launch() | |
50 | self.vm.wait() | |
51 | self.assertEqual(self.vm.exitcode(), 1) | |
82d4c923 WSM |
52 | expected_msg = r'.*initrd is too large.*max: \d+, need %s.*' % ( |
53 | max_size + 1) | |
c80c6beb | 54 | self.assertRegex(self.vm.get_log(), expected_msg) |
8f1c89ec | 55 | |
3c1de3af | 56 | @skipIf(os.getenv('GITLAB_CI'), 'Running on GitLab') |
8f1c89ec LZ |
57 | def test_with_2gib_file_should_work_with_linux_v4_16(self): |
58 | """ | |
59 | QEMU has supported up to 4 GiB initrd for recent kernel | |
60 | Expect guest can reach 'Unpacking initramfs...' | |
61 | """ | |
93bbbdf6 CR |
62 | kernel_url = ('https://archives.fedoraproject.org/pub/archive/fedora' |
63 | '/linux/releases/28/Everything/x86_64/os/images/pxeboot/' | |
64 | 'vmlinuz') | |
8f1c89ec LZ |
65 | kernel_hash = '238e083e114c48200f80d889f7e32eeb2793e02a' |
66 | kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) | |
67 | max_size = 2 * (1024 ** 3) + 1 | |
68 | ||
69 | with tempfile.NamedTemporaryFile() as initrd: | |
70 | initrd.seek(max_size) | |
71 | initrd.write(b'\0') | |
72 | initrd.flush() | |
73 | ||
8f1c89ec LZ |
74 | self.vm.set_console() |
75 | kernel_command_line = 'console=ttyS0' | |
76 | self.vm.add_args('-kernel', kernel_path, | |
77 | '-append', kernel_command_line, | |
78 | '-initrd', initrd.name, | |
79 | '-m', '5120') | |
80 | self.vm.launch() | |
81 | console = self.vm.console_socket.makefile() | |
82 | console_logger = logging.getLogger('console') | |
83 | while True: | |
84 | msg = console.readline() | |
85 | console_logger.debug(msg.strip()) | |
86 | if 'Unpacking initramfs...' in msg: | |
87 | break | |
88 | if 'Kernel panic - not syncing' in msg: | |
89 | self.fail("Kernel panic reached") |