]>
Commit | Line | Data |
---|---|---|
c7ebab0f PD |
1 | # Record/replay test that boots a Linux kernel |
2 | # | |
3 | # Copyright (c) 2020 ISP RAS | |
4 | # | |
5 | # Author: | |
6 | # Pavel Dovgalyuk <Pavel.Dovgaluk@ispras.ru> | |
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 | ||
11 | import os | |
1d2ff14b PD |
12 | import lzma |
13 | import shutil | |
c7ebab0f PD |
14 | import logging |
15 | import time | |
16 | ||
b48580ad | 17 | from avocado import skip |
9b45cc99 | 18 | from avocado import skipUnless |
a58bf4b3 | 19 | from avocado import skipUnless |
c7ebab0f PD |
20 | from avocado_qemu import wait_for_console_pattern |
21 | from avocado.utils import archive | |
22 | from avocado.utils import process | |
23 | from boot_linux_console import LinuxKernelTest | |
24 | ||
1d2ff14b | 25 | class ReplayKernelBase(LinuxKernelTest): |
c7ebab0f PD |
26 | """ |
27 | Boots a Linux kernel in record mode and checks that the console | |
28 | is operational and the kernel command line is properly passed | |
29 | from QEMU to the kernel. | |
30 | Then replays the same scenario and verifies, that QEMU correctly | |
31 | terminates. | |
32 | """ | |
33 | ||
36a7ab5f | 34 | timeout = 120 |
c7ebab0f PD |
35 | KERNEL_COMMON_COMMAND_LINE = 'printk.time=1 panic=-1 ' |
36 | ||
37 | def run_vm(self, kernel_path, kernel_command_line, console_pattern, | |
38 | record, shift, args, replay_path): | |
89b65e30 DHB |
39 | # icount requires TCG to be available |
40 | self.require_accelerator('tcg') | |
41 | ||
c7ebab0f PD |
42 | logger = logging.getLogger('replay') |
43 | start_time = time.time() | |
44 | vm = self.get_vm() | |
45 | vm.set_console() | |
46 | if record: | |
47 | logger.info('recording the execution...') | |
48 | mode = 'record' | |
49 | else: | |
50 | logger.info('replaying the execution...') | |
51 | mode = 'replay' | |
52 | vm.add_args('-icount', 'shift=%s,rr=%s,rrfile=%s' % | |
53 | (shift, mode, replay_path), | |
54 | '-kernel', kernel_path, | |
55 | '-append', kernel_command_line, | |
56 | '-net', 'none', | |
57 | '-no-reboot') | |
58 | if args: | |
59 | vm.add_args(*args) | |
60 | vm.launch() | |
61 | self.wait_for_console_pattern(console_pattern, vm) | |
62 | if record: | |
63 | vm.shutdown() | |
64 | logger.info('finished the recording with log size %s bytes' | |
65 | % os.path.getsize(replay_path)) | |
66 | else: | |
67 | vm.wait() | |
68 | logger.info('successfully finished the replay') | |
69 | elapsed = time.time() - start_time | |
70 | logger.info('elapsed time %.2f sec' % elapsed) | |
71 | return elapsed | |
72 | ||
73 | def run_rr(self, kernel_path, kernel_command_line, console_pattern, | |
74 | shift=7, args=None): | |
75 | replay_path = os.path.join(self.workdir, 'replay.bin') | |
76 | t1 = self.run_vm(kernel_path, kernel_command_line, console_pattern, | |
77 | True, shift, args, replay_path) | |
78 | t2 = self.run_vm(kernel_path, kernel_command_line, console_pattern, | |
79 | False, shift, args, replay_path) | |
80 | logger = logging.getLogger('replay') | |
81 | logger.info('replay overhead {:.2%}'.format(t2 / t1 - 1)) | |
904be130 | 82 | |
1d2ff14b | 83 | class ReplayKernelNormal(ReplayKernelBase): |
3365f3d9 | 84 | |
940f70cc AB |
85 | def test_i386_pc(self): |
86 | """ | |
87 | :avocado: tags=arch:i386 | |
88 | :avocado: tags=machine:pc | |
89 | """ | |
90 | kernel_url = ('https://storage.tuxboot.com/20230331/i386/bzImage') | |
91 | kernel_hash = 'a3e5b32a354729e65910f5a1ffcda7c14a6c12a55e8213fb86e277f1b76ed956' | |
92 | kernel_path = self.fetch_asset(kernel_url, | |
93 | asset_hash=kernel_hash, | |
94 | algorithm = "sha256") | |
95 | ||
96 | kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0' | |
97 | console_pattern = 'VFS: Cannot open root device' | |
98 | ||
99 | self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5) | |
100 | ||
139db3cc AB |
101 | # See https://gitlab.com/qemu-project/qemu/-/issues/2094 |
102 | @skipUnless(os.getenv('QEMU_TEST_FLAKY_TESTS'), 'Test sometimes gets stuck') | |
904be130 PD |
103 | def test_x86_64_pc(self): |
104 | """ | |
105 | :avocado: tags=arch:x86_64 | |
106 | :avocado: tags=machine:pc | |
139db3cc | 107 | :avocado: tags=flaky |
904be130 PD |
108 | """ |
109 | kernel_url = ('https://archives.fedoraproject.org/pub/archive/fedora' | |
110 | '/linux/releases/29/Everything/x86_64/os/images/pxeboot' | |
111 | '/vmlinuz') | |
112 | kernel_hash = '23bebd2680757891cf7adedb033532163a792495' | |
113 | kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) | |
114 | ||
115 | kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0' | |
116 | console_pattern = 'VFS: Cannot open root device' | |
117 | ||
118 | self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5) | |
152a41b7 | 119 | |
1d2ff14b PD |
120 | def test_mips_malta(self): |
121 | """ | |
122 | :avocado: tags=arch:mips | |
123 | :avocado: tags=machine:malta | |
124 | :avocado: tags=endian:big | |
125 | """ | |
126 | deb_url = ('http://snapshot.debian.org/archive/debian/' | |
127 | '20130217T032700Z/pool/main/l/linux-2.6/' | |
128 | 'linux-image-2.6.32-5-4kc-malta_2.6.32-48_mips.deb') | |
129 | deb_hash = 'a8cfc28ad8f45f54811fc6cf74fc43ffcfe0ba04' | |
130 | deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) | |
131 | kernel_path = self.extract_from_deb(deb_path, | |
132 | '/boot/vmlinux-2.6.32-5-4kc-malta') | |
133 | kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0' | |
134 | console_pattern = 'Kernel command line: %s' % kernel_command_line | |
135 | ||
136 | self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5) | |
137 | ||
138 | def test_mips64el_malta(self): | |
139 | """ | |
140 | This test requires the ar tool to extract "data.tar.gz" from | |
141 | the Debian package. | |
142 | ||
143 | The kernel can be rebuilt using this Debian kernel source [1] and | |
144 | following the instructions on [2]. | |
145 | ||
146 | [1] http://snapshot.debian.org/package/linux-2.6/2.6.32-48/ | |
147 | #linux-source-2.6.32_2.6.32-48 | |
148 | [2] https://kernel-team.pages.debian.net/kernel-handbook/ | |
149 | ch-common-tasks.html#s-common-official | |
150 | ||
151 | :avocado: tags=arch:mips64el | |
152 | :avocado: tags=machine:malta | |
153 | """ | |
154 | deb_url = ('http://snapshot.debian.org/archive/debian/' | |
155 | '20130217T032700Z/pool/main/l/linux-2.6/' | |
156 | 'linux-image-2.6.32-5-5kc-malta_2.6.32-48_mipsel.deb') | |
157 | deb_hash = '1aaec92083bf22fda31e0d27fa8d9a388e5fc3d5' | |
158 | deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) | |
159 | kernel_path = self.extract_from_deb(deb_path, | |
160 | '/boot/vmlinux-2.6.32-5-5kc-malta') | |
161 | kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0' | |
162 | console_pattern = 'Kernel command line: %s' % kernel_command_line | |
163 | self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5) | |
164 | ||
152a41b7 PD |
165 | def test_aarch64_virt(self): |
166 | """ | |
167 | :avocado: tags=arch:aarch64 | |
168 | :avocado: tags=machine:virt | |
169 | :avocado: tags=cpu:cortex-a53 | |
170 | """ | |
171 | kernel_url = ('https://archives.fedoraproject.org/pub/archive/fedora' | |
172 | '/linux/releases/29/Everything/aarch64/os/images/pxeboot' | |
173 | '/vmlinuz') | |
174 | kernel_hash = '8c73e469fc6ea06a58dc83a628fc695b693b8493' | |
175 | kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) | |
176 | ||
177 | kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + | |
178 | 'console=ttyAMA0') | |
179 | console_pattern = 'VFS: Cannot open root device' | |
180 | ||
d377ba48 | 181 | self.run_rr(kernel_path, kernel_command_line, console_pattern) |
2f2d83ad PD |
182 | |
183 | def test_arm_virt(self): | |
184 | """ | |
185 | :avocado: tags=arch:arm | |
186 | :avocado: tags=machine:virt | |
187 | """ | |
188 | kernel_url = ('https://archives.fedoraproject.org/pub/archive/fedora' | |
189 | '/linux/releases/29/Everything/armhfp/os/images/pxeboot' | |
190 | '/vmlinuz') | |
191 | kernel_hash = 'e9826d741b4fb04cadba8d4824d1ed3b7fb8b4d4' | |
192 | kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) | |
193 | ||
194 | kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + | |
195 | 'console=ttyAMA0') | |
196 | console_pattern = 'VFS: Cannot open root device' | |
197 | ||
198 | self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=1) | |
199 | ||
200 | def test_arm_cubieboard_initrd(self): | |
201 | """ | |
202 | :avocado: tags=arch:arm | |
203 | :avocado: tags=machine:cubieboard | |
204 | """ | |
205 | deb_url = ('https://apt.armbian.com/pool/main/l/' | |
e384db41 NL |
206 | 'linux-5.10.16-sunxi/linux-image-current-sunxi_21.02.2_armhf.deb') |
207 | deb_hash = '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0' | |
2f2d83ad PD |
208 | deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) |
209 | kernel_path = self.extract_from_deb(deb_path, | |
e384db41 NL |
210 | '/boot/vmlinuz-5.10.16-sunxi') |
211 | dtb_path = '/usr/lib/linux-image-current-sunxi/sun4i-a10-cubieboard.dtb' | |
2f2d83ad PD |
212 | dtb_path = self.extract_from_deb(deb_path, dtb_path) |
213 | initrd_url = ('https://github.com/groeck/linux-build-test/raw/' | |
214 | '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/' | |
215 | 'arm/rootfs-armv5.cpio.gz') | |
216 | initrd_hash = '2b50f1873e113523967806f4da2afe385462ff9b' | |
217 | initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) | |
218 | initrd_path = os.path.join(self.workdir, 'rootfs.cpio') | |
219 | archive.gzip_uncompress(initrd_path_gz, initrd_path) | |
220 | ||
221 | kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + | |
222 | 'console=ttyS0,115200 ' | |
223 | 'usbcore.nousb ' | |
224 | 'panic=-1 noreboot') | |
225 | console_pattern = 'Boot successful.' | |
226 | self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=1, | |
227 | args=('-dtb', dtb_path, | |
228 | '-initrd', initrd_path, | |
229 | '-no-reboot')) | |
2e1206b9 | 230 | |
f7ade779 PD |
231 | def test_s390x_s390_ccw_virtio(self): |
232 | """ | |
233 | :avocado: tags=arch:s390x | |
234 | :avocado: tags=machine:s390-ccw-virtio | |
235 | """ | |
236 | kernel_url = ('https://archives.fedoraproject.org/pub/archive' | |
237 | '/fedora-secondary/releases/29/Everything/s390x/os/images' | |
238 | '/kernel.img') | |
239 | kernel_hash = 'e8e8439103ef8053418ef062644ffd46a7919313' | |
240 | kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) | |
241 | ||
242 | kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=sclp0' | |
243 | console_pattern = 'Kernel command line: %s' % kernel_command_line | |
244 | self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=9) | |
245 | ||
7f7c382a PD |
246 | def test_alpha_clipper(self): |
247 | """ | |
248 | :avocado: tags=arch:alpha | |
249 | :avocado: tags=machine:clipper | |
250 | """ | |
251 | kernel_url = ('http://archive.debian.org/debian/dists/lenny/main/' | |
252 | 'installer-alpha/20090123lenny10/images/cdrom/vmlinuz') | |
253 | kernel_hash = '3a943149335529e2ed3e74d0d787b85fb5671ba3' | |
254 | kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) | |
255 | ||
256 | uncompressed_kernel = archive.uncompress(kernel_path, self.workdir) | |
257 | ||
258 | kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0' | |
259 | console_pattern = 'Kernel command line: %s' % kernel_command_line | |
260 | self.run_rr(uncompressed_kernel, kernel_command_line, console_pattern, shift=9, | |
261 | args=('-nodefaults', )) | |
262 | ||
2e1206b9 PD |
263 | def test_ppc64_pseries(self): |
264 | """ | |
265 | :avocado: tags=arch:ppc64 | |
266 | :avocado: tags=machine:pseries | |
89b65e30 | 267 | :avocado: tags=accel:tcg |
2e1206b9 PD |
268 | """ |
269 | kernel_url = ('https://archives.fedoraproject.org/pub/archive' | |
270 | '/fedora-secondary/releases/29/Everything/ppc64le/os' | |
271 | '/ppc/ppc64/vmlinuz') | |
272 | kernel_hash = '3fe04abfc852b66653b8c3c897a59a689270bc77' | |
273 | kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) | |
274 | ||
275 | kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=hvc0' | |
d08c825c | 276 | console_pattern = 'VFS: Cannot open root device' |
2e1206b9 | 277 | self.run_rr(kernel_path, kernel_command_line, console_pattern) |
20b1bf2e | 278 | |
d2b4e297 NP |
279 | def test_ppc64_powernv(self): |
280 | """ | |
281 | :avocado: tags=arch:ppc64 | |
282 | :avocado: tags=machine:powernv | |
283 | :avocado: tags=accel:tcg | |
284 | """ | |
285 | kernel_url = ('https://archives.fedoraproject.org/pub/archive' | |
286 | '/fedora-secondary/releases/29/Everything/ppc64le/os' | |
287 | '/ppc/ppc64/vmlinuz') | |
288 | kernel_hash = '3fe04abfc852b66653b8c3c897a59a689270bc77' | |
289 | kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) | |
290 | ||
291 | kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + \ | |
292 | 'console=tty0 console=hvc0' | |
293 | console_pattern = 'VFS: Cannot open root device' | |
294 | self.run_rr(kernel_path, kernel_command_line, console_pattern) | |
295 | ||
20b1bf2e PD |
296 | def test_m68k_q800(self): |
297 | """ | |
298 | :avocado: tags=arch:m68k | |
299 | :avocado: tags=machine:q800 | |
300 | """ | |
301 | deb_url = ('https://snapshot.debian.org/archive/debian-ports' | |
302 | '/20191021T083923Z/pool-m68k/main' | |
303 | '/l/linux/kernel-image-5.3.0-1-m68k-di_5.3.7-1_m68k.udeb') | |
304 | deb_hash = '044954bb9be4160a3ce81f8bc1b5e856b75cccd1' | |
305 | deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) | |
306 | kernel_path = self.extract_from_deb(deb_path, | |
307 | '/boot/vmlinux-5.3.0-1-m68k') | |
308 | ||
309 | kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + | |
310 | 'console=ttyS0 vga=off') | |
311 | console_pattern = 'No filesystem could mount root' | |
312 | self.run_rr(kernel_path, kernel_command_line, console_pattern) | |
b52d7e21 PD |
313 | |
314 | def do_test_advcal_2018(self, file_path, kernel_name, args=None): | |
315 | archive.extract(file_path, self.workdir) | |
316 | ||
317 | for entry in os.scandir(self.workdir): | |
318 | if entry.name.startswith('day') and entry.is_dir(): | |
319 | kernel_path = os.path.join(entry.path, kernel_name) | |
320 | break | |
321 | ||
322 | kernel_command_line = '' | |
323 | console_pattern = 'QEMU advent calendar' | |
324 | self.run_rr(kernel_path, kernel_command_line, console_pattern, | |
325 | args=args) | |
326 | ||
327 | def test_arm_vexpressa9(self): | |
328 | """ | |
329 | :avocado: tags=arch:arm | |
330 | :avocado: tags=machine:vexpress-a9 | |
331 | """ | |
332 | tar_hash = '32b7677ce8b6f1471fb0059865f451169934245b' | |
72cf57b0 TH |
333 | tar_url = ('https://qemu-advcal.gitlab.io' |
334 | '/qac-best-of-multiarch/download/day16.tar.xz') | |
b52d7e21 PD |
335 | file_path = self.fetch_asset(tar_url, asset_hash=tar_hash) |
336 | dtb_path = self.workdir + '/day16/vexpress-v2p-ca9.dtb' | |
337 | self.do_test_advcal_2018(file_path, 'winter.zImage', | |
338 | args=('-dtb', dtb_path)) | |
339 | ||
340 | def test_m68k_mcf5208evb(self): | |
341 | """ | |
342 | :avocado: tags=arch:m68k | |
343 | :avocado: tags=machine:mcf5208evb | |
344 | """ | |
345 | tar_hash = 'ac688fd00561a2b6ce1359f9ff6aa2b98c9a570c' | |
72cf57b0 TH |
346 | tar_url = ('https://qemu-advcal.gitlab.io' |
347 | '/qac-best-of-multiarch/download/day07.tar.xz') | |
b52d7e21 PD |
348 | file_path = self.fetch_asset(tar_url, asset_hash=tar_hash) |
349 | self.do_test_advcal_2018(file_path, 'sanity-clause.elf') | |
350 | ||
351 | def test_microblaze_s3adsp1800(self): | |
352 | """ | |
353 | :avocado: tags=arch:microblaze | |
354 | :avocado: tags=machine:petalogix-s3adsp1800 | |
355 | """ | |
356 | tar_hash = '08bf3e3bfb6b6c7ce1e54ab65d54e189f2caf13f' | |
72cf57b0 TH |
357 | tar_url = ('https://qemu-advcal.gitlab.io' |
358 | '/qac-best-of-multiarch/download/day17.tar.xz') | |
b52d7e21 PD |
359 | file_path = self.fetch_asset(tar_url, asset_hash=tar_hash) |
360 | self.do_test_advcal_2018(file_path, 'ballerina.bin') | |
361 | ||
362 | def test_ppc64_e500(self): | |
363 | """ | |
364 | :avocado: tags=arch:ppc64 | |
365 | :avocado: tags=machine:ppce500 | |
366 | :avocado: tags=cpu:e5500 | |
367 | """ | |
368 | tar_hash = '6951d86d644b302898da2fd701739c9406527fe1' | |
72cf57b0 TH |
369 | tar_url = ('https://qemu-advcal.gitlab.io' |
370 | '/qac-best-of-multiarch/download/day19.tar.xz') | |
b52d7e21 | 371 | file_path = self.fetch_asset(tar_url, asset_hash=tar_hash) |
d377ba48 | 372 | self.do_test_advcal_2018(file_path, 'uImage') |
b52d7e21 | 373 | |
27f55113 PD |
374 | def test_or1k_sim(self): |
375 | """ | |
376 | :avocado: tags=arch:or1k | |
377 | :avocado: tags=machine:or1k-sim | |
378 | """ | |
379 | tar_hash = '20334cdaf386108c530ff0badaecc955693027dd' | |
72cf57b0 TH |
380 | tar_url = ('https://qemu-advcal.gitlab.io' |
381 | '/qac-best-of-multiarch/download/day20.tar.xz') | |
27f55113 PD |
382 | file_path = self.fetch_asset(tar_url, asset_hash=tar_hash) |
383 | self.do_test_advcal_2018(file_path, 'vmlinux') | |
384 | ||
ce9771f5 PD |
385 | def test_nios2_10m50(self): |
386 | """ | |
387 | :avocado: tags=arch:nios2 | |
388 | :avocado: tags=machine:10m50-ghrd | |
389 | """ | |
390 | tar_hash = 'e4251141726c412ac0407c5a6bceefbbff018918' | |
72cf57b0 TH |
391 | tar_url = ('https://qemu-advcal.gitlab.io' |
392 | '/qac-best-of-multiarch/download/day14.tar.xz') | |
ce9771f5 PD |
393 | file_path = self.fetch_asset(tar_url, asset_hash=tar_hash) |
394 | self.do_test_advcal_2018(file_path, 'vmlinux.elf') | |
395 | ||
b52d7e21 PD |
396 | def test_ppc_g3beige(self): |
397 | """ | |
398 | :avocado: tags=arch:ppc | |
399 | :avocado: tags=machine:g3beige | |
400 | """ | |
401 | tar_hash = 'e0b872a5eb8fdc5bed19bd43ffe863900ebcedfc' | |
72cf57b0 TH |
402 | tar_url = ('https://qemu-advcal.gitlab.io' |
403 | '/qac-best-of-multiarch/download/day15.tar.xz') | |
b52d7e21 PD |
404 | file_path = self.fetch_asset(tar_url, asset_hash=tar_hash) |
405 | self.do_test_advcal_2018(file_path, 'invaders.elf', | |
406 | args=('-M', 'graphics=off')) | |
407 | ||
408 | def test_ppc_mac99(self): | |
409 | """ | |
410 | :avocado: tags=arch:ppc | |
411 | :avocado: tags=machine:mac99 | |
412 | """ | |
413 | tar_hash = 'e0b872a5eb8fdc5bed19bd43ffe863900ebcedfc' | |
72cf57b0 TH |
414 | tar_url = ('https://qemu-advcal.gitlab.io' |
415 | '/qac-best-of-multiarch/download/day15.tar.xz') | |
b52d7e21 PD |
416 | file_path = self.fetch_asset(tar_url, asset_hash=tar_hash) |
417 | self.do_test_advcal_2018(file_path, 'invaders.elf', | |
418 | args=('-M', 'graphics=off')) | |
419 | ||
420 | def test_sparc_ss20(self): | |
421 | """ | |
422 | :avocado: tags=arch:sparc | |
423 | :avocado: tags=machine:SS-20 | |
424 | """ | |
425 | tar_hash = 'b18550d5d61c7615d989a06edace051017726a9f' | |
72cf57b0 TH |
426 | tar_url = ('https://qemu-advcal.gitlab.io' |
427 | '/qac-best-of-multiarch/download/day11.tar.xz') | |
b52d7e21 PD |
428 | file_path = self.fetch_asset(tar_url, asset_hash=tar_hash) |
429 | self.do_test_advcal_2018(file_path, 'zImage.elf') | |
430 | ||
431 | def test_xtensa_lx60(self): | |
432 | """ | |
433 | :avocado: tags=arch:xtensa | |
434 | :avocado: tags=machine:lx60 | |
435 | :avocado: tags=cpu:dc233c | |
436 | """ | |
437 | tar_hash = '49e88d9933742f0164b60839886c9739cb7a0d34' | |
72cf57b0 TH |
438 | tar_url = ('https://qemu-advcal.gitlab.io' |
439 | '/qac-best-of-multiarch/download/day02.tar.xz') | |
b52d7e21 | 440 | file_path = self.fetch_asset(tar_url, asset_hash=tar_hash) |
d377ba48 | 441 | self.do_test_advcal_2018(file_path, 'santas-sleigh-ride.elf') |
1d2ff14b PD |
442 | |
443 | @skipUnless(os.getenv('AVOCADO_TIMEOUT_EXPECTED'), 'Test might timeout') | |
444 | class ReplayKernelSlow(ReplayKernelBase): | |
445 | # Override the timeout, because this kernel includes an inner | |
446 | # loop which is executed with TB recompilings during replay, | |
447 | # making it very slow. | |
448 | timeout = 180 | |
449 | ||
450 | def test_mips_malta_cpio(self): | |
451 | """ | |
452 | :avocado: tags=arch:mips | |
453 | :avocado: tags=machine:malta | |
454 | :avocado: tags=endian:big | |
455 | :avocado: tags=slowness:high | |
456 | """ | |
457 | deb_url = ('http://snapshot.debian.org/archive/debian/' | |
458 | '20160601T041800Z/pool/main/l/linux/' | |
459 | 'linux-image-4.5.0-2-4kc-malta_4.5.5-1_mips.deb') | |
460 | deb_hash = 'a3c84f3e88b54e06107d65a410d1d1e8e0f340f8' | |
461 | deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) | |
462 | kernel_path = self.extract_from_deb(deb_path, | |
463 | '/boot/vmlinux-4.5.0-2-4kc-malta') | |
464 | initrd_url = ('https://github.com/groeck/linux-build-test/raw/' | |
465 | '8584a59ed9e5eb5ee7ca91f6d74bbb06619205b8/rootfs/' | |
466 | 'mips/rootfs.cpio.gz') | |
467 | initrd_hash = 'bf806e17009360a866bf537f6de66590de349a99' | |
468 | initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) | |
469 | initrd_path = self.workdir + "rootfs.cpio" | |
470 | archive.gzip_uncompress(initrd_path_gz, initrd_path) | |
471 | ||
472 | kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + | |
473 | 'console=ttyS0 console=tty ' | |
474 | 'rdinit=/sbin/init noreboot') | |
475 | console_pattern = 'Boot successful.' | |
476 | self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5, | |
477 | args=('-initrd', initrd_path)) | |
478 | ||
479 | @skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted code') | |
480 | def test_mips64el_malta_5KEc_cpio(self): | |
481 | """ | |
482 | :avocado: tags=arch:mips64el | |
483 | :avocado: tags=machine:malta | |
484 | :avocado: tags=endian:little | |
485 | :avocado: tags=slowness:high | |
2d149759 | 486 | :avocado: tags=cpu:5KEc |
1d2ff14b PD |
487 | """ |
488 | kernel_url = ('https://github.com/philmd/qemu-testing-blob/' | |
489 | 'raw/9ad2df38/mips/malta/mips64el/' | |
490 | 'vmlinux-3.19.3.mtoman.20150408') | |
491 | kernel_hash = '00d1d268fb9f7d8beda1de6bebcc46e884d71754' | |
492 | kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) | |
493 | initrd_url = ('https://github.com/groeck/linux-build-test/' | |
494 | 'raw/8584a59e/rootfs/' | |
495 | 'mipsel64/rootfs.mipsel64r1.cpio.gz') | |
496 | initrd_hash = '1dbb8a396e916847325284dbe2151167' | |
497 | initrd_path_gz = self.fetch_asset(initrd_url, algorithm='md5', | |
498 | asset_hash=initrd_hash) | |
499 | initrd_path = self.workdir + "rootfs.cpio" | |
500 | archive.gzip_uncompress(initrd_path_gz, initrd_path) | |
501 | ||
502 | kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + | |
503 | 'console=ttyS0 console=tty ' | |
504 | 'rdinit=/sbin/init noreboot') | |
505 | console_pattern = 'Boot successful.' | |
506 | self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5, | |
2d149759 | 507 | args=('-initrd', initrd_path)) |
1d2ff14b PD |
508 | |
509 | def do_test_mips_malta32el_nanomips(self, kernel_path_xz): | |
510 | kernel_path = self.workdir + "kernel" | |
511 | with lzma.open(kernel_path_xz, 'rb') as f_in: | |
512 | with open(kernel_path, 'wb') as f_out: | |
513 | shutil.copyfileobj(f_in, f_out) | |
514 | ||
515 | kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + | |
516 | 'mem=256m@@0x0 ' | |
517 | 'console=ttyS0') | |
518 | console_pattern = 'Kernel command line: %s' % kernel_command_line | |
2d149759 | 519 | self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5) |
1d2ff14b PD |
520 | |
521 | def test_mips_malta32el_nanomips_4k(self): | |
522 | """ | |
523 | :avocado: tags=arch:mipsel | |
524 | :avocado: tags=machine:malta | |
525 | :avocado: tags=endian:little | |
2d149759 | 526 | :avocado: tags=cpu:I7200 |
1d2ff14b | 527 | """ |
a79e32a9 | 528 | kernel_url = ('http://mipsdistros.mips.com/LinuxDistro/nanomips/' |
1d2ff14b PD |
529 | 'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/' |
530 | 'generic_nano32r6el_page4k.xz') | |
531 | kernel_hash = '477456aafd2a0f1ddc9482727f20fe9575565dd6' | |
532 | kernel_path_xz = self.fetch_asset(kernel_url, asset_hash=kernel_hash) | |
533 | self.do_test_mips_malta32el_nanomips(kernel_path_xz) | |
534 | ||
535 | def test_mips_malta32el_nanomips_16k_up(self): | |
536 | """ | |
537 | :avocado: tags=arch:mipsel | |
538 | :avocado: tags=machine:malta | |
539 | :avocado: tags=endian:little | |
2d149759 | 540 | :avocado: tags=cpu:I7200 |
1d2ff14b | 541 | """ |
a79e32a9 | 542 | kernel_url = ('http://mipsdistros.mips.com/LinuxDistro/nanomips/' |
1d2ff14b PD |
543 | 'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/' |
544 | 'generic_nano32r6el_page16k_up.xz') | |
545 | kernel_hash = 'e882868f944c71c816e832e2303b7874d044a7bc' | |
546 | kernel_path_xz = self.fetch_asset(kernel_url, asset_hash=kernel_hash) | |
547 | self.do_test_mips_malta32el_nanomips(kernel_path_xz) | |
548 | ||
549 | def test_mips_malta32el_nanomips_64k_dbg(self): | |
550 | """ | |
551 | :avocado: tags=arch:mipsel | |
552 | :avocado: tags=machine:malta | |
553 | :avocado: tags=endian:little | |
2d149759 | 554 | :avocado: tags=cpu:I7200 |
1d2ff14b | 555 | """ |
a79e32a9 | 556 | kernel_url = ('http://mipsdistros.mips.com/LinuxDistro/nanomips/' |
1d2ff14b PD |
557 | 'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/' |
558 | 'generic_nano32r6el_page64k_dbg.xz') | |
559 | kernel_hash = '18d1c68f2e23429e266ca39ba5349ccd0aeb7180' | |
560 | kernel_path_xz = self.fetch_asset(kernel_url, asset_hash=kernel_hash) | |
561 | self.do_test_mips_malta32el_nanomips(kernel_path_xz) |