TestProcessLaunch.py revision ebf1ece5e348b78dd9ceca812977a20321fe4e96
1ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice""" 2ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline TiceTest lldb process IO launch flags.. 3ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice""" 4ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice 5ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Ticeimport os, time 6ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Ticeimport unittest2 7ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Ticeimport lldb 8ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Ticefrom lldbtest import * 9ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice 10ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Ticeclass ProcessLaunchIOTestCase(TestBase): 11ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice 12ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice mydir = "process_io" 13ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice 14ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin") 15ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice def test_with_dsym (self): 16ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice self.buildDsym () 17ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice self.process_io_test () 18ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice 19ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice def test_with_dwarf (self): 20ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice self.buildDwarf () 21ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice self.process_io_test () 22ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice 23ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice def do_nothing (self): 24ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice i = 1 25ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice 26ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice def process_io_test (self): 27ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice exe = os.path.join (os.getcwd(), "a.out") 28ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice self.expect("file " + exe, 29ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice patterns = [ "Current executable set to .*a.out" ]) 30ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice 31ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice 32ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice in_file = os.path.join (os.getcwd(), "input-file.txt") 33ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice out_file = os.path.join (os.getcwd(), "output-test.out") 34ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice err_file = os.path.join (os.getcwd(), "output-test.err") 35ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice 36ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice 37ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice # Make sure the output files do not exist before launching the process 38ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice try: 39ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice os.remove (out_file) 40ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice except OSError: 41ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice # do_nothing (self) 42ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice i = 1 43ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice 44ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice try: 45ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice os.remove (err_file) 46ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice except OSError: 47ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice # do_nothing (self) 48ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice i = 1 49ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice 50ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice launch_command = "process launch -i " + in_file + " -o " + out_file + " -e " + err_file 51ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice 52ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice self.expect (launch_command, 53ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice patterns = [ "Process .* launched: .*a.out" ]) 54ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice 55ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice 56ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice success = True 57ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice err_msg = "" 58ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice 59ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice # Check to see if the 'stdout' file was created 60ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice try: 61ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice out_f = open (out_file) 62ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice except IOError: 63ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice success = False 64ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice err_msg = err_msg + " ERROR: stdout file was not created.\n" 65ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice else: 66ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice # Check to see if the 'stdout' file contains the right output 67ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice line = out_f.readline (); 68ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice if line != "This should go to stdout.\n": 69ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice success = False 70ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice err_msg = err_msg + " ERROR: stdout file does not contain correct output.\n" 71ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice out_f.close(); 72ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice 73ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice # Try to delete the 'stdout' file 74ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice try: 75ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice os.remove (out_file) 76ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice except OSError: 77ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice # do_nothing (self) 78ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice i = 1 79ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice 80ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice # Check to see if the 'stderr' file was created 81ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice try: 82ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice err_f = open (err_file) 83ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice except IOError: 84ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice success = False 85ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice err_msg = err_msg + " ERROR: stderr file was not created.\n" 86ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice else: 87ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice # Check to see if the 'stderr' file contains the right output 88ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice line = err_f.readline () 89ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice if line != "This should go to stderr.\n": 90ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice success = False 91ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice err_msg = err_msg + " ERROR: stderr file does not contain correct output.\n\ 92ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice" 93ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice err_f.close() 94ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice 95ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice # Try to delete the 'stderr' file 96ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice try: 97ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice os.remove (err_file) 98ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice except OSError: 99ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice # do_nothing (self) 100ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice i = 1 101ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice 102ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice if not success: 103ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice # This test failed, but we need to make the main testing 104ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice # mechanism realize something is wrong. 105ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice # 106ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice # First, print out the real error message. 107ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice self.fail (err_msg) 108ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice #print err_msg 109ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice 110ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice # Second, force a test case to fail: 111ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice #self.expect ("help quit", 112ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice # patterns = ["Intentional failure .*"]) 113ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice 114ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Ticeif __name__ == '__main__': 115ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice import atexit 116ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice lldb.SBDebugger.Initialize() 117ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice atexit.register(lambda: lldb.SBDebugger.Terminate()) 118ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice unittest2.main() 119ebf1ece5e348b78dd9ceca812977a20321fe4e96Caroline Tice 120