| OLD | NEW |
| 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 shutil | 9 import shutil |
| 10 import subprocess | 10 import subprocess |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 129 '--cwd', 'data', | 129 '--cwd', 'data', |
| 130 '--product', '.', # Not tested. | 130 '--product', '.', # Not tested. |
| 131 ] + self.command(True) | 131 ] + self.command(True) |
| 132 actual = self._execute(cmd) | 132 actual = self._execute(cmd) |
| 133 self.assertEquals(expected_buffer.getvalue(), actual) | 133 self.assertEquals(expected_buffer.getvalue(), actual) |
| 134 | 134 |
| 135 | 135 |
| 136 class TraceInputsImport(TraceInputsBase): | 136 class TraceInputsImport(TraceInputsBase): |
| 137 def setUp(self): | 137 def setUp(self): |
| 138 super(TraceInputsImport, self).setUp() | 138 super(TraceInputsImport, self).setUp() |
| 139 import trace_inputs |
| 140 self.trace_inputs = trace_inputs |
| 139 self.cwd = os.path.join(ROOT_DIR, u'data') | 141 self.cwd = os.path.join(ROOT_DIR, u'data') |
| 140 self.initial_cwd = self.cwd | 142 self.initial_cwd = self.cwd |
| 141 if sys.platform == 'win32': | 143 if sys.platform == 'win32': |
| 142 # Still not supported on Windows. | 144 # Still not supported on Windows. |
| 143 self.initial_cwd = None | 145 self.initial_cwd = None |
| 146 self.executable = sys.executable |
| 147 if sys.platform == 'darwin': |
| 148 # /usr/bin/python is a thunk executable that decides which version of |
| 149 # python gets executed. |
| 150 suffix = '.'.join(map(str, sys.version_info[0:2])) |
| 151 if os.access(self.executable + suffix, os.X_OK): |
| 152 self.executable += suffix |
| 153 self.real_executable = self.trace_inputs.get_native_path_case( |
| 154 self.executable) |
| 155 if sys.platform == 'darwin': |
| 156 # Interestingly, only OSX does resolve the symlink manually before |
| 157 # starting the executable. |
| 158 if os.path.islink(self.real_executable): |
| 159 self.real_executable = os.path.normpath( |
| 160 os.path.join( |
| 161 os.path.dirname(self.real_executable), |
| 162 os.readlink(self.real_executable))) |
| 163 self.naked_executable = sys.executable |
| 164 if sys.platform == 'win32': |
| 165 self.naked_executable = os.path.basename(sys.executable) |
| 166 |
| 167 def tearDown(self): |
| 168 del self.trace_inputs |
| 169 super(TraceInputsImport, self).tearDown() |
| 144 | 170 |
| 145 # Similar to TraceInputs test fixture except that it calls the function | 171 # Similar to TraceInputs test fixture except that it calls the function |
| 146 # directly, so the Results instance can be inspected. | 172 # directly, so the Results instance can be inspected. |
| 147 # Roughly, make sure the API is stable. | 173 # Roughly, make sure the API is stable. |
| 148 def _execute(self, command): | 174 def _execute(self, command): |
| 149 # Similar to what trace_test_cases.py does. | 175 # Similar to what trace_test_cases.py does. |
| 150 import trace_inputs | 176 api = self.trace_inputs.get_api() |
| 151 api = trace_inputs.get_api() | 177 _, _ = self.trace_inputs.trace( |
| 152 _, _ = trace_inputs.trace( | |
| 153 self.log, command, self.cwd, api, True) | 178 self.log, command, self.cwd, api, True) |
| 154 # TODO(maruel): Check | 179 # TODO(maruel): Check |
| 155 #self.assertEquals(0, returncode) | 180 #self.assertEquals(0, returncode) |
| 156 #self.assertEquals('', output) | 181 #self.assertEquals('', output) |
| 157 return trace_inputs.load_trace(self.log, ROOT_DIR, api) | 182 return self.trace_inputs.load_trace(self.log, ROOT_DIR, api) |
| 158 | 183 |
| 159 def test_trace_wrong_path(self): | 184 def test_trace_wrong_path(self): |
| 160 # Deliberately start the trace from the wrong path. Starts it from the | 185 # Deliberately start the trace from the wrong path. Starts it from the |
| 161 # directory 'data' so 'data/data/trace_inputs/child1.py' is not accessible, | 186 # directory 'data' so 'data/data/trace_inputs/child1.py' is not accessible, |
| 162 # so child2.py process is not started. | 187 # so child2.py process is not started. |
| 163 results, simplified = self._execute(self.command(False)) | 188 results, simplified = self._execute(self.command(False)) |
| 164 expected = { | 189 expected = { |
| 165 'root': { | 190 'root': { |
| 166 'children': [], | 191 'children': [], |
| 167 'command': None, | 192 'command': [ |
| 168 'executable': None, | 193 self.executable, |
| 194 os.path.join('data', 'trace_inputs', 'child1.py'), |
| 195 '--child', |
| 196 ], |
| 197 'executable': self.real_executable, |
| 169 'files': [], | 198 'files': [], |
| 170 'initial_cwd': self.initial_cwd, | 199 'initial_cwd': self.initial_cwd, |
| 171 }, | 200 }, |
| 172 } | 201 } |
| 173 actual = results.flatten() | 202 actual = results.flatten() |
| 174 self.assertTrue(actual['root'].pop('pid')) | 203 self.assertTrue(actual['root'].pop('pid')) |
| 175 self.assertEquals(expected, actual) | 204 self.assertEquals(expected, actual) |
| 176 self.assertEquals([], simplified) | 205 self.assertEquals([], simplified) |
| 177 | 206 |
| 178 def test_trace(self): | 207 def test_trace(self): |
| 179 size_t_i_s = os.stat(FULLNAME).st_size | 208 size_t_i_s = os.stat(FULLNAME).st_size |
| 180 size_t_i = os.stat(os.path.join(ROOT_DIR, 'trace_inputs.py')).st_size | 209 size_t_i = os.stat(os.path.join(ROOT_DIR, 'trace_inputs.py')).st_size |
| 181 expected = { | 210 expected = { |
| 182 'root': { | 211 'root': { |
| 183 'children': [ | 212 'children': [ |
| 184 { | 213 { |
| 185 'children': [], | 214 'children': [], |
| 186 'command': None, | 215 'command': ['python', 'child2.py'], |
| 187 'executable': None, | 216 'executable': self.naked_executable, |
| 188 'files': [ | 217 'files': [ |
| 189 { | 218 { |
| 190 'path': os.path.join(u'data', 'trace_inputs', 'child2.py'), | 219 'path': os.path.join(u'data', 'trace_inputs', 'child2.py'), |
| 191 'size': 776, | 220 'size': 776, |
| 192 }, | 221 }, |
| 193 { | 222 { |
| 194 'path': os.path.join(u'data', 'trace_inputs', 'test_file.txt'), | 223 'path': os.path.join(u'data', 'trace_inputs', 'test_file.txt'), |
| 195 'size': 4, | 224 'size': 4, |
| 196 }, | 225 }, |
| 197 ], | 226 ], |
| 198 'initial_cwd': self.initial_cwd, | 227 'initial_cwd': self.initial_cwd, |
| 199 }, | 228 }, |
| 200 ], | 229 ], |
| 201 'command': None, | 230 'command': [ |
| 202 'executable': None, | 231 self.executable, |
| 232 os.path.join('trace_inputs', 'child1.py'), |
| 233 '--child-gyp', |
| 234 ], |
| 235 'executable': self.real_executable, |
| 203 'files': [ | 236 'files': [ |
| 204 { | 237 { |
| 205 'path': os.path.join(u'data', 'trace_inputs', 'child1.py'), | 238 'path': os.path.join(u'data', 'trace_inputs', 'child1.py'), |
| 206 'size': 1364, | 239 'size': 1364, |
| 207 }, | 240 }, |
| 208 { | 241 { |
| 209 'path': u'trace_inputs.py', | 242 'path': u'trace_inputs.py', |
| 210 'size': size_t_i, | 243 'size': size_t_i, |
| 211 }, | 244 }, |
| 212 { | 245 { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 228 u'trace_inputs_smoke_test.py', | 261 u'trace_inputs_smoke_test.py', |
| 229 ] | 262 ] |
| 230 self.assertEquals(files, [f.path for f in simplified]) | 263 self.assertEquals(files, [f.path for f in simplified]) |
| 231 | 264 |
| 232 | 265 |
| 233 | 266 |
| 234 if __name__ == '__main__': | 267 if __name__ == '__main__': |
| 235 VERBOSE = '-v' in sys.argv | 268 VERBOSE = '-v' in sys.argv |
| 236 logging.basicConfig(level=logging.DEBUG if VERBOSE else logging.ERROR) | 269 logging.basicConfig(level=logging.DEBUG if VERBOSE else logging.ERROR) |
| 237 unittest.main() | 270 unittest.main() |
| OLD | NEW |