OLD | NEW |
(Empty) | |
| 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. |
| 5 |
| 6 import logging |
| 7 import os |
| 8 import sys |
| 9 import unittest |
| 10 |
| 11 ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) |
| 12 sys.path.insert(0, ROOT_DIR) |
| 13 |
| 14 import run_test_cases |
| 15 |
| 16 SLEEP = os.path.join(ROOT_DIR, 'tests', 'run_test_cases', 'sleep.py') |
| 17 |
| 18 |
| 19 def to_native_eol(string): |
| 20 if sys.platform == 'win32': |
| 21 return string.replace('\n', '\r\n') |
| 22 return string |
| 23 |
| 24 |
| 25 class ListTestCasesTest(unittest.TestCase): |
| 26 def test_shards(self): |
| 27 test_cases = ( |
| 28 (range(10), 10, 0, 1), |
| 29 |
| 30 ([0, 1], 5, 0, 3), |
| 31 ([2, 3], 5, 1, 3), |
| 32 ([4 ], 5, 2, 3), |
| 33 |
| 34 ([0], 5, 0, 7), |
| 35 ([1], 5, 1, 7), |
| 36 ([2], 5, 2, 7), |
| 37 ([3], 5, 3, 7), |
| 38 ([4], 5, 4, 7), |
| 39 ([ ], 5, 5, 7), |
| 40 ([ ], 5, 6, 7), |
| 41 |
| 42 ([0, 1], 4, 0, 2), |
| 43 ([2, 3], 4, 1, 2), |
| 44 ) |
| 45 for expected, range_length, index, shards in test_cases: |
| 46 result = run_test_cases.filter_shards(range(range_length), index, shards) |
| 47 self.assertEquals( |
| 48 expected, result, (result, expected, range_length, index, shards)) |
| 49 |
| 50 |
| 51 class RunTestCases(unittest.TestCase): |
| 52 def test_call(self): |
| 53 cmd = [sys.executable, SLEEP, '0.001'] |
| 54 # 0 means no timeout, like None. |
| 55 output, code = run_test_cases.call_with_timeout(cmd, 0) |
| 56 self.assertEquals(to_native_eol('Sleeping.\nSlept.\n'), output) |
| 57 self.assertEquals(0, code) |
| 58 |
| 59 def test_call_eol(self): |
| 60 cmd = [sys.executable, SLEEP, '0.001'] |
| 61 # 0 means no timeout, like None. |
| 62 output, code = run_test_cases.call_with_timeout( |
| 63 cmd, 0, universal_newlines=True) |
| 64 self.assertEquals('Sleeping.\nSlept.\n', output) |
| 65 self.assertEquals(0, code) |
| 66 |
| 67 def test_call_timed_out_kill(self): |
| 68 cmd = [sys.executable, SLEEP, '100'] |
| 69 # On a loaded system, this can be tight. |
| 70 output, code = run_test_cases.call_with_timeout(cmd, timeout=1) |
| 71 self.assertEquals(to_native_eol('Sleeping.\n'), output) |
| 72 if sys.platform == 'win32': |
| 73 self.assertEquals(1, code) |
| 74 else: |
| 75 self.assertEquals(-9, code) |
| 76 |
| 77 def test_call_timed_out_kill_eol(self): |
| 78 cmd = [sys.executable, SLEEP, '100'] |
| 79 # On a loaded system, this can be tight. |
| 80 output, code = run_test_cases.call_with_timeout( |
| 81 cmd, timeout=1, universal_newlines=True) |
| 82 self.assertEquals('Sleeping.\n', output) |
| 83 if sys.platform == 'win32': |
| 84 self.assertEquals(1, code) |
| 85 else: |
| 86 self.assertEquals(-9, code) |
| 87 |
| 88 def test_call_timeout_no_kill(self): |
| 89 cmd = [sys.executable, SLEEP, '0.001'] |
| 90 output, code = run_test_cases.call_with_timeout(cmd, timeout=100) |
| 91 self.assertEquals(to_native_eol('Sleeping.\nSlept.\n'), output) |
| 92 self.assertEquals(0, code) |
| 93 |
| 94 def test_call_timeout_no_kill_eol(self): |
| 95 cmd = [sys.executable, SLEEP, '0.001'] |
| 96 output, code = run_test_cases.call_with_timeout( |
| 97 cmd, timeout=100, universal_newlines=True) |
| 98 self.assertEquals('Sleeping.\nSlept.\n', output) |
| 99 self.assertEquals(0, code) |
| 100 |
| 101 def test_gtest_filter(self): |
| 102 old = run_test_cases.run_test_cases |
| 103 exe = os.path.join(ROOT_DIR, 'tests', 'gtest_fake', 'gtest_fake_pass.py') |
| 104 def expect(executable, test_cases, jobs, timeout, run_all, result_file): |
| 105 self.assertEquals(run_test_cases.fix_python_path([exe]), executable) |
| 106 self.assertEquals(['Foo.Bar1', 'Foo.Bar3'], test_cases) |
| 107 self.assertEquals(run_test_cases.num_processors(), jobs) |
| 108 self.assertEquals(120, timeout) |
| 109 self.assertEquals(False, run_all) |
| 110 self.assertEquals(exe + '.run_test_cases', result_file) |
| 111 return 89 |
| 112 |
| 113 try: |
| 114 run_test_cases.run_test_cases = expect |
| 115 result = run_test_cases.main([exe, '--gtest_filter=Foo.Bar*-*.Bar2']) |
| 116 self.assertEquals(89, result) |
| 117 finally: |
| 118 run_test_cases.run_test_cases = old |
| 119 |
| 120 def testRunSome(self): |
| 121 tests = [ |
| 122 # Try with named arguments. Accepts 3*1 failures. |
| 123 ( |
| 124 run_test_cases.RunSome( |
| 125 expected_count=10, |
| 126 retries=3, |
| 127 min_failures=1, |
| 128 max_failure_ratio=0.001), |
| 129 [False] * 4), |
| 130 # Same without named arguments. |
| 131 (run_test_cases.RunSome( 10, 3, 1, 0.001), [False] * 4), |
| 132 |
| 133 (run_test_cases.RunSome( 10, 1, 1, 0.001), [False] * 2), |
| 134 (run_test_cases.RunSome( 10, 1, 1, 0.010), [False] * 2), |
| 135 |
| 136 # For low expected_count value, retries * min_failures is the minimum |
| 137 # bound of accepted failures. |
| 138 (run_test_cases.RunSome( 10, 3, 1, 0.010), [False] * 4), |
| 139 (run_test_cases.RunSome( 10, 3, 1, 0.020), [False] * 4), |
| 140 (run_test_cases.RunSome( 10, 3, 1, 0.050), [False] * 4), |
| 141 (run_test_cases.RunSome( 10, 3, 1, 0.100), [False] * 4), |
| 142 (run_test_cases.RunSome( 10, 3, 1, 0.110), [False] * 4), |
| 143 |
| 144 # Allows expected_count + retries failures at maximum. |
| 145 (run_test_cases.RunSome( 10, 3, 1, 0.200), [False] * 6), |
| 146 (run_test_cases.RunSome( 10, 3, 1, 0.999), [False] * 30), |
| 147 |
| 148 # The asympthote is nearing max_failure_ratio for large expected_count |
| 149 # values. |
| 150 (run_test_cases.RunSome(1000, 3, 1, 0.050), [False] * 150), |
| 151 ] |
| 152 for index, (decider, rounds) in enumerate(tests): |
| 153 for index2, r in enumerate(rounds): |
| 154 self.assertFalse(decider.should_stop(), (index, index2, str(decider))) |
| 155 decider.got_result(r) |
| 156 self.assertTrue(decider.should_stop(), (index, str(decider))) |
| 157 |
| 158 def testStatsInfinite(self): |
| 159 decider = run_test_cases.RunAll() |
| 160 for _ in xrange(200): |
| 161 self.assertFalse(decider.should_stop()) |
| 162 decider.got_result(False) |
| 163 |
| 164 |
| 165 class WorkerPoolTest(unittest.TestCase): |
| 166 def test_normal(self): |
| 167 mapper = lambda value: -value |
| 168 with run_test_cases.ThreadPool(8) as pool: |
| 169 for i in range(32): |
| 170 pool.add_task(mapper, i) |
| 171 results = pool.join() |
| 172 self.assertEquals(range(-31, 1), sorted(results)) |
| 173 |
| 174 def test_exception(self): |
| 175 class FearsomeException(Exception): |
| 176 pass |
| 177 def mapper(value): |
| 178 raise FearsomeException(value) |
| 179 task_added = False |
| 180 try: |
| 181 with run_test_cases.ThreadPool(8) as pool: |
| 182 pool.add_task(mapper, 0) |
| 183 task_added = True |
| 184 pool.join() |
| 185 self.fail() |
| 186 except FearsomeException: |
| 187 self.assertEquals(True, task_added) |
| 188 |
| 189 |
| 190 if __name__ == '__main__': |
| 191 VERBOSE = '-v' in sys.argv |
| 192 logging.basicConfig(level=logging.DEBUG if VERBOSE else logging.ERROR) |
| 193 unittest.main() |
OLD | NEW |