12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- import os
- import infra.basetest
- class TestScreen(infra.basetest.BRTest):
- config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \
- """
- BR2_PACKAGE_SCREEN=y
- BR2_TARGET_ROOTFS_CPIO=y
- # BR2_TARGET_ROOTFS_TAR is not set
- """
- def test_run(self):
- cpio_file = os.path.join(self.builddir, "images", "rootfs.cpio")
- self.emulator.boot(arch="armv5",
- kernel="builtin",
- options=["-initrd", cpio_file])
- self.emulator.login()
- session_name = "BuildrootSession"
- message = "HelloBuildroot"
- screen_dump = "screen.dump.txt"
- # Check the program can execute
- self.assertRunOk("screen --version")
- # There is no "screen" running yet. Listing sessions is
- # expected to fail.
- _, exit_code = self.emulator.run("screen -ls")
- self.assertNotEqual(exit_code, 0)
- # We now start a detached and named session.
- self.assertRunOk(f"screen -dmS {session_name}")
- # Since we are supposed to have a running session, it should
- # appear in the list.
- output, exit_code = self.emulator.run("screen -ls")
- self.assertEqual(exit_code, 0)
- self.assertIn(session_name, "\n".join(output))
- # We send an exec command to print a message in the "screen"
- # display running in background.
- cmd = f"screen -S {session_name} -X exec printf {message}"
- self.assertRunOk(cmd)
- # We request a hardcopy of this "screen" display.
- cmd = f"screen -S {session_name} -X hardcopy {screen_dump}"
- self.assertRunOk(cmd)
- # The dump file is supposed to contain our message.
- self.assertRunOk(f"grep -Fo '{message}' {screen_dump}")
- # We request "screen" to quit...
- cmd = f"screen -S {session_name} -X quit"
- self.assertRunOk(cmd)
- # Since the session is supposed to be terminated, listing
- # sessions is expected to fail (again).
- _, exit_code = self.emulator.run("screen -ls")
- self.assertNotEqual(exit_code, 0)
|