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