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

Side by Side Diff: build/android/pylib/base/shard_unittest.py

Issue 12544033: [Android] Rewrite base test result classes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """Unittests for shard.py.""" 5 """Unittests for shard.py."""
6 6
7 import os 7 import os
8 import sys 8 import sys
9 import unittest 9 import unittest
10 10
11 sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)), 11 sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)),
12 os.pardir, os.pardir)) 12 os.pardir, os.pardir))
13 13
14 # Mock out android_commands.GetAttachedDevices(). 14 # Mock out android_commands.GetAttachedDevices().
15 from pylib import android_commands 15 from pylib import android_commands
16 android_commands.GetAttachedDevices = lambda: ['0', '1'] 16 android_commands.GetAttachedDevices = lambda: ['0', '1']
17 17
18 from base_test_result import BaseTestResult
craigdh 2013/03/23 00:41:39 Don't import classes. Should be import base_test_r
frankf 2013/03/23 01:32:59 Done.
19 from base_test_result import TestRunResults
20 from base_test_result import TestType
18 import shard 21 import shard
19 import test_result
20 22
21 23
22 class TestException(Exception): 24 class TestException(Exception):
23 pass 25 pass
24 26
25 27
26 class MockRunner(object): 28 class MockRunner(object):
27 """A mock TestRunner.""" 29 """A mock TestRunner."""
28 def __init__(self, device='0', shard_index=0): 30 def __init__(self, device='0', shard_index=0):
29 self.device = device 31 self.device = device
30 self.shard_index = shard_index 32 self.shard_index = shard_index
31 self.setups = 0 33 self.setups = 0
32 self.teardowns = 0 34 self.teardowns = 0
33 35
34 def RunTest(self, test): 36 def RunTest(self, test):
35 return (test_result.TestResults.FromRun( 37 results = TestRunResults()
36 ok=[test_result.BaseTestResult(test, '')]), 38 results.AddResult(BaseTestResult(test, TestType.PASS))
37 None) 39 return (results, None)
38 40
39 def SetUp(self): 41 def SetUp(self):
40 self.setups += 1 42 self.setups += 1
41 43
42 def TearDown(self): 44 def TearDown(self):
43 self.teardowns += 1 45 self.teardowns += 1
44 46
45 47
46 class MockRunnerFail(MockRunner): 48 class MockRunnerFail(MockRunner):
47 def RunTest(self, test): 49 def RunTest(self, test):
48 return (test_result.TestResults.FromRun( 50 results = TestRunResults()
49 failed=[test_result.BaseTestResult(test, '')]), 51 results.AddResult(BaseTestResult(test, TestType.FAIL))
50 test) 52 return (results, test)
51 53
52 54
53 class MockRunnerFailTwice(MockRunner): 55 class MockRunnerFailTwice(MockRunner):
54 def __init__(self, device='0', shard_index=0): 56 def __init__(self, device='0', shard_index=0):
55 super(MockRunnerFailTwice, self).__init__(device, shard_index) 57 super(MockRunnerFailTwice, self).__init__(device, shard_index)
56 self._fails = 0 58 self._fails = 0
57 59
58 def RunTest(self, test): 60 def RunTest(self, test):
59 self._fails += 1 61 self._fails += 1
62 results = TestRunResults()
60 if self._fails <= 2: 63 if self._fails <= 2:
61 return (test_result.TestResults.FromRun( 64 results.AddResult(BaseTestResult(test, TestType.FAIL))
62 failed=[test_result.BaseTestResult(test, '')]), 65 return (results, test)
63 test)
64 else: 66 else:
65 return (test_result.TestResults.FromRun( 67 results.AddResult(BaseTestResult(test, TestType.PASS))
66 ok=[test_result.BaseTestResult(test, '')]), 68 return (results, None)
67 None)
68 69
69 70
70 class MockRunnerException(MockRunner): 71 class MockRunnerException(MockRunner):
71 def RunTest(self, test): 72 def RunTest(self, test):
72 raise TestException 73 raise TestException
73 74
74 75
75 class TestFunctions(unittest.TestCase): 76 class TestFunctions(unittest.TestCase):
76 """Tests for shard._RunTestsFromQueue.""" 77 """Tests for shard._RunTestsFromQueue."""
77 @staticmethod 78 @staticmethod
78 def _RunTests(mock_runner, tests): 79 def _RunTests(mock_runner, tests):
79 results = [] 80 results = []
80 tests = shard._TestCollection([shard._Test(t) for t in tests]) 81 tests = shard._TestCollection([shard._Test(t) for t in tests])
81 shard._RunTestsFromQueue(mock_runner, tests, results) 82 shard._RunTestsFromQueue(mock_runner, tests, results)
82 return test_result.TestResults.FromTestResults(results) 83 run_results = TestRunResults()
84 for r in results:
85 run_results.AddTestRunResults(r)
86 return run_results
83 87
84 def testRunTestsFromQueue(self): 88 def testRunTestsFromQueue(self):
85 results = TestFunctions._RunTests(MockRunner(), ['a', 'b']) 89 results = TestFunctions._RunTests(MockRunner(), ['a', 'b'])
86 self.assertEqual(len(results.ok), 2) 90 self.assertEqual(len(results.GetPass()), 2)
87 self.assertEqual(len(results.GetAllBroken()), 0) 91 self.assertEqual(len(results.GetNotPass()), 0)
88 92
89 def testRunTestsFromQueueRetry(self): 93 def testRunTestsFromQueueRetry(self):
90 results = TestFunctions._RunTests(MockRunnerFail(), ['a', 'b']) 94 results = TestFunctions._RunTests(MockRunnerFail(), ['a', 'b'])
91 self.assertEqual(len(results.ok), 0) 95 self.assertEqual(len(results.GetPass()), 0)
92 self.assertEqual(len(results.failed), 2) 96 self.assertEqual(len(results.GetFail()), 2)
93 97
94 def testRunTestsFromQueueFailTwice(self): 98 def testRunTestsFromQueueFailTwice(self):
95 results = TestFunctions._RunTests(MockRunnerFailTwice(), ['a', 'b']) 99 results = TestFunctions._RunTests(MockRunnerFailTwice(), ['a', 'b'])
96 self.assertEqual(len(results.ok), 2) 100 self.assertEqual(len(results.GetPass()), 2)
97 self.assertEqual(len(results.GetAllBroken()), 0) 101 self.assertEqual(len(results.GetNotPass()), 0)
98 102
99 def testSetUp(self): 103 def testSetUp(self):
100 runners = [] 104 runners = []
101 counter = shard._ThreadSafeCounter() 105 counter = shard._ThreadSafeCounter()
102 shard._SetUp(MockRunner, '0', runners, counter) 106 shard._SetUp(MockRunner, '0', runners, counter)
103 self.assertEqual(len(runners), 1) 107 self.assertEqual(len(runners), 1)
104 self.assertEqual(runners[0].setups, 1) 108 self.assertEqual(runners[0].setups, 1)
105 109
106 def testThreadSafeCounter(self): 110 def testThreadSafeCounter(self):
107 counter = shard._ThreadSafeCounter() 111 counter = shard._ThreadSafeCounter()
(...skipping 11 matching lines...) Expand all
119 for runner in runners: 123 for runner in runners:
120 self.assertEqual(runner.setups, 1) 124 self.assertEqual(runner.setups, 1)
121 self.assertEqual(set([r.device for r in runners]), 125 self.assertEqual(set([r.device for r in runners]),
122 set(['0', '1'])) 126 set(['0', '1']))
123 self.assertEqual(set([r.shard_index for r in runners]), 127 self.assertEqual(set([r.shard_index for r in runners]),
124 set([0, 1])) 128 set([0, 1]))
125 129
126 def testRun(self): 130 def testRun(self):
127 runners = [MockRunner('0'), MockRunner('1')] 131 runners = [MockRunner('0'), MockRunner('1')]
128 results = shard._RunAllTests(runners, self.tests) 132 results = shard._RunAllTests(runners, self.tests)
129 self.assertEqual(len(results.ok), len(self.tests)) 133 self.assertEqual(len(results.GetPass()), len(self.tests))
130 134
131 def testTearDown(self): 135 def testTearDown(self):
132 runners = [MockRunner('0'), MockRunner('1')] 136 runners = [MockRunner('0'), MockRunner('1')]
133 shard._TearDownRunners(runners) 137 shard._TearDownRunners(runners)
134 for runner in runners: 138 for runner in runners:
135 self.assertEqual(runner.teardowns, 1) 139 self.assertEqual(runner.teardowns, 1)
136 140
137 def testRetry(self): 141 def testRetry(self):
138 runners = shard._CreateRunners(MockRunnerFail, ['0', '1']) 142 runners = shard._CreateRunners(MockRunnerFail, ['0', '1'])
139 results = shard._RunAllTests(runners, self.tests) 143 results = shard._RunAllTests(runners, self.tests)
140 self.assertEqual(len(results.failed), len(self.tests)) 144 self.assertEqual(len(results.GetFail()), len(self.tests))
141 145
142 def testReraise(self): 146 def testReraise(self):
143 runners = shard._CreateRunners(MockRunnerException, ['0', '1']) 147 runners = shard._CreateRunners(MockRunnerException, ['0', '1'])
144 with self.assertRaises(TestException): 148 with self.assertRaises(TestException):
145 shard._RunAllTests(runners, self.tests) 149 shard._RunAllTests(runners, self.tests)
146 150
147 151
148 class TestShard(unittest.TestCase): 152 class TestShard(unittest.TestCase):
149 """Tests for shard.Shard.""" 153 """Tests for shard.Shard."""
150 @staticmethod 154 @staticmethod
151 def _RunShard(runner_factory): 155 def _RunShard(runner_factory):
152 return shard.ShardAndRunTests(runner_factory, ['0', '1'], ['a', 'b', 'c']) 156 return shard.ShardAndRunTests(runner_factory, ['0', '1'], ['a', 'b', 'c'])
153 157
154 def testShard(self): 158 def testShard(self):
155 results = TestShard._RunShard(MockRunner) 159 results = TestShard._RunShard(MockRunner)
156 self.assertEqual(len(results.ok), 3) 160 self.assertEqual(len(results.GetPass()), 3)
157 161
158 def testFailing(self): 162 def testFailing(self):
159 results = TestShard._RunShard(MockRunnerFail) 163 results = TestShard._RunShard(MockRunnerFail)
160 self.assertEqual(len(results.ok), 0) 164 self.assertEqual(len(results.GetPass()), 0)
161 self.assertEqual(len(results.failed), 3) 165 self.assertEqual(len(results.GetFail()), 3)
162 166
163 167
164 if __name__ == '__main__': 168 if __name__ == '__main__':
165 unittest.main() 169 unittest.main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698