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

Side by Side Diff: tools/isolate/trace_inputs_test.py

Issue 10446052: Add Results.Process.executable and command. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address review comments Created 8 years, 6 months 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
« no previous file with comments | « tools/isolate/trace_inputs_smoke_test.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 import cStringIO 6 import cStringIO
7 import logging 7 import logging
8 import os 8 import os
9 import unittest 9 import unittest
10 import sys 10 import sys
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 " 'variables': {\n" 87 " 'variables': {\n"
88 " },\n" 88 " },\n"
89 " }, {\n" 89 " }, {\n"
90 " 'variables': {\n" 90 " 'variables': {\n"
91 " },\n" 91 " },\n"
92 " }],\n" 92 " }],\n"
93 " ],\n" 93 " ],\n"
94 "}\n") 94 "}\n")
95 self._test(value, expected) 95 self._test(value, expected)
96 96
97 def test_process_quoted_arguments(self):
98 test_cases = (
99 ('"foo"', ['foo']),
100 ('"foo", "bar"', ['foo', 'bar']),
101 ('"foo"..., "bar"', ['foo', 'bar']),
102 ('"foo", "bar"...', ['foo', 'bar']),
103 )
104 for actual, expected in test_cases:
105 self.assertEquals(expected, trace_inputs.process_quoted_arguments(actual))
106
97 107
98 def join_norm(*args): 108 def join_norm(*args):
99 """Joins and normalizes path in a single step.""" 109 """Joins and normalizes path in a single step."""
100 return unicode(os.path.normpath(os.path.join(*args))) 110 return unicode(os.path.normpath(os.path.join(*args)))
101 111
102 112
103 if trace_inputs.get_flavor() == 'linux': 113 if trace_inputs.get_flavor() == 'linux':
104 class StraceInputs(unittest.TestCase): 114 class StraceInputs(unittest.TestCase):
105 # Represents the root process pid (an arbitrary number). 115 # Represents the root process pid (an arbitrary number).
106 _ROOT_PID = 27 116 _ROOT_PID = 27
107 _CHILD_PID = 14 117 _CHILD_PID = 14
108 _GRAND_CHILD_PID = 70 118 _GRAND_CHILD_PID = 70
109 119
110 @staticmethod 120 @staticmethod
111 def _load_context(lines, initial_cwd): 121 def _load_context(lines, initial_cwd):
112 context = trace_inputs.Strace.Context(lambda _: False, initial_cwd) 122 context = trace_inputs.Strace.Context(lambda _: False, initial_cwd)
113 for line in lines: 123 for line in lines:
114 context.on_line(*line) 124 context.on_line(*line)
115 return context.to_results().flatten() 125 return context.to_results().flatten()
116 126
117 def _test_lines(self, lines, initial_cwd, files, command=None): 127 def _test_lines(self, lines, initial_cwd, files, command=None):
128 filepath = join_norm(initial_cwd, '../out/unittests')
118 command = command or ['../out/unittests'] 129 command = command or ['../out/unittests']
119 expected = { 130 expected = {
120 'root': { 131 'root': {
121 'children': [], 132 'children': [],
122 'command': None, 133 'command': command,
123 'executable': None, 134 'executable': filepath,
124 'files': files, 135 'files': files,
125 'initial_cwd': initial_cwd, 136 'initial_cwd': initial_cwd,
126 'pid': self._ROOT_PID, 137 'pid': self._ROOT_PID,
127 } 138 }
128 } 139 }
129 if not files: 140 if not files:
130 expected['root']['command'] = None 141 expected['root']['command'] = None
131 expected['root']['executable'] = None 142 expected['root']['executable'] = None
132 self.assertEquals(expected, self._load_context(lines, initial_cwd)) 143 self.assertEquals(expected, self._load_context(lines, initial_cwd))
133 144
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 (self._ROOT_PID, 238 (self._ROOT_PID,
228 'clone(child_stack=0, flags=CLONE_CHILD_CLEARTID' 239 'clone(child_stack=0, flags=CLONE_CHILD_CLEARTID'
229 '|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f5350f829d0) = %d' % 240 '|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f5350f829d0) = %d' %
230 self._CHILD_PID), 241 self._CHILD_PID),
231 (self._CHILD_PID, 242 (self._CHILD_PID,
232 'chdir("/home_foo_bar_user/path1") = 0'), 243 'chdir("/home_foo_bar_user/path1") = 0'),
233 (self._CHILD_PID, 244 (self._CHILD_PID,
234 'clone(child_stack=0, flags=CLONE_CHILD_CLEARTID' 245 'clone(child_stack=0, flags=CLONE_CHILD_CLEARTID'
235 '|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f5350f829d0) = %d' % 246 '|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f5350f829d0) = %d' %
236 self._GRAND_CHILD_PID), 247 self._GRAND_CHILD_PID),
248 (self._GRAND_CHILD_PID,
249 'execve("../out/unittests", '
250 '["../out/unittests"...], [/* 44 vars */]) = 0'),
237 (self._ROOT_PID, 'chdir("/home_foo_bar_user/path2") = 0'), 251 (self._ROOT_PID, 'chdir("/home_foo_bar_user/path2") = 0'),
238 (self._GRAND_CHILD_PID, 252 (self._GRAND_CHILD_PID,
239 'open("random.txt", O_RDONLY) = 76'), 253 'open("random.txt", O_RDONLY) = 76'),
240 ] 254 ]
241 expected = { 255 expected = {
242 'root': { 256 'root': {
243 'children': [ 257 'children': [
244 { 258 {
245 'children': [ 259 'children': [
246 { 260 {
247 'children': [], 261 'children': [],
248 'command': None, 262 'command': ['../out/unittests'],
249 'executable': None, 263 'executable': '/home_foo_bar_user/out/unittests',
250 'files': [ 264 'files': [
251 { 265 {
266 'path': u'/home_foo_bar_user/out/unittests',
267 'size': -1,
268 },
269 {
252 'path': u'/home_foo_bar_user/path1/random.txt', 270 'path': u'/home_foo_bar_user/path1/random.txt',
253 'size': -1, 271 'size': -1,
254 }, 272 },
255 ], 273 ],
256 'initial_cwd': '/home_foo_bar_user/path1', 274 'initial_cwd': u'/home_foo_bar_user/path1',
257 'pid': self._GRAND_CHILD_PID, 275 'pid': self._GRAND_CHILD_PID,
258 }, 276 },
259 ], 277 ],
278 # clone does not carry over the command and executable so it is
279 # clear if an execve() call was done or not.
260 'command': None, 280 'command': None,
261 'executable': None, 281 'executable': None,
262 # This is important, since no execve call was done, it didn't 282 # This is important, since no execve call was done, it didn't
263 # touch the executable file. 283 # touch the executable file.
264 'files': [], 284 'files': [],
265 'initial_cwd': ROOT_DIR, 285 'initial_cwd': unicode(ROOT_DIR),
266 'pid': self._CHILD_PID, 286 'pid': self._CHILD_PID,
267 }, 287 },
268 ], 288 ],
269 'command': None, 289 'command': ['../out/unittests'],
270 'executable': None, 290 'executable': join_norm(ROOT_DIR, '../out/unittests'),
271 'files': [ 291 'files': [
272 { 292 {
273 'path': join_norm(ROOT_DIR, '../out/unittests'), 293 'path': join_norm(ROOT_DIR, '../out/unittests'),
274 'size': -1, 294 'size': -1,
275 }, 295 },
276 ], 296 ],
277 'initial_cwd': ROOT_DIR, 297 'initial_cwd': unicode(ROOT_DIR),
278 'pid': self._ROOT_PID, 298 'pid': self._ROOT_PID,
279 }, 299 },
280 } 300 }
281 self.assertEquals(expected, self._load_context(lines, ROOT_DIR)) 301 self.assertEquals(expected, self._load_context(lines, ROOT_DIR))
282 302
283 def test_open(self): 303 def test_open(self):
284 lines = [ 304 lines = [
285 (self._ROOT_PID, 305 (self._ROOT_PID,
286 'execve("../out/unittests", ' 306 'execve("../out/unittests", '
287 '["../out/unittests"...], [/* 44 vars */]) = 0'), 307 '["../out/unittests"...], [/* 44 vars */]) = 0'),
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 'size': -1, 362 'size': -1,
343 }, 363 },
344 ] 364 ]
345 self._test_lines(lines, '/home/foo_bar_user/src', files) 365 self._test_lines(lines, '/home/foo_bar_user/src', files)
346 366
347 367
348 if __name__ == '__main__': 368 if __name__ == '__main__':
349 VERBOSE = '-v' in sys.argv 369 VERBOSE = '-v' in sys.argv
350 logging.basicConfig(level=logging.DEBUG if VERBOSE else logging.ERROR) 370 logging.basicConfig(level=logging.DEBUG if VERBOSE else logging.ERROR)
351 unittest.main() 371 unittest.main()
OLDNEW
« no previous file with comments | « tools/isolate/trace_inputs_smoke_test.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698