def test_get_file_chunk(self): cwd = os.getcwd() path = cwd + "/tests/input/testfile.txt" length = os.stat(path).st_size config = {'tsi.testing': True, 'tsi.switch_uid': False} msg = """#TSI_GETFILECHUNK #TSI_FILE %s #TSI_START 0 #TSI_LENGTH %d ENDOFMESSAGE """ % (path, length) control_source = io.BufferedReader(io.BytesIO(msg.encode("UTF-8"))) control_in = io.TextIOWrapper(control_source) control_out = io.StringIO() data_out = io.BytesIO() connector = MockConnector.MockConnector(control_in, control_out, None, data_out, self.LOG) TSI.process(connector, config, self.LOG) result = control_out.getvalue() data = str(data_out.getvalue()) self.assertTrue("TSI_OK" in result) self.assertTrue("this is a test file" in data) control_source.close() data_out.close() os.chdir(cwd)
def test_setfacl_via_connector(self): acl_support = self.config['tsi.acl'] acl_support['/tmp/test_TSI_ACL'] = "POSIX" self.config['tsi.setfacl'] = "setfacl" user = "******" msg = """#TSI_FILE_ACL #TSI_ACL_OPERATION SETFACL #TSI_ACL_COMMAND MODIFY RECURSIVE #TSI_ACL_COMMAND_SPEC U %s rwx #TSI_ACL_PATH /tmp/test_TSI_ACL ENDOFMESSAGE """ % os.environ['USER'] connector = self.setup_connector(msg) TSI.process(connector, self.config, self.LOG) result = connector.control_out.getvalue() self.assertTrue("TSI_OK" in result) msg = """#TSI_FILE_ACL #TSI_ACL_OPERATION GETFACL #TSI_ACL_PATH /tmp/test_TSI_ACL ENDOFMESSAGE """ connector = self.setup_connector(msg) TSI.process(connector, self.config, self.LOG) result = connector.control_out.getvalue() self.assertTrue("TSI_OK" in result) print(result)
def test_submit(self): cwd = os.getcwd() uspace = cwd + "/build/uspace-%s" % int(time.time()) os.mkdir(uspace) config = {'tsi.testing': True, 'tsi.switch_uid': False} bss = BSS.BSS() bss.init(config, self.LOG) msg = """#!/bin/bash #TSI_SUBMIT #TSI_OUTCOME_DIR %s #TSI_USPACE_DIR %s #TSI_STDOUT stdout #TSI_STDERR stderr #TSI_SCRIPT #TSI_TIME 60 #TSI_MEMORY 32 #TSI_JOBNAME test_job #TSI_SCRIPT echo "Hello World!" sleep 1 ENDOFMESSAGE """ % (uspace, uspace) control_source = io.BufferedReader(io.BytesIO(msg.encode("UTF-8"))) control_in = io.TextIOWrapper(control_source) control_out = io.StringIO() connector = MockConnector.MockConnector(control_in, control_out, None, None, self.LOG) TSI.process(connector, config, self.LOG) result = control_out.getvalue() if "TSI_FAILED" in result: print(result) else: result = result.splitlines()[0] print("Submitted with ID %s" % result) control_source.close() children = config.get('tsi.NOBATCH.children') print("Children: " + str(children)) self.assertEqual(1, len(children)) control_out = io.StringIO() connector = MockConnector.MockConnector(control_in, control_out, None, None, self.LOG) bss.get_status_listing(None, connector, config, self.LOG) qstat = control_out.getvalue() print(qstat + "\n") self.assertTrue(result in qstat) # test cleanup time.sleep(2) bss.cleanup(config) print("Children after cleanup: " + str(children)) self.assertEqual(0, len(children))
def test_put_file_chunk(self): cwd = os.getcwd() path = cwd + "/build/testfile.txt" config = {'tsi.testing': True, 'tsi.switch_uid': False} data = b"this is some testdata used for testing the TSI I/O \n" msg = """#TSI_PUTFILECHUNK #TSI_FILE %s 600 #TSI_FILESACTION 1 #TSI_START 0 #TSI_LENGTH %d ENDOFMESSAGE """ % (path, len(data)) control_source = io.BufferedReader(io.BytesIO(msg.encode("UTF-8"))) control_in = io.TextIOWrapper(control_source) control_out = io.StringIO() data_in = io.BytesIO(data) connector = MockConnector.MockConnector(control_in, control_out, data_in, None, self.LOG) TSI.process(connector, config, self.LOG) result = control_out.getvalue() print(result) self.assertTrue("TSI_OK" in result) control_source.close() lines = self.readlines(path) self.assertEqual(1, len(lines)) self.assertTrue(data.decode() in lines[0]) # test append msg = """#TSI_PUTFILECHUNK #TSI_FILE %s 600 #TSI_FILESACTION 3 #TSI_START 0 #TSI_LENGTH %d ENDOFMESSAGE """ % (path, len(data)) control_source = io.BufferedReader(io.BytesIO(msg.encode("UTF-8"))) control_in = io.TextIOWrapper(control_source) control_out = io.StringIO() data_in = io.BytesIO(data) connector = MockConnector.MockConnector(control_in, control_out, data_in, None, self.LOG) TSI.process(connector, config, self.LOG) result = control_out.getvalue() print(result) self.assertTrue("TSI_OK" in result) lines = self.readlines(path) self.assertEqual(2, len(lines)) self.assertTrue(data.decode() in lines[0]) os.chdir(cwd)
def test_getsupport_via_connector(self): acl_support = self.config['tsi.acl'] acl_support['/tmp'] = "POSIX" msg = """#TSI_FILE_ACL #TSI_ACL_OPERATION CHECK_SUPPORT #TSI_ACL_PATH /tmp ENDOFMESSAGE """ connector = self.setup_connector(msg) TSI.process(connector, self.config, self.LOG) result = connector.control_out.getvalue() self.assertTrue("TSI_OK" in result) self.assertTrue("true" in result)
def test_PING(self): cwd = os.getcwd() version = TSI.MY_VERSION config = {'tsi.testing': True} msg = "#TSI_PING\nENDOFMESSAGE\n" control_source = io.BufferedReader(io.BytesIO(msg.encode("UTF-8"))) control_in = io.TextIOWrapper(control_source) control_out = io.StringIO() connector = MockConnector.MockConnector(control_in, control_out, None, None, self.LOG) TSI.process(connector, config, self.LOG) result = control_out.getvalue() print(result) self.assertTrue(version in result) self.assertTrue("ENDOFMESSAGE" in result) control_source.close() os.chdir(cwd)
def test_Exec(self): cwd = os.getcwd() config = {'tsi.testing': True, 'tsi.switch_uid': False} msg = """#TSI_EXECUTESCRIPT echo "Hello World!" ENDOFMESSAGE """ control_source = io.BufferedReader(io.BytesIO(msg.encode("UTF-8"))) control_in = io.TextIOWrapper(control_source) control_out = io.StringIO() connector = MockConnector.MockConnector(control_in, control_out, None, None, self.LOG) TSI.process(connector, config, self.LOG) result = control_out.getvalue() print(result) self.assertTrue("TSI_OK" in result) self.assertTrue("Hello World!\n" in result) control_source.close() os.chdir(cwd)
def test_PING2(self): cwd = os.getcwd() version = TSI.MY_VERSION config = {'tsi.testing': True, 'tsi.enforce_os_gids': False} config['tsi.use_id_to_resolve_gids'] = False msg = """#TSI_PING_UID #TSI_IDENTITY nobody NONE ENDOFMESSAGE """ control_source = io.BufferedReader(io.BytesIO(msg.encode("UTF-8"))) control_in = io.TextIOWrapper(control_source) control_out = io.StringIO() BecomeUser.initialize(config, self.LOG) connector = MockConnector.MockConnector(control_in, control_out, None, None, self.LOG) TSI.process(connector, config, self.LOG) result = control_out.getvalue() print(result) self.assertTrue(version in result) control_source.close() os.chdir(cwd)
def test_getfacl_via_connector(self): acl_support = self.config['tsi.acl'] acl_support['/tmp'] = "POSIX" msg = """#TSI_FILE_ACL #TSI_ACL_OPERATION GETFACL #TSI_ACL_PATH /tmp ENDOFMESSAGE """ connector = self.setup_connector(msg) TSI.process(connector, self.config, self.LOG) result = connector.control_out.getvalue() self.assertTrue("TSI_OK" in result) msg = """#TSI_FILE_ACL #TSI_ACL_OPERATION GETFACL #TSI_ACL_PATH /opt ENDOFMESSAGE """ connector = self.setup_connector(msg) TSI.process(connector, self.config, self.LOG) result = connector.control_out.getvalue() print(result) self.assertTrue("TSI_FAILED" in result) self.assertTrue("unsupported" in result)