aboutsummaryrefslogtreecommitdiff
path: root/bestflags/pipeline_worker_test.py
diff options
context:
space:
mode:
Diffstat (limited to 'bestflags/pipeline_worker_test.py')
-rw-r--r--bestflags/pipeline_worker_test.py203
1 files changed, 105 insertions, 98 deletions
diff --git a/bestflags/pipeline_worker_test.py b/bestflags/pipeline_worker_test.py
index e3de5e12..15c51ec1 100644
--- a/bestflags/pipeline_worker_test.py
+++ b/bestflags/pipeline_worker_test.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Copyright 2013 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Unittest for the pipeline_worker functions in the build/test stage.
@@ -8,7 +8,7 @@ Part of the Chrome build flags optimization.
This module tests the helper method and the worker method.
"""
-__author__ = 'yuhenglong@google.com (Yuheng Long)'
+__author__ = "yuhenglong@google.com (Yuheng Long)"
import multiprocessing
import random
@@ -19,110 +19,117 @@ from mock_task import MockTask
import pipeline_process
import pipeline_worker
+
# Pick an integer at random.
TEST_STAGE = -3
def MockTaskCostGenerator():
- """Calls a random number generator and returns a negative number."""
- return random.randint(-sys.maxint - 1, -1)
+ """Calls a random number generator and returns a negative number."""
+ return random.randint(-sys.maxint - 1, -1)
class PipelineWorkerTest(unittest.TestCase):
- """This class tests the pipeline_worker functions.
-
- Given the same identifier, the cost should result the same from the
- pipeline_worker functions.
- """
+ """This class tests the pipeline_worker functions.
- def testHelper(self):
- """"Test the helper.
-
- Call the helper method twice, and test the results. The results should be
- the same, i.e., the cost should be the same.
+ Given the same identifier, the cost should result the same from the
+ pipeline_worker functions.
"""
- # Set up the input, helper and output queue for the helper method.
- manager = multiprocessing.Manager()
- helper_queue = manager.Queue()
- result_queue = manager.Queue()
- completed_queue = manager.Queue()
-
- # Set up the helper process that holds the helper method.
- helper_process = multiprocessing.Process(
- target=pipeline_worker.Helper,
- args=(TEST_STAGE, {}, helper_queue, completed_queue, result_queue))
- helper_process.start()
-
- # A dictionary defines the mock result to the helper.
- mock_result = {1: 1995, 2: 59, 9: 1027}
-
- # Test if there is a task that is done before, whether the duplicate task
- # will have the same result. Here, two different scenarios are tested. That
- # is the mock results are added to the completed_queue before and after the
- # corresponding mock tasks being added to the input queue.
- completed_queue.put((9, mock_result[9]))
-
- # The output of the helper should contain all the following tasks.
- results = [1, 1, 2, 9]
-
- # Testing the correctness of having tasks having the same identifier, here
- # 1.
- for result in results:
- helper_queue.put(MockTask(TEST_STAGE, result, MockTaskCostGenerator()))
-
- completed_queue.put((2, mock_result[2]))
- completed_queue.put((1, mock_result[1]))
-
- # Signal there is no more duplicate task.
- helper_queue.put(pipeline_process.POISONPILL)
- helper_process.join()
-
- while results:
- task = result_queue.get()
- identifier = task.GetIdentifier(TEST_STAGE)
- self.assertTrue(identifier in results)
- if identifier in mock_result:
- self.assertTrue(task.GetResult(TEST_STAGE), mock_result[identifier])
- results.remove(identifier)
-
- def testWorker(self):
- """"Test the worker method.
-
- The worker should process all the input tasks and output the tasks to the
- helper and result queue.
- """
-
- manager = multiprocessing.Manager()
- result_queue = manager.Queue()
- completed_queue = manager.Queue()
-
- # A dictionary defines the mock tasks and their corresponding results.
- mock_work_tasks = {1: 86, 2: 788}
-
- mock_tasks = []
-
- for flag, cost in mock_work_tasks.iteritems():
- mock_tasks.append(MockTask(TEST_STAGE, flag, cost))
-
- # Submit the mock tasks to the worker.
- for mock_task in mock_tasks:
- pipeline_worker.Worker(TEST_STAGE, mock_task, completed_queue,
- result_queue)
-
- # The tasks, from the output queue, should be the same as the input and
- # should be performed.
- for task in mock_tasks:
- output = result_queue.get()
- self.assertEqual(output, task)
- self.assertTrue(output.Done(TEST_STAGE))
-
- # The tasks, from the completed_queue, should be defined in the
- # mock_work_tasks dictionary.
- for flag, cost in mock_work_tasks.iteritems():
- helper_input = completed_queue.get()
- self.assertEqual(helper_input, (flag, cost))
-
-
-if __name__ == '__main__':
- unittest.main()
+ def testHelper(self):
+ """ "Test the helper.
+
+ Call the helper method twice, and test the results. The results should be
+ the same, i.e., the cost should be the same.
+ """
+
+ # Set up the input, helper and output queue for the helper method.
+ manager = multiprocessing.Manager()
+ helper_queue = manager.Queue()
+ result_queue = manager.Queue()
+ completed_queue = manager.Queue()
+
+ # Set up the helper process that holds the helper method.
+ helper_process = multiprocessing.Process(
+ target=pipeline_worker.Helper,
+ args=(TEST_STAGE, {}, helper_queue, completed_queue, result_queue),
+ )
+ helper_process.start()
+
+ # A dictionary defines the mock result to the helper.
+ mock_result = {1: 1995, 2: 59, 9: 1027}
+
+ # Test if there is a task that is done before, whether the duplicate task
+ # will have the same result. Here, two different scenarios are tested. That
+ # is the mock results are added to the completed_queue before and after the
+ # corresponding mock tasks being added to the input queue.
+ completed_queue.put((9, mock_result[9]))
+
+ # The output of the helper should contain all the following tasks.
+ results = [1, 1, 2, 9]
+
+ # Testing the correctness of having tasks having the same identifier, here
+ # 1.
+ for result in results:
+ helper_queue.put(
+ MockTask(TEST_STAGE, result, MockTaskCostGenerator())
+ )
+
+ completed_queue.put((2, mock_result[2]))
+ completed_queue.put((1, mock_result[1]))
+
+ # Signal there is no more duplicate task.
+ helper_queue.put(pipeline_process.POISONPILL)
+ helper_process.join()
+
+ while results:
+ task = result_queue.get()
+ identifier = task.GetIdentifier(TEST_STAGE)
+ self.assertTrue(identifier in results)
+ if identifier in mock_result:
+ self.assertTrue(
+ task.GetResult(TEST_STAGE), mock_result[identifier]
+ )
+ results.remove(identifier)
+
+ def testWorker(self):
+ """ "Test the worker method.
+
+ The worker should process all the input tasks and output the tasks to the
+ helper and result queue.
+ """
+
+ manager = multiprocessing.Manager()
+ result_queue = manager.Queue()
+ completed_queue = manager.Queue()
+
+ # A dictionary defines the mock tasks and their corresponding results.
+ mock_work_tasks = {1: 86, 2: 788}
+
+ mock_tasks = []
+
+ for flag, cost in mock_work_tasks.iteritems():
+ mock_tasks.append(MockTask(TEST_STAGE, flag, cost))
+
+ # Submit the mock tasks to the worker.
+ for mock_task in mock_tasks:
+ pipeline_worker.Worker(
+ TEST_STAGE, mock_task, completed_queue, result_queue
+ )
+
+ # The tasks, from the output queue, should be the same as the input and
+ # should be performed.
+ for task in mock_tasks:
+ output = result_queue.get()
+ self.assertEqual(output, task)
+ self.assertTrue(output.Done(TEST_STAGE))
+
+ # The tasks, from the completed_queue, should be defined in the
+ # mock_work_tasks dictionary.
+ for flag, cost in mock_work_tasks.iteritems():
+ helper_input = completed_queue.get()
+ self.assertEqual(helper_input, (flag, cost))
+
+
+if __name__ == "__main__":
+ unittest.main()