Chromium Code Reviews| Index: tools/isolate/trace_inputs_smoke_test.py | 
| diff --git a/tools/isolate/trace_inputs_smoke_test.py b/tools/isolate/trace_inputs_smoke_test.py | 
| index 56428bd524f49f1e203e0c46c4c4327850092b0b..ce58ef9ff14cc09b900f5f06c0870d476a80f657 100755 | 
| --- a/tools/isolate/trace_inputs_smoke_test.py | 
| +++ b/tools/isolate/trace_inputs_smoke_test.py | 
| @@ -12,7 +12,8 @@ import sys | 
| import tempfile | 
| import unittest | 
| -ROOT_DIR = os.path.dirname(os.path.abspath(__file__)) | 
| +FULLNAME = os.path.abspath(__file__) | 
| +ROOT_DIR = os.path.dirname(FULLNAME) | 
| FILENAME = os.path.basename(__file__) | 
| VERBOSE = False | 
| @@ -30,7 +31,7 @@ class CalledProcessError(subprocess.CalledProcessError): | 
| 'cwd=%s\n%s') % (self.cwd, self.output) | 
| -class TraceInputs(unittest.TestCase): | 
| +class TraceInputsBase(unittest.TestCase): | 
| def setUp(self): | 
| self.tempdir = tempfile.mkdtemp(prefix='trace_smoke_test') | 
| self.log = os.path.join(self.tempdir, 'log') | 
| @@ -42,22 +43,10 @@ class TraceInputs(unittest.TestCase): | 
| else: | 
| shutil.rmtree(self.tempdir) | 
| - def _execute(self, is_gyp): | 
| - cmd = [ | 
| - sys.executable, os.path.join('..', '..', 'trace_inputs.py'), | 
| - '--log', self.log, | 
| - '--root-dir', ROOT_DIR, | 
| - ] | 
| - if VERBOSE: | 
| - cmd.extend(['-v'] * 3) | 
| - if is_gyp: | 
| - cmd.extend( | 
| - [ | 
| - '--cwd', 'data', | 
| - '--product', '.', # Not tested. | 
| - ]) | 
| - cmd.append(sys.executable) | 
| - if is_gyp: | 
| + @staticmethod | 
| + def command(from_data): | 
| + cmd = [sys.executable] | 
| + if from_data: | 
| # When the gyp argument is specified, the command is started from --cwd | 
| # directory. In this case, 'data'. | 
| cmd.extend([os.path.join('trace_inputs', 'child1.py'), '--child-gyp']) | 
| @@ -65,7 +54,19 @@ class TraceInputs(unittest.TestCase): | 
| # When the gyp argument is not specified, the command is started from | 
| # --root-dir directory. | 
| cmd.extend([os.path.join('data', 'trace_inputs', 'child1.py'), '--child']) | 
| + return cmd | 
| + | 
| +class TraceInputs(TraceInputsBase): | 
| + def _execute(self, command): | 
| + cmd = [ | 
| + sys.executable, os.path.join('..', '..', 'trace_inputs.py'), | 
| + '--log', self.log, | 
| + '--root-dir', ROOT_DIR, | 
| + ] | 
| + if VERBOSE: | 
| + cmd.extend(['-v'] * 3) | 
| + cmd.extend(command) | 
| # The current directory doesn't matter, the traced process will be called | 
| # from the correct cwd. | 
| cwd = os.path.join('data', 'trace_inputs') | 
| @@ -88,7 +89,7 @@ class TraceInputs(unittest.TestCase): | 
| ' trace_inputs.py', | 
| ' %s' % FILENAME, | 
| ] | 
| - actual = self._execute(False).splitlines() | 
| + actual = self._execute(self.command(False)).splitlines() | 
| self.assertTrue(actual[0].startswith('Tracing... ['), actual) | 
| self.assertTrue(actual[1].startswith('Loading traces... '), actual) | 
| self.assertTrue(actual[2].startswith('Total: '), actual) | 
| @@ -124,10 +125,112 @@ class TraceInputs(unittest.TestCase): | 
| expected_buffer = cStringIO.StringIO() | 
| trace_inputs.pretty_print(expected_value, expected_buffer) | 
| - actual = self._execute(True) | 
| + cmd = [ | 
| + '--cwd', 'data', | 
| + '--product', '.', # Not tested. | 
| + ] + self.command(True) | 
| + actual = self._execute(cmd) | 
| self.assertEquals(expected_buffer.getvalue(), actual) | 
| +class TraceInputsImport(TraceInputsBase): | 
| + def setUp(self): | 
| + super(TraceInputsImport, self).setUp() | 
| + self.cwd = os.path.join(ROOT_DIR, u'data') | 
| + self.initial_cwd = self.cwd | 
| + if sys.platform == 'win32': | 
| + # Still not supported on Windows. | 
| + self.initial_cwd = None | 
| + | 
| + # Similar to TraceInputs test fixture except that it calls the function | 
| + # directly, so the Results instance can be inspected. | 
| + # Roughly, make sure the API is stable. | 
| + def _execute(self, command): | 
| + # Similar to what trace_test_cases.py does. | 
| + import trace_inputs | 
| + api = trace_inputs.get_api() | 
| + _, _ = trace_inputs.trace( | 
| + self.log, command, self.cwd, api, True) | 
| + # TODO(maruel): Check | 
| + #self.assertEquals(0, returncode) | 
| + #self.assertEquals('', output) | 
| + return trace_inputs.load_trace(self.log, ROOT_DIR, api) | 
| + | 
| + def test_trace_wrong_path(self): | 
| + # Deliberately start the trace from the wrong path. Start it from inside | 
| + # data so data/data/trace_inputs/child1.py is not accessible. | 
| + # and no child . | 
| 
 
MAD
2012/05/30 20:29:36
and no child?
 
M-A Ruel
2012/05/30 22:34:10
No child is left behind, finished sentence.
 
MAD
2012/05/31 14:00:57
You end previous line with a "." and start this on
 
M-A Ruel
2012/05/31 14:56:45
I can't type. Hopefully fixed.
 
 | 
| + results, simplified = self._execute(self.command(False)) | 
| + expected = { | 
| + 'root': { | 
| + 'children': [], | 
| + 'command': None, | 
| + 'executable': None, | 
| + 'files': [], | 
| + 'initial_cwd': self.initial_cwd, | 
| + }, | 
| + } | 
| + actual = results.flatten() | 
| + self.assertTrue(actual['root'].pop('pid')) | 
| + self.assertEquals(expected, actual) | 
| + self.assertEquals([], simplified) | 
| + | 
| + def test_trace(self): | 
| + size_t_i_s = os.stat(FULLNAME).st_size | 
| + size_t_i = os.stat(os.path.join(ROOT_DIR, 'trace_inputs.py')).st_size | 
| + expected = { | 
| + 'root': { | 
| + 'children': [ | 
| + { | 
| + 'children': [], | 
| + 'command': None, | 
| + 'executable': None, | 
| + 'files': [ | 
| + { | 
| + 'path': os.path.join(u'data', 'trace_inputs', 'child2.py'), | 
| + 'size': 776, | 
| + }, | 
| + { | 
| + 'path': os.path.join(u'data', 'trace_inputs', 'test_file.txt'), | 
| + 'size': 4, | 
| + }, | 
| + ], | 
| + 'initial_cwd': self.initial_cwd, | 
| + }, | 
| + ], | 
| + 'command': None, | 
| + 'executable': None, | 
| + 'files': [ | 
| + { | 
| + 'path': os.path.join(u'data', 'trace_inputs', 'child1.py'), | 
| + 'size': 1364, | 
| + }, | 
| + { | 
| + 'path': u'trace_inputs.py', | 
| + 'size': size_t_i, | 
| + }, | 
| + { | 
| + 'path': u'trace_inputs_smoke_test.py', | 
| + 'size': size_t_i_s, | 
| + }, | 
| + ], | 
| + 'initial_cwd': self.initial_cwd, | 
| + }, | 
| + } | 
| + results, simplified = self._execute(self.command(True)) | 
| + actual = results.flatten() | 
| + self.assertTrue(actual['root'].pop('pid')) | 
| + self.assertTrue(actual['root']['children'][0].pop('pid')) | 
| + self.assertEquals(expected, actual) | 
| + files = [ | 
| + os.path.join(u'data', 'trace_inputs') + os.path.sep, | 
| + u'trace_inputs.py', | 
| + u'trace_inputs_smoke_test.py', | 
| + ] | 
| + self.assertEquals(files, [f.path for f in simplified]) | 
| + | 
| + | 
| + | 
| if __name__ == '__main__': | 
| VERBOSE = '-v' in sys.argv | 
| logging.basicConfig(level=logging.DEBUG if VERBOSE else logging.ERROR) |