| Index: tests/trace_test_cases_smoke_test.py
|
| diff --git a/tests/trace_test_cases_smoke_test.py b/tests/trace_test_cases_smoke_test.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..d3de10673362b90611cdd386e7aad59f199cc0a1
|
| --- /dev/null
|
| +++ b/tests/trace_test_cases_smoke_test.py
|
| @@ -0,0 +1,123 @@
|
| +#!/usr/bin/env python
|
| +# Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +import json
|
| +import logging
|
| +import os
|
| +import re
|
| +import subprocess
|
| +import sys
|
| +import tempfile
|
| +import unittest
|
| +
|
| +BASE_DIR = os.path.dirname(os.path.abspath(__file__))
|
| +ROOT_DIR = os.path.dirname(BASE_DIR)
|
| +sys.path.insert(0, ROOT_DIR)
|
| +
|
| +import trace_inputs
|
| +
|
| +FILE_PATH = os.path.realpath(unicode(os.path.abspath(__file__)))
|
| +TARGET_UTIL_PATH = os.path.join(BASE_DIR, 'gtest_fake', 'gtest_fake_base.py')
|
| +TARGET_PATH = os.path.join(BASE_DIR, 'gtest_fake', 'gtest_fake_fail.py')
|
| +
|
| +
|
| +class TraceTestCases(unittest.TestCase):
|
| + def setUp(self):
|
| + self.temp_file = None
|
| +
|
| + self.initial_cwd = ROOT_DIR
|
| + if sys.platform == 'win32':
|
| + # Windows has no kernel mode concept of current working directory.
|
| + self.initial_cwd = None
|
| +
|
| + # There's 2 kinds of references to python, self.executable,
|
| + # self.real_executable. It depends how python was started and on which OS.
|
| + self.executable = unicode(sys.executable)
|
| + if sys.platform == 'darwin':
|
| + # /usr/bin/python is a thunk executable that decides which version of
|
| + # python gets executed.
|
| + suffix = '.'.join(map(str, sys.version_info[0:2]))
|
| + if os.access(self.executable + suffix, os.X_OK):
|
| + # So it'll look like /usr/bin/python2.7
|
| + self.executable += suffix
|
| +
|
| + self.real_executable = trace_inputs.get_native_path_case(self.executable)
|
| + # Make sure there's no environment variable that could do side effects.
|
| + os.environ.pop('GTEST_SHARD_INDEX', '')
|
| + os.environ.pop('GTEST_TOTAL_SHARDS', '')
|
| +
|
| + def tearDown(self):
|
| + if self.temp_file:
|
| + os.remove(self.temp_file)
|
| +
|
| + def test_simple(self):
|
| + file_handle, self.temp_file = tempfile.mkstemp(
|
| + prefix='trace_test_cases_test')
|
| + os.close(file_handle)
|
| +
|
| + cmd = [
|
| + sys.executable,
|
| + os.path.join(ROOT_DIR, 'trace_test_cases.py'),
|
| + # Forces 4 parallel jobs.
|
| + '--jobs', '4',
|
| + '--timeout', '0',
|
| + '--out', self.temp_file,
|
| + ]
|
| + if VERBOSE:
|
| + cmd.extend(['-v'] * 3)
|
| + cmd.append(TARGET_PATH)
|
| + logging.debug(' '.join(cmd))
|
| + proc = subprocess.Popen(
|
| + cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
| + out, err = proc.communicate() or ('', '') # pylint is confused.
|
| + self.assertEquals(0, proc.returncode, (out, err))
|
| + lines = out.splitlines()
|
| + expected_out_re = [
|
| + r'\[1/4\] \d\.\d\ds .+',
|
| + r'\[2/4\] \d\.\d\ds .+',
|
| + r'\[3/4\] \d\.\d\ds .+',
|
| + r'\[4/4\] \d\.\d\ds .+',
|
| + ]
|
| + self.assertEquals(len(expected_out_re), len(lines), lines)
|
| + for index in range(len(expected_out_re)):
|
| + self.assertTrue(
|
| + re.match('^%s$' % expected_out_re[index], lines[index]),
|
| + '%d: %s\n%r\n%s' % (
|
| + index, expected_out_re[index], lines[index], out))
|
| + # Junk is printed on win32.
|
| + if sys.platform != 'win32' and not VERBOSE:
|
| + self.assertEquals('', err)
|
| +
|
| + with open(self.temp_file, 'r') as f:
|
| + content = f.read()
|
| + try:
|
| + result = json.loads(content)
|
| + except:
|
| + print repr(content)
|
| + raise
|
| +
|
| + test_cases = (
|
| + 'Baz.Fail',
|
| + 'Foo.Bar1',
|
| + 'Foo.Bar2',
|
| + 'Foo.Bar3',
|
| + )
|
| + self.assertEquals(dict, result.__class__)
|
| + self.assertEquals(['traces'], result.keys())
|
| + for index, trace in enumerate(
|
| + sorted(result['traces'], key=lambda x: x['trace'])):
|
| + self.assertEquals(test_cases[index], trace['trace'])
|
| + self.assertEquals(
|
| + [u'cmd', u'cwd', u'output', u'pid', u'trace'], sorted(trace))
|
| + self.assertEquals(
|
| + [sys.executable, TARGET_PATH, '--gtest_filter=%s' % trace['trace']],
|
| + trace['cmd'])
|
| + self.assertEquals(int, trace['pid'].__class__)
|
| +
|
| +
|
| +if __name__ == '__main__':
|
| + VERBOSE = '-v' in sys.argv
|
| + logging.basicConfig(level=logging.DEBUG if VERBOSE else logging.ERROR)
|
| + unittest.main()
|
|
|