| Index: swarm_client/googletest/tests/isolate_test_cases_smoke_test.py
|
| ===================================================================
|
| --- swarm_client/googletest/tests/isolate_test_cases_smoke_test.py (revision 235167)
|
| +++ swarm_client/googletest/tests/isolate_test_cases_smoke_test.py (working copy)
|
| @@ -1,220 +0,0 @@
|
| -#!/usr/bin/env python
|
| -# Copyright 2013 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 hashlib
|
| -import json
|
| -import logging
|
| -import os
|
| -import re
|
| -import shutil
|
| -import subprocess
|
| -import sys
|
| -import tempfile
|
| -import unittest
|
| -
|
| -GOOGLETEST_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
| -ROOT_DIR = os.path.dirname(GOOGLETEST_DIR)
|
| -
|
| -sys.path.insert(0, GOOGLETEST_DIR)
|
| -sys.path.insert(0, ROOT_DIR)
|
| -
|
| -import isolate
|
| -import trace_test_cases
|
| -from utils import file_path
|
| -
|
| -
|
| -class IsolateTestCases(unittest.TestCase):
|
| - def setUp(self):
|
| - self.tempdir = 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 = file_path.get_native_path_case(
|
| - self.executable)
|
| - # Make sure there's no environment variable that could cause side effects.
|
| - os.environ.pop('GTEST_SHARD_INDEX', '')
|
| - os.environ.pop('GTEST_TOTAL_SHARDS', '')
|
| -
|
| - def tearDown(self):
|
| - if self.tempdir:
|
| - if VERBOSE:
|
| - # If -v is used, this means the user wants to do further analisys on
|
| - # the data.
|
| - print('Leaking %s' % self.tempdir)
|
| - else:
|
| - shutil.rmtree(self.tempdir)
|
| -
|
| - def _copy(self, root, *relpath):
|
| - relpath = os.path.join(*relpath)
|
| - shutil.copy(
|
| - os.path.join(root, relpath),
|
| - os.path.join(self.tempdir, relpath))
|
| -
|
| - def test_simple(self):
|
| - # Create a directory and re-use tests/gtest_fake/gtest_fake_pass.isolate.
|
| - # Warning: we need to copy the files around, since the original .isolate
|
| - # file is modified.
|
| - gtest_fake_base_py = os.path.join(
|
| - 'tests', 'gtest_fake', 'gtest_fake_base.py')
|
| - gtest_fake_pass_py = os.path.join(
|
| - 'tests', 'gtest_fake', 'gtest_fake_pass.py')
|
| - gtest_fake_pass_isolate = os.path.join(
|
| - 'tests', 'isolate_test_cases', 'gtest_fake_pass.isolate')
|
| -
|
| - self.tempdir = tempfile.mkdtemp(prefix='isolate_test_cases_test')
|
| - os.mkdir(os.path.join(self.tempdir, 'isolated'))
|
| - os.mkdir(os.path.join(self.tempdir, 'tests'))
|
| - os.mkdir(os.path.join(self.tempdir, 'tests', 'gtest_fake'))
|
| - os.mkdir(os.path.join(self.tempdir, 'tests', 'isolate_test_cases'))
|
| - self._copy(ROOT_DIR, 'isolate.py')
|
| - self._copy(GOOGLETEST_DIR, gtest_fake_base_py)
|
| - self._copy(GOOGLETEST_DIR, gtest_fake_pass_isolate)
|
| - self._copy(GOOGLETEST_DIR, gtest_fake_pass_py)
|
| -
|
| - basename = os.path.join(self.tempdir, 'isolated', 'gtest_fake_pass')
|
| - isolated = basename + '.isolated'
|
| -
|
| - # Create a proper .isolated file.
|
| - cmd = [
|
| - sys.executable, 'isolate.py',
|
| - 'check',
|
| - '--variable', 'FLAG', 'run',
|
| - '--isolate', os.path.join(self.tempdir, gtest_fake_pass_isolate),
|
| - '--isolated', isolated,
|
| - ]
|
| - if VERBOSE:
|
| - cmd.extend(['-v'] * 3)
|
| - subprocess.check_call(cmd, cwd=ROOT_DIR)
|
| -
|
| - # Assert the content of the .isolated file.
|
| - with open(isolated) as f:
|
| - actual_isolated = json.load(f)
|
| - root_dir_gtest_fake_pass_py = os.path.join(
|
| - GOOGLETEST_DIR, gtest_fake_pass_py)
|
| - rel_gtest_fake_pass_py = os.path.join(u'gtest_fake', 'gtest_fake_pass.py')
|
| - expected_isolated = {
|
| - u'algo': u'sha-1',
|
| - u'command': [u'../gtest_fake/gtest_fake_pass.py'],
|
| - u'files': {
|
| - rel_gtest_fake_pass_py: {
|
| - u'm': 488,
|
| - u'h': unicode(hashlib.sha1(
|
| - open(root_dir_gtest_fake_pass_py, 'rb').read()).hexdigest()),
|
| - u's': os.stat(root_dir_gtest_fake_pass_py).st_size,
|
| - },
|
| - },
|
| - u'os': unicode(isolate.get_flavor()),
|
| - u'relative_cwd': u'isolate_test_cases',
|
| - u'version': u'1.0',
|
| - }
|
| - if sys.platform == 'win32':
|
| - expected_isolated['files'][rel_gtest_fake_pass_py].pop('m')
|
| - self.assertEqual(expected_isolated, actual_isolated)
|
| -
|
| - cmd = [
|
| - sys.executable,
|
| - os.path.join(GOOGLETEST_DIR, 'isolate_test_cases.py'),
|
| - # Forces 4 parallel jobs.
|
| - '--jobs', '4',
|
| - '--isolated', isolated,
|
| - ]
|
| - if VERBOSE:
|
| - cmd.extend(['-v'] * 3)
|
| - logging.debug(' '.join(cmd))
|
| - proc = subprocess.Popen(
|
| - cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
| - out, err = proc.communicate() or ('', '') # pylint is confused.
|
| - logging.info(err)
|
| - self.assertEqual(0, proc.returncode, (out, err))
|
| - lines = out.splitlines()
|
| - expected_out_re = [
|
| - r'\[0/3\] \d\.\d\ds ',
|
| - r'\[1/3\] \d+\.\d\ds .+',
|
| - r'\[2/3\] \d+\.\d\ds .+',
|
| - r'\[3/3\] \d+\.\d\ds .+',
|
| - ]
|
| - self.assertEqual(len(expected_out_re), len(lines), (out, err))
|
| - for index in range(len(expected_out_re)):
|
| - self.assertTrue(
|
| - re.match('^%s$' % expected_out_re[index], lines[index]),
|
| - '%d\n%r\n%r\n%r' % (
|
| - index, expected_out_re[index], lines[index], out))
|
| - # Junk is printed on win32.
|
| - if sys.platform != 'win32' and not VERBOSE:
|
| - self.assertEqual('', err)
|
| -
|
| - test_cases = (
|
| - 'Foo.Bar1',
|
| - 'Foo.Bar2',
|
| - 'Foo.Bar/3',
|
| - )
|
| - expected = {
|
| - 'conditions': [
|
| - ['OS=="%s"' % isolate.get_flavor(), {
|
| - 'variables': {
|
| - 'isolate_dependency_untracked': [
|
| - '../gtest_fake/',
|
| - ],
|
| - },
|
| - }],
|
| - ],
|
| - }
|
| - for test_case in test_cases:
|
| - tracename = trace_test_cases.sanitize_test_case_name(test_case)
|
| - with open(basename + '.' + tracename + '.isolate', 'r') as f:
|
| - result = eval(f.read(), {'__builtins__': None}, None)
|
| - self.assertEqual(expected, result)
|
| -
|
| - # Now verify the .isolate file was updated! (That's the magical part where
|
| - # you say wow!)
|
| - with open(os.path.join(self.tempdir, gtest_fake_pass_isolate)) as f:
|
| - actual = eval(f.read(), {'__builtins__': None}, None)
|
| - all_oses = set(['linux', 'mac', 'win'])
|
| - host_os = isolate.get_flavor()
|
| - other_oses = all_oses - set([host_os])
|
| - expected = {
|
| - 'conditions': sorted([
|
| - ['OS=="%s"' % isolate.get_flavor(), {
|
| - 'variables': {
|
| - 'isolate_dependency_untracked': [
|
| - '../gtest_fake/',
|
| - ],
|
| - },
|
| - }],
|
| - [' or '.join('OS=="%s"' % os for os in sorted(other_oses)), {
|
| - 'variables': {
|
| - 'isolate_dependency_tracked': [
|
| - '../gtest_fake/gtest_fake_pass.py',
|
| - ],
|
| - },
|
| - }],
|
| - [' or '.join('OS=="%s"' % os for os in sorted(all_oses)), {
|
| - 'variables': {
|
| - 'command': ['../gtest_fake/gtest_fake_pass.py'],
|
| - },
|
| - }],
|
| - ]),
|
| - }
|
| - self.assertEqual(expected, actual)
|
| -
|
| -
|
| -if __name__ == '__main__':
|
| - VERBOSE = '-v' in sys.argv
|
| - logging.basicConfig(level=logging.DEBUG if VERBOSE else logging.ERROR)
|
| - unittest.main()
|
|
|