1import os 2 3import infra.basetest 4 5 6class TestScreen(infra.basetest.BRTest): 7 config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \ 8 """ 9 BR2_PACKAGE_SCREEN=y 10 BR2_TARGET_ROOTFS_CPIO=y 11 # BR2_TARGET_ROOTFS_TAR is not set 12 """ 13 14 def test_run(self): 15 cpio_file = os.path.join(self.builddir, "images", "rootfs.cpio") 16 self.emulator.boot(arch="armv5", 17 kernel="builtin", 18 options=["-initrd", cpio_file]) 19 self.emulator.login() 20 21 session_name = "BuildrootSession" 22 message = "HelloBuildroot" 23 screen_dump = "screen.dump.txt" 24 25 # Check the program can execute 26 self.assertRunOk("screen --version") 27 28 # There is no "screen" running yet. Listing sessions is 29 # expected to fail. 30 _, exit_code = self.emulator.run("screen -ls") 31 self.assertNotEqual(exit_code, 0) 32 33 # We now start a detached and named session. 34 self.assertRunOk(f"screen -dmS {session_name}") 35 36 # Since we are supposed to have a running session, it should 37 # appear in the list. 38 output, exit_code = self.emulator.run("screen -ls") 39 self.assertEqual(exit_code, 0) 40 self.assertIn(session_name, "\n".join(output)) 41 42 # We send an exec command to print a message in the "screen" 43 # display running in background. 44 cmd = f"screen -S {session_name} -X exec printf {message}" 45 self.assertRunOk(cmd) 46 47 # We request a hardcopy of this "screen" display. 48 cmd = f"screen -S {session_name} -X hardcopy {screen_dump}" 49 self.assertRunOk(cmd) 50 51 # The dump file is supposed to contain our message. 52 self.assertRunOk(f"grep -Fo '{message}' {screen_dump}") 53 54 # We request "screen" to quit... 55 cmd = f"screen -S {session_name} -X quit" 56 self.assertRunOk(cmd) 57 58 # Since the session is supposed to be terminated, listing 59 # sessions is expected to fail (again). 60 _, exit_code = self.emulator.run("screen -ls") 61 self.assertNotEqual(exit_code, 0) 62