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