cbuildbot.py: Add a --mock-slave-status option
This CL adds a cbuildbot option to mock out the _FetchSlaveStatuses
function used by MasterSlaveSyncCompletionStage to get results from
slave builders. This is useful for cbuildbot testing purposes.
BUG=None
TEST=Unit tests pass. Supplied a pickle file with an empty dictionary
with this flag, verified that CommitQueueCompletionStage passed without
waiting on status from real CQ slave builders.
Change-Id: Ib08f2928317ffda1b45203094ade7b81dd203f5f
Reviewed-on: https://chromium-review.googlesource.com/187919
Tested-by: Aviv Keshet <akeshet@chromium.org>
Reviewed-by: Yu-Ju Hong <yjhong@chromium.org>
Commit-Queue: Aviv Keshet <akeshet@chromium.org>
diff --git a/scripts/cbuildbot.py b/scripts/cbuildbot.py
index 4d4f481..a90da1c 100644
--- a/scripts/cbuildbot.py
+++ b/scripts/cbuildbot.py
@@ -17,6 +17,7 @@
import logging
import optparse
import os
+import pickle
import sys
import time
import traceback
@@ -1255,6 +1256,13 @@
'in conjunction with --debug, the tree status '
'will not be ignored as it usually is in a '
'--debug run.')
+ group.add_remote_option('--mock-slave-status', dest='mock_slave_status',
+ default=None, action='store',
+ metavar='MOCK_SLAVE_STATUS_PICKLE_FILE',
+ help='Override the result of the _FetchSlaveStatuses '
+ 'method of MasterSlaveSyncCompletionStage, by '
+ 'specifying a file with a pickle of the result '
+ 'to be returned.')
parser.add_option_group(group)
@@ -1678,4 +1686,10 @@
stack.Add(mock.patch.object, timeout_util, '_GetStatus',
return_value=options.mock_tree_status)
+ if options.mock_slave_status is not None:
+ with open(options.mock_slave_status, 'r') as f:
+ mock_status = pickle.load(f)
+ stack.Add(mock.patch.object, stages.MasterSlaveSyncCompletionStage,
+ '_FetchSlaveStatuses', return_value=mock_status)
+
_RunBuildStagesWrapper(options, build_config)