cbuildbot: simplify paygen unittests
Patching the parallel module internals is a bit dicey and breaks
when using newer versions of mock. Patch the target function
instead, and switch to the ParallelMock class. This also speeds
up the tests significantly.
BUG=chromium:1015720
TEST=`./run_tests` passes
Change-Id: Ia42a78d4bab6ef1661c3faaaaff9516a8fbb4141
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/2690930
Tested-by: Mike Frysinger <vapier@chromium.org>
Auto-Submit: Mike Frysinger <vapier@chromium.org>
Commit-Queue: Navil Perez <navil@google.com>
Reviewed-by: Navil Perez <navil@google.com>
diff --git a/cbuildbot/stages/release_stages_unittest.py b/cbuildbot/stages/release_stages_unittest.py
index c72ece2..9ef94d1 100644
--- a/cbuildbot/stages/release_stages_unittest.py
+++ b/cbuildbot/stages/release_stages_unittest.py
@@ -16,6 +16,7 @@
from chromite.lib import constants
from chromite.lib import failures_lib
from chromite.lib import parallel
+from chromite.lib import parallel_unittest
from chromite.lib import results_lib
from chromite.lib import timeout_util
from chromite.lib.buildstore import FakeBuildStore
@@ -347,12 +348,12 @@
def testPerformStageSuccess(self):
"""Test that PaygenStage works when signing works."""
- with patch(release_stages.parallel, 'BackgroundTaskRunner') as background:
- queue = background().__enter__()
+ with patch(release_stages.PaygenStage, '_RunPaygenInProcess') as runner:
channels = ['stable', 'beta']
stage = self.ConstructStage(channels=channels)
- stage.PerformStage()
+ with parallel_unittest.ParallelMock():
+ stage.PerformStage()
metadata_channels = self._run.attrs.metadata.GetValue('channels')
self.assertEqual(','.join(channels), metadata_channels)
@@ -361,40 +362,38 @@
self.assertEqual(self.validateMock.call_args_list,
[mock.call('auron-yuna')])
- # Verify that we queue up work
- self.assertEqual(queue.put.call_args_list, [
+ # Verify that we queue up work.
+ runner.assert_has_calls([
mock.call(
- ('stable', 'auron-yuna', '0.0.1', False, False, False)),
- mock.call(('beta', 'auron-yuna', '0.0.1', False, False, False))
+ stage, 'stable', 'auron-yuna', '0.0.1', False, False, False),
+ mock.call(stage, 'beta', 'auron-yuna', '0.0.1', False, False, False),
])
def testPerformStageNoChannels(self):
"""Test that PaygenStage works when signing works."""
- with patch(release_stages.parallel, 'BackgroundTaskRunner') as background:
- queue = background().__enter__()
-
+ with patch(release_stages.PaygenStage, '_RunPaygenInProcess') as runner:
stage = self.ConstructStage(channels=[])
- stage.PerformStage()
+ with parallel_unittest.ParallelMock():
+ stage.PerformStage()
- # Verify that we queue up work
- self.assertEqual(queue.put.call_args_list, [])
+ # Verify that we did not queue up work.
+ runner.assert_not_called()
def testPerformStageTrybot(self):
"""Test the PerformStage alternate behavior for trybot runs."""
- with patch(release_stages.parallel, 'BackgroundTaskRunner') as background:
- queue = background().__enter__()
-
+ with patch(release_stages.PaygenStage, '_RunPaygenInProcess') as runner:
# The stage is constructed differently for trybots, so don't use
# ConstructStage.
stage = self.ConstructStage(channels=['foo', 'bar'])
- stage.PerformStage()
+ with parallel_unittest.ParallelMock():
+ stage.PerformStage()
# Notice that we didn't put anything in _wait_for_channel_signing, but
# still got results right away.
- self.assertEqual(queue.put.call_args_list, [
- mock.call(('foo', 'auron-yuna', '0.0.1', False, False, False)),
- mock.call(('bar', 'auron-yuna', '0.0.1', False, False, False)),
+ runner.assert_has_calls([
+ mock.call(stage, 'foo', 'auron-yuna', '0.0.1', False, False, False),
+ mock.call(stage, 'bar', 'auron-yuna', '0.0.1', False, False, False),
])
def testPerformStageUnknownBoard(self):