1import os 2import textwrap 3 4import infra.basetest 5 6 7class TestS6(infra.basetest.BRTest): 8 config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \ 9 """ 10 BR2_PACKAGE_S6=y 11 BR2_TARGET_ROOTFS_CPIO=y 12 # BR2_TARGET_ROOTFS_TAR is not set 13 """ 14 15 def test_run(self): 16 img = os.path.join(self.builddir, "images", "rootfs.cpio") 17 self.emulator.boot(arch="armv5", 18 kernel="builtin", 19 options=["-initrd", img]) 20 self.emulator.login() 21 22 _, exit_code = self.emulator.run("s6-svscan -h") 23 self.assertEqual(exit_code, 100) 24 25 script = \ 26 """ 27 #!/bin/execlineb -P 28 s6-ipcserver-socketbinder /tmp/socket 29 s6-ipcserverd 30 cat 31 """ 32 script = textwrap.dedent(script) 33 34 # Set up scanning and service directories 35 self.emulator.run("mkdir -p source/testsv") 36 self.emulator.run("cat > source/testsv/run <<EOF" + script + "EOF") 37 self.emulator.run("chmod +x source/testsv/run") 38 _, exit_code = self.emulator.run("s6-svok source/testsv") 39 self.assertEqual(exit_code, 1) 40 41 # Run a scan and start all services 42 self.emulator.run("s6-svscan source &") 43 self.emulator.run("sleep 2") 44 _, exit_code = self.emulator.run("s6-svok source/testsv") 45 self.assertEqual(exit_code, 0) 46 47 # Test a running service 48 cmd = "echo foobar | s6-ipcclient /tmp/socket s6-ioconnect -67" 49 output, exit_code = self.emulator.run(cmd) 50 self.assertEqual(exit_code, 0) 51 self.assertEqual(output[0], "foobar") 52 53 # Terminate all services 54 _, exit_code = self.emulator.run("s6-svscanctl -t source") 55 self.assertEqual(exit_code, 0) 56 self.emulator.run("sleep 2") 57 _, exit_code = self.emulator.run("s6-svok source/testsv") 58 self.assertEqual(exit_code, 1) 59