Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(322)

Side by Side Diff: third_party/mozprocess/tests/mozprocess2.py

Issue 108313011: Adding mozilla libraries required by Firefox interop test. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/
Patch Set: Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
Property Changes:
Added: svn:eol-style
+ LF
Added: svn:executable
+ *
OLDNEW
(Empty)
1 #!/usr/bin/env python
2
3 # This Source Code Form is subject to the terms of the Mozilla Public
4 # License, v. 2.0. If a copy of the MPL was not distributed with this file,
5 # You can obtain one at http://mozilla.org/MPL/2.0/.
6
7 import os
8 import subprocess
9 import sys
10 import unittest
11 from time import sleep
12
13 from mozprocess import processhandler
14
15 here = os.path.dirname(os.path.abspath(__file__))
16
17 # This tests specifically the case reported in bug 671316
18 # TODO: Because of the way mutt works we can't just load a utils.py in here.
19 # so, for all process handler tests, copy these two
20 # utility functions to to the top of your source.
21
22 def make_proclaunch(aDir):
23 """
24 Makes the proclaunch executable.
25 Params:
26 aDir - the directory in which to issue the make commands
27 Returns:
28 the path to the proclaunch executable that is generated
29 """
30 # Ideally make should take care of this, but since it doesn't - on windows,
31 # anyway, let's just call out both targets explicitly.
32 p = subprocess.call(["make", "-C", "iniparser"],stdout=subprocess.PIPE, stde rr=subprocess.PIPE, cwd=aDir)
33 p = subprocess.call(["make"],stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=aDir)
34 if sys.platform == "win32":
35 exepath = os.path.join(aDir, "proclaunch.exe")
36 else:
37 exepath = os.path.join(aDir, "proclaunch")
38 return exepath
39
40 def check_for_process(processName):
41 """
42 Use to determine if process is still running.
43
44 Returns:
45 detected -- True if process is detected to exist, False otherwise
46 output -- if process exists, stdout of the process, '' otherwise
47 """
48 output = ''
49 if sys.platform == "win32":
50 # On windows we use tasklist
51 p1 = subprocess.Popen(["tasklist"], stdout=subprocess.PIPE)
52 output = p1.communicate()[0]
53 detected = False
54 for line in output.splitlines():
55 if processName in line:
56 detected = True
57 break
58 else:
59 p1 = subprocess.Popen(["ps", "-ef"], stdout=subprocess.PIPE)
60 p2 = subprocess.Popen(["grep", processName], stdin=p1.stdout, stdout=sub process.PIPE)
61 p1.stdout.close()
62 output = p2.communicate()[0]
63 detected = False
64 for line in output.splitlines():
65 if "grep %s" % processName in line:
66 continue
67 elif processName in line and not 'defunct' in line:
68 detected = True
69 break
70
71 return detected, output
72
73 class ProcTest2(unittest.TestCase):
74
75 def __init__(self, *args, **kwargs):
76
77 # Ideally, I'd use setUpClass but that only exists in 2.7.
78 # So, we'll do this make step now.
79 self.proclaunch = make_proclaunch(here)
80 unittest.TestCase.__init__(self, *args, **kwargs)
81
82 def test_process_waitnotimeout(self):
83 """ Process is started, runs to completion before our wait times out
84 """
85 p = processhandler.ProcessHandler([self.proclaunch,
86 "process_waittimeout_10s.ini"],
87 cwd=here)
88 p.run(timeout=30)
89 p.wait()
90
91 detected, output = check_for_process(self.proclaunch)
92 self.determine_status(detected,
93 output,
94 p.proc.returncode,
95 p.didTimeout)
96
97 def test_process_wait(self):
98 """ Process is started runs to completion while we wait indefinitely
99 """
100
101 p = processhandler.ProcessHandler([self.proclaunch,
102 "process_waittimeout_10s.ini"],
103 cwd=here)
104 p.run()
105 p.wait()
106
107 detected, output = check_for_process(self.proclaunch)
108 self.determine_status(detected,
109 output,
110 p.proc.returncode,
111 p.didTimeout)
112
113 def test_process_waittimeout(self):
114 """
115 Process is started, then wait is called and times out.
116 Process is still running and didn't timeout
117 """
118 p = processhandler.ProcessHandler([self.proclaunch,
119 "process_waittimeout_10s.ini"],
120 cwd=here)
121
122 p.run()
123 p.wait(timeout=5)
124
125 detected, output = check_for_process(self.proclaunch)
126 self.determine_status(detected,
127 output,
128 p.proc.returncode,
129 p.didTimeout,
130 True,
131 [])
132
133 def test_process_output_twice(self):
134 """
135 Process is started, then processOutput is called a second time explicitl y
136 """
137 p = processhandler.ProcessHandler([self.proclaunch,
138 "process_waittimeout_10s.ini"],
139 cwd=here)
140
141 p.run()
142 p.processOutput(timeout=5)
143 p.wait()
144
145 detected, output = check_for_process(self.proclaunch)
146 self.determine_status(detected,
147 output,
148 p.proc.returncode,
149 p.didTimeout,
150 False,
151 [])
152
153
154 def determine_status(self,
155 detected=False,
156 output = '',
157 returncode = 0,
158 didtimeout = False,
159 isalive=False,
160 expectedfail=[]):
161 """
162 Use to determine if the situation has failed.
163 Parameters:
164 detected -- value from check_for_process to determine if the process is detected
165 output -- string of data from detected process, can be ''
166 returncode -- return code from process, defaults to 0
167 didtimeout -- True if process timed out, defaults to False
168 isalive -- Use True to indicate we pass if the process exists; howev er, by default
169 the test will pass if the process does not exist (isalive == False)
170 expectedfail -- Defaults to [], used to indicate a list of fields th at are expected to fail
171 """
172 if 'returncode' in expectedfail:
173 self.assertTrue(returncode, "Detected an unexpected return code of: %s" % returncode)
174 elif not isalive:
175 self.assertTrue(returncode == 0, "Detected non-zero return code of: %d" % returncode)
176
177 if 'didtimeout' in expectedfail:
178 self.assertTrue(didtimeout, "Detected that process didn't time out")
179 else:
180 self.assertTrue(not didtimeout, "Detected that process timed out")
181
182 if isalive:
183 self.assertTrue(detected, "Detected process is not running, process output: %s" % output)
184 else:
185 self.assertTrue(not detected, "Detected process is still running, pr ocess output: %s" % output)
186
187 if __name__ == '__main__':
188 unittest.main()
OLDNEW
« no previous file with comments | « third_party/mozprocess/tests/mozprocess1.py ('k') | third_party/mozprocess/tests/process_normal_finish.ini » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698