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

Unified Diff: tools/isolate/trace_inputs_smoke_test.py

Issue 10444052: Add Results class to hold structured data with details about each of the child processes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments Created 8 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/isolate/trace_inputs.py ('k') | tools/isolate/trace_inputs_test.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..b499779b53206ee201f8ff5c157f07139c3d72af 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. Starts it from the
+ # directory 'data' so 'data/data/trace_inputs/child1.py' is not accessible,
+ # so child2.py process is not started.
+ 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)
« no previous file with comments | « tools/isolate/trace_inputs.py ('k') | tools/isolate/trace_inputs_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698