summaryrefslogtreecommitdiffstats
path: root/tests/avocado/machine_m68k_nextcube.py
diff options
context:
space:
mode:
authorRichard Henderson2021-11-08 18:50:09 +0100
committerRichard Henderson2021-11-08 18:50:09 +0100
commit114f3c8cc427333dbae331dfd2ecae64676b087e (patch)
tree6b609b516b20585ab8ad70cd86055c37132fd169 /tests/avocado/machine_m68k_nextcube.py
parentMerge remote-tracking branch 'remotes/bonzini/tags/for-upstream' into staging (diff)
parenttests/avocado: Remove p7zip binary availability check (diff)
downloadqemu-114f3c8cc427333dbae331dfd2ecae64676b087e.tar.gz
qemu-114f3c8cc427333dbae331dfd2ecae64676b087e.tar.xz
qemu-114f3c8cc427333dbae331dfd2ecae64676b087e.zip
Merge remote-tracking branch 'remotes/philmd/tags/avocado-20211108' into staging
Integration testing patches - Rename tests/acceptance/ -> tests/avocado/ - Rename avocado_qemu.Test -> avocado_qemu.QemuSystemTest - Introduce QemuUserTest class - Add the first linux-user test, covering the bFLT loader # gpg: Signature made Mon 08 Nov 2021 05:16:46 PM CET # gpg: using RSA key FAABE75E12917221DCFD6BB2E3E32C2CDEADC0DE # gpg: Good signature from "Philippe Mathieu-Daudé (F4BUG) <f4bug@amsat.org>" [full] * remotes/philmd/tags/avocado-20211108: tests/avocado: Remove p7zip binary availability check tests/avocado: Rename avocado_qemu.Test -> QemuSystemTest tests/avocado: Add bFLT loader linux-user test tests/avocado: Share useful helpers from virtiofs_submounts test tests/avocado: Introduce QemuUserTest base class tests/avocado: Make pick_default_qemu_bin() more generic tests/avocado: Extract QemuBaseTest from Test tests/acceptance: rename tests acceptance to tests avocado tests/acceptance: introduce new check-avocado target Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'tests/avocado/machine_m68k_nextcube.py')
-rw-r--r--tests/avocado/machine_m68k_nextcube.py79
1 files changed, 79 insertions, 0 deletions
diff --git a/tests/avocado/machine_m68k_nextcube.py b/tests/avocado/machine_m68k_nextcube.py
new file mode 100644
index 0000000000..6790e7d9cd
--- /dev/null
+++ b/tests/avocado/machine_m68k_nextcube.py
@@ -0,0 +1,79 @@
+# Functional test that boots a VM and run OCR on the framebuffer
+#
+# Copyright (c) 2019 Philippe Mathieu-Daudé <f4bug@amsat.org>
+#
+# 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
+import time
+
+from avocado_qemu import QemuSystemTest
+from avocado import skipUnless
+
+from tesseract_utils import tesseract_available, tesseract_ocr
+
+PIL_AVAILABLE = True
+try:
+ from PIL import Image
+except ImportError:
+ PIL_AVAILABLE = False
+
+
+class NextCubeMachine(QemuSystemTest):
+ """
+ :avocado: tags=arch:m68k
+ :avocado: tags=machine:next-cube
+ :avocado: tags=device:framebuffer
+ """
+
+ timeout = 15
+
+ def check_bootrom_framebuffer(self, screenshot_path):
+ rom_url = ('http://www.nextcomputers.org/NeXTfiles/Software/ROM_Files/'
+ '68040_Non-Turbo_Chipset/Rev_2.5_v66.BIN')
+ rom_hash = 'b3534796abae238a0111299fc406a9349f7fee24'
+ rom_path = self.fetch_asset(rom_url, asset_hash=rom_hash)
+
+ self.vm.add_args('-bios', rom_path)
+ self.vm.launch()
+
+ self.log.info('VM launched, waiting for display')
+ # TODO: Use avocado.utils.wait.wait_for to catch the
+ # 'displaysurface_create 1120x832' trace-event.
+ time.sleep(2)
+
+ self.vm.command('human-monitor-command',
+ command_line='screendump %s' % screenshot_path)
+
+ @skipUnless(PIL_AVAILABLE, 'Python PIL not installed')
+ def test_bootrom_framebuffer_size(self):
+ screenshot_path = os.path.join(self.workdir, "dump.ppm")
+ self.check_bootrom_framebuffer(screenshot_path)
+
+ width, height = Image.open(screenshot_path).size
+ self.assertEqual(width, 1120)
+ self.assertEqual(height, 832)
+
+ @skipUnless(tesseract_available(3), 'tesseract v3 OCR tool not available')
+ def test_bootrom_framebuffer_ocr_with_tesseract_v3(self):
+ screenshot_path = os.path.join(self.workdir, "dump.ppm")
+ self.check_bootrom_framebuffer(screenshot_path)
+ lines = tesseract_ocr(screenshot_path, tesseract_version=3)
+ text = '\n'.join(lines)
+ self.assertIn('Backplane', text)
+ self.assertIn('Ethernet address', text)
+
+ # Tesseract 4 adds a new OCR engine based on LSTM neural networks. The
+ # new version is faster and more accurate than version 3. The drawback is
+ # that it is still alpha-level software.
+ @skipUnless(tesseract_available(4), 'tesseract v4 OCR tool not available')
+ def test_bootrom_framebuffer_ocr_with_tesseract_v4(self):
+ screenshot_path = os.path.join(self.workdir, "dump.ppm")
+ self.check_bootrom_framebuffer(screenshot_path)
+ lines = tesseract_ocr(screenshot_path, tesseract_version=4)
+ text = '\n'.join(lines)
+ self.assertIn('Testing the FPU, SCC', text)
+ self.assertIn('System test failed. Error code', text)
+ self.assertIn('Boot command', text)
+ self.assertIn('Next>', text)