| Index: tools/isolate/isolate_test.py
|
| diff --git a/tools/isolate/isolate_test.py b/tools/isolate/isolate_test.py
|
| deleted file mode 100755
|
| index 7eaefc3e1726bfb39fb8702df6cb79e7a55c6792..0000000000000000000000000000000000000000
|
| --- a/tools/isolate/isolate_test.py
|
| +++ /dev/null
|
| @@ -1,286 +0,0 @@
|
| -#!/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 cStringIO
|
| -import hashlib
|
| -import json
|
| -import logging
|
| -import os
|
| -import re
|
| -import shutil
|
| -import subprocess
|
| -import sys
|
| -import tempfile
|
| -import unittest
|
| -
|
| -ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
|
| -VERBOSE = False
|
| -
|
| -
|
| -class CalledProcessError(subprocess.CalledProcessError):
|
| - """Makes 2.6 version act like 2.7"""
|
| - def __init__(self, returncode, cmd, output, cwd):
|
| - super(CalledProcessError, self).__init__(returncode, cmd)
|
| - self.output = output
|
| - self.cwd = cwd
|
| -
|
| - def __str__(self):
|
| - return super(CalledProcessError, self).__str__() + (
|
| - '\n'
|
| - 'cwd=%s\n%s') % (self.cwd, self.output)
|
| -
|
| -
|
| -class Isolate(unittest.TestCase):
|
| - def setUp(self):
|
| - # The reason is that isolate_test.py --ok is run in a temporary directory
|
| - # without access to isolate.py
|
| - import isolate
|
| - self.isolate = isolate
|
| - self.tempdir = tempfile.mkdtemp()
|
| - self.result = os.path.join(self.tempdir, 'result')
|
| - if VERBOSE:
|
| - print
|
| -
|
| - def tearDown(self):
|
| - shutil.rmtree(self.tempdir)
|
| -
|
| - def _expected_tree(self, files):
|
| - self.assertEquals(sorted(files), sorted(os.listdir(self.tempdir)))
|
| -
|
| - def _expected_result(self, with_hash, files, args, read_only):
|
| - if sys.platform == 'win32':
|
| - mode = lambda _: 420
|
| - else:
|
| - # 4 modes are supported, 0755 (rwx), 0644 (rw), 0555 (rx), 0444 (r)
|
| - min_mode = 0444
|
| - if not read_only:
|
| - min_mode |= 0200
|
| - def mode(filename):
|
| - return (min_mode | 0111) if filename.endswith('.py') else min_mode
|
| - expected = {
|
| - u'command':
|
| - [unicode(sys.executable)] +
|
| - [unicode(x) for x in args],
|
| - u'files': dict((unicode(f), {u'mode': mode(f)}) for f in files),
|
| - u'relative_cwd': u'.',
|
| - u'read_only': False,
|
| - }
|
| - if with_hash:
|
| - for filename in expected[u'files']:
|
| - # Calculate our hash.
|
| - h = hashlib.sha1()
|
| - h.update(open(os.path.join(ROOT_DIR, filename), 'rb').read())
|
| - expected[u'files'][filename][u'sha-1'] = h.hexdigest()
|
| -
|
| - actual = json.load(open(self.result, 'rb'))
|
| - self.assertEquals(expected, actual)
|
| - return expected
|
| -
|
| - def _execute(self, args, need_output=False):
|
| - cmd = [
|
| - sys.executable, os.path.join(ROOT_DIR, 'isolate.py'),
|
| - '--root', ROOT_DIR,
|
| - '--result', self.result,
|
| - ]
|
| - if need_output or not VERBOSE:
|
| - stdout = subprocess.PIPE
|
| - stderr = subprocess.STDOUT
|
| - else:
|
| - cmd.extend(['-v'] * 3)
|
| - stdout = None
|
| - stderr = None
|
| - cwd = ROOT_DIR
|
| - p = subprocess.Popen(
|
| - cmd + args,
|
| - stdout=stdout,
|
| - stderr=stderr,
|
| - cwd=cwd,
|
| - universal_newlines=True)
|
| - out = p.communicate()[0]
|
| - if p.returncode:
|
| - raise CalledProcessError(p.returncode, cmd, out, cwd)
|
| - return out
|
| -
|
| - def test_help_modes(self):
|
| - # Check coherency in the help and implemented modes.
|
| - p = subprocess.Popen(
|
| - [sys.executable, os.path.join(ROOT_DIR, 'isolate.py'), '--help'],
|
| - stdout=subprocess.PIPE,
|
| - stderr=subprocess.STDOUT,
|
| - cwd=ROOT_DIR)
|
| - out = p.communicate()[0].splitlines()
|
| - self.assertEquals(0, p.returncode)
|
| - out = out[out.index('') + 1:]
|
| - out = out[:out.index('')]
|
| - modes = [re.match(r'^ (\w+) .+', l) for l in out]
|
| - modes = tuple(m.group(1) for m in modes if m)
|
| - # Keep the list hard coded.
|
| - expected = ('check', 'hashtable', 'remap', 'run', 'trace')
|
| - self.assertEquals(expected, modes)
|
| - self.assertEquals(expected, modes)
|
| - for mode in modes:
|
| - self.assertTrue(hasattr(self, 'test_%s' % mode), mode)
|
| - self._expected_tree([])
|
| -
|
| - def test_check(self):
|
| - cmd = [
|
| - '--mode', 'check',
|
| - 'isolate_test.py',
|
| - ]
|
| - self._execute(cmd)
|
| - self._expected_tree(['result'])
|
| - self._expected_result(
|
| - False,
|
| - ['isolate_test.py'],
|
| - [os.path.join('.', 'isolate_test.py')],
|
| - False)
|
| -
|
| - def test_check_non_existant(self):
|
| - cmd = [
|
| - '--mode', 'check',
|
| - 'NonExistentFile',
|
| - ]
|
| - try:
|
| - self._execute(cmd)
|
| - self.fail()
|
| - except subprocess.CalledProcessError:
|
| - pass
|
| - self._expected_tree([])
|
| -
|
| - def test_check_directory_no_slash(self):
|
| - cmd = [
|
| - '--mode', 'check',
|
| - # Trailing slash missing.
|
| - os.path.join('data', 'isolate'),
|
| - ]
|
| - try:
|
| - self._execute(cmd)
|
| - self.fail()
|
| - except subprocess.CalledProcessError:
|
| - pass
|
| - self._expected_tree([])
|
| -
|
| - def test_check_abs_path(self):
|
| - cmd = [
|
| - '--mode', 'check',
|
| - 'isolate_test.py',
|
| - '--',
|
| - os.path.join(ROOT_DIR, 'isolate_test.py'),
|
| - ]
|
| - self._execute(cmd)
|
| - self._expected_tree(['result'])
|
| - self._expected_result(
|
| - False, ['isolate_test.py'], ['isolate_test.py'], False)
|
| -
|
| - def test_hashtable(self):
|
| - cmd = [
|
| - '--mode', 'hashtable',
|
| - '--outdir', self.tempdir,
|
| - 'isolate_test.py',
|
| - os.path.join('data', 'isolate') + os.path.sep,
|
| - ]
|
| - self._execute(cmd)
|
| - files = [
|
| - 'isolate_test.py',
|
| - os.path.join('data', 'isolate', 'test_file1.txt'),
|
| - os.path.join('data', 'isolate', 'test_file2.txt'),
|
| - ]
|
| - data = self._expected_result(
|
| - True, files, [os.path.join('.', 'isolate_test.py')], False)
|
| - self._expected_tree(
|
| - [f['sha-1'] for f in data['files'].itervalues()] + ['result'])
|
| -
|
| - def test_remap(self):
|
| - cmd = [
|
| - '--mode', 'remap',
|
| - '--outdir', self.tempdir,
|
| - 'isolate_test.py',
|
| - ]
|
| - self._execute(cmd)
|
| - self._expected_tree(['isolate_test.py', 'result'])
|
| - self._expected_result(
|
| - False,
|
| - ['isolate_test.py'],
|
| - [os.path.join('.', 'isolate_test.py')],
|
| - False)
|
| -
|
| - def test_run(self):
|
| - cmd = [
|
| - '--mode', 'run',
|
| - 'isolate_test.py',
|
| - '--',
|
| - sys.executable, 'isolate_test.py', '--ok',
|
| - ]
|
| - self._execute(cmd)
|
| - self._expected_tree(['result'])
|
| - # cmd[0] is not generated from infiles[0] so it's not using a relative path.
|
| - self._expected_result(
|
| - False, ['isolate_test.py'], ['isolate_test.py', '--ok'], False)
|
| -
|
| - def test_run_fail(self):
|
| - cmd = [
|
| - '--mode', 'run',
|
| - 'isolate_test.py',
|
| - '--',
|
| - sys.executable, 'isolate_test.py', '--fail',
|
| - ]
|
| - try:
|
| - self._execute(cmd)
|
| - self.fail()
|
| - except subprocess.CalledProcessError:
|
| - pass
|
| - self._expected_tree([])
|
| -
|
| - def test_trace(self):
|
| - cmd = [
|
| - '--mode', 'trace',
|
| - 'isolate_test.py',
|
| - '--',
|
| - sys.executable, os.path.join(ROOT_DIR, 'isolate_test.py'), '--ok',
|
| - ]
|
| - out = self._execute(cmd, True)
|
| - expected_tree = ['result', 'result.log']
|
| - if sys.platform == 'win32':
|
| - expected_tree.append('result.log.etl')
|
| - self._expected_tree(expected_tree)
|
| - # The 'result.log' log is OS-specific so we can't read it but we can read
|
| - # the gyp result.
|
| - # cmd[0] is not generated from infiles[0] so it's not using a relative path.
|
| - self._expected_result(
|
| - False, ['isolate_test.py'], ['isolate_test.py', '--ok'], False)
|
| -
|
| - expected_value = {
|
| - 'conditions': [
|
| - ['OS=="%s"' % self.isolate.trace_inputs.get_flavor(), {
|
| - 'variables': {
|
| - 'isolate_files': [
|
| - '<(DEPTH)/isolate_test.py',
|
| - ],
|
| - },
|
| - }],
|
| - ],
|
| - }
|
| - expected_buffer = cStringIO.StringIO()
|
| - self.isolate.trace_inputs.pretty_print(expected_value, expected_buffer)
|
| - self.assertEquals(expected_buffer.getvalue(), out)
|
| -
|
| -
|
| -def main():
|
| - global VERBOSE
|
| - VERBOSE = '-v' in sys.argv
|
| - level = logging.DEBUG if VERBOSE else logging.ERROR
|
| - logging.basicConfig(level=level)
|
| - if len(sys.argv) == 1:
|
| - unittest.main()
|
| - if sys.argv[1] == '--ok':
|
| - return 0
|
| - if sys.argv[1] == '--fail':
|
| - return 1
|
| -
|
| - unittest.main()
|
| -
|
| -
|
| -if __name__ == '__main__':
|
| - sys.exit(main())
|
|
|