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

Unified Diff: build/android/pylib/base/shard_unittest.py

Issue 12317059: [Andoid] Threaded TestRunner creation and SetUp and TearDown calls. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « build/android/pylib/base/shard.py ('k') | build/android/pylib/gtest/test_package.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: build/android/pylib/base/shard_unittest.py
diff --git a/build/android/pylib/base/shard_unittest.py b/build/android/pylib/base/shard_unittest.py
index 0448d8316cf966bcba80aefdc1dc9b4b7abfc599..79aa5b20d894be931b0d2d3b827922569837e91d 100644
--- a/build/android/pylib/base/shard_unittest.py
+++ b/build/android/pylib/base/shard_unittest.py
@@ -10,7 +10,10 @@ import unittest
sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)),
os.pardir, os.pardir))
+
+# Mock out android_commands.GetAttachedDevices().
from pylib import android_commands
+android_commands.GetAttachedDevices = lambda: ['0', '1']
import shard
import test_result
@@ -24,68 +27,106 @@ class MockRunner(object):
"""A mock TestRunner."""
def __init__(self, device='0'):
self.device = device
+ self.setups = 0
+ self.teardowns = 0
- def Run(self, test):
+ def RunTest(self, test):
return (test_result.TestResults.FromRun(
ok=[test_result.BaseTestResult(test, '')]),
None)
+ def SetUp(self):
+ self.setups += 1
+
+ def TearDown(self):
+ self.teardowns += 1
+
-class MockRunnerRetry(MockRunner):
- def Run(self, test):
+class MockRunnerFail(MockRunner):
+ def RunTest(self, test):
return (test_result.TestResults.FromRun(
failed=[test_result.BaseTestResult(test, '')]),
test)
+class MockRunnerFailTwice(MockRunner):
+ def __init__(self, device='0'):
+ super(MockRunnerFailTwice, self).__init__(device)
+ self._fails = 0
+
+ def RunTest(self, test):
+ self._fails += 1
+ if self._fails <= 2:
+ return (test_result.TestResults.FromRun(
+ failed=[test_result.BaseTestResult(test, '')]),
+ test)
+ else:
+ return (test_result.TestResults.FromRun(
+ ok=[test_result.BaseTestResult(test, '')]),
+ None)
+
+
class MockRunnerException(MockRunner):
- def Run(self, test):
+ def RunTest(self, test):
raise TestException
-class TestWorker(unittest.TestCase):
- """Tests for shard._Worker."""
+class TestFunctions(unittest.TestCase):
+ """Tests for shard._RunTestsFromQueue."""
@staticmethod
- def _RunRunner(mock_runner, tests):
+ def _RunTests(mock_runner, tests):
results = []
- retry = []
- worker = shard._Worker(mock_runner, tests, results, retry)
- worker.start()
- worker.join()
- worker.ReraiseIfException()
- return (results, retry)
+ tests = shard._TestCollection([shard._Test(t) for t in tests])
+ shard._RunTestsFromQueue(mock_runner, tests, results)
+ return test_result.TestResults.FromTestResults(results)
- def testRun(self):
- results, retry = TestWorker._RunRunner(MockRunner(), ['a', 'b'])
- self.assertEqual(len(results), 2)
- self.assertEqual(len(retry), 0)
+ def testRunTestsFromQueue(self):
+ results = TestFunctions._RunTests(MockRunner(), ['a', 'b'])
+ self.assertEqual(len(results.ok), 2)
+ self.assertEqual(len(results.GetAllBroken()), 0)
- def testRetry(self):
- results, retry = TestWorker._RunRunner(MockRunnerRetry(), ['a', 'b'])
- self.assertEqual(len(results), 2)
- self.assertEqual(len(retry), 2)
+ def testRunTestsFromQueueRetry(self):
+ results = TestFunctions._RunTests(MockRunnerFail(), ['a', 'b'])
+ self.assertEqual(len(results.ok), 0)
+ self.assertEqual(len(results.failed), 2)
- def testReraise(self):
- with self.assertRaises(TestException):
- TestWorker._RunRunner(MockRunnerException(), ['a', 'b'])
+ def testRunTestsFromQueueFailTwice(self):
+ results = TestFunctions._RunTests(MockRunnerFailTwice(), ['a', 'b'])
+ self.assertEqual(len(results.ok), 2)
+ self.assertEqual(len(results.GetAllBroken()), 0)
+
+ def testSetUp(self):
+ runners = []
+ shard._SetUp(MockRunner, '0', runners)
+ self.assertEqual(len(runners), 1)
+ self.assertEqual(runners[0].setups, 1)
-class TestRunAllTests(unittest.TestCase):
+class TestThreadGroupFunctions(unittest.TestCase):
"""Tests for shard._RunAllTests and shard._CreateRunners."""
def setUp(self):
self.tests = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
- def testRun(self):
+ def testCreate(self):
runners = shard._CreateRunners(MockRunner, ['0', '1'])
- results, retry = shard._RunAllTests(runners, self.tests)
- self.assertEqual(len(results), len(self.tests))
- self.assertEqual(len(retry), 0)
+ for runner in runners:
+ self.assertEqual(runner.setups, 1)
+
+ def testRun(self):
+ runners = [MockRunner('0'), MockRunner('1')]
+ results = shard._RunAllTests(runners, self.tests)
+ self.assertEqual(len(results.ok), len(self.tests))
+
+ def testTearDown(self):
+ runners = [MockRunner('0'), MockRunner('1')]
+ shard._TearDownRunners(runners)
+ for runner in runners:
+ self.assertEqual(runner.teardowns, 1)
def testRetry(self):
- runners = shard._CreateRunners(MockRunnerRetry, ['0', '1'])
- results, retry = shard._RunAllTests(runners, self.tests)
- self.assertEqual(len(results), len(self.tests))
- self.assertEqual(len(retry), len(self.tests))
+ runners = shard._CreateRunners(MockRunnerFail, ['0', '1'])
+ results = shard._RunAllTests(runners, self.tests)
+ self.assertEqual(len(results.failed), len(self.tests))
def testReraise(self):
runners = shard._CreateRunners(MockRunnerException, ['0', '1'])
@@ -97,17 +138,14 @@ class TestShard(unittest.TestCase):
"""Tests for shard.Shard."""
@staticmethod
def _RunShard(runner_factory):
- devices = ['0', '1']
- # Mock out android_commands.GetAttachedDevices().
- android_commands.GetAttachedDevices = lambda: devices
- return shard.ShardAndRunTests(runner_factory, devices, ['a', 'b', 'c'])
+ return shard.ShardAndRunTests(runner_factory, ['0', '1'], ['a', 'b', 'c'])
def testShard(self):
results = TestShard._RunShard(MockRunner)
self.assertEqual(len(results.ok), 3)
def testFailing(self):
- results = TestShard._RunShard(MockRunnerRetry)
+ results = TestShard._RunShard(MockRunnerFail)
self.assertEqual(len(results.ok), 0)
self.assertEqual(len(results.failed), 3)
« no previous file with comments | « build/android/pylib/base/shard.py ('k') | build/android/pylib/gtest/test_package.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698