# Copyright (c) 2012 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """A module that contains a queue for running sharded tests.""" import multiprocessing class ShardedTestsQueue(object): """A queue for managing pending tests across different runners. This class should only be used when sharding. Attributes: num_devices: an integer; the number of attached Android devices. tests: a list of tests to be run. tests_queue: if sharding, a JoinableQueue object that holds tests from |tests|. Otherwise, a list holding tests. results_queue: a Queue object to hold TestResults objects. """ _STOP_SENTINEL = 'STOP' # sentinel value for iter() def __init__(self, num_devices, tests): self.num_devices = num_devices self.tests_queue = multiprocessing.Queue() for test in tests: self.tests_queue.put(test) for _ in xrange(self.num_devices): self.tests_queue.put(ShardedTestsQueue._STOP_SENTINEL) def __iter__(self): """Returns an iterator with the test cases.""" return iter(self.tests_queue.get, ShardedTestsQueue._STOP_SENTINEL)