1a432d6c941566fa1e8be006335d41824b953bac
[WebKit-https.git] / Tools / Scripts / webkitpy / layout_tests / layout_package / manager_worker_broker_unittest.py
1 # Copyright (C) 2010 Google Inc. All rights reserved.
2 #
3 # Redistribution and use in source and binary forms, with or without
4 # modification, are permitted provided that the following conditions are
5 # met:
6 #
7 #     * Redistributions of source code must retain the above copyright
8 # notice, this list of conditions and the following disclaimer.
9 #     * Redistributions in binary form must reproduce the above
10 # copyright notice, this list of conditions and the following disclaimer
11 # in the documentation and/or other materials provided with the
12 # distribution.
13 #     * Neither the name of Google Inc. nor the names of its
14 # contributors may be used to endorse or promote products derived from
15 # this software without specific prior written permission.
16 #
17 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
29 import optparse
30 import sys
31 import unittest
32
33 try:
34     import multiprocessing
35 except ImportError:
36     multiprocessing = None
37
38
39 from webkitpy.common.system import outputcapture
40
41 from webkitpy.layout_tests import port
42 from webkitpy.layout_tests.layout_package import manager_worker_broker
43 from webkitpy.layout_tests.layout_package import message_broker2
44
45
46 class TestWorker(object):
47     pass
48
49
50 def get_options(worker_model):
51     option_list = manager_worker_broker.runtime_options()
52     parser = optparse.OptionParser(option_list=option_list)
53     options, args = parser.parse_args(args=['--worker-model', worker_model])
54     return options
55
56
57 def make_broker(manager, worker_model):
58     options = get_options(worker_model)
59     return manager_worker_broker.get(port.get("test"), options, manager,
60                                      TestWorker)
61
62
63 class FunctionTests(unittest.TestCase):
64     def test_get__inline(self):
65         self.assertTrue(make_broker(self, 'inline') is not None)
66
67     def test_get__threads(self):
68         self.assertRaises(NotImplementedError, make_broker, self, 'threads')
69
70     def test_get__processes(self):
71         if multiprocessing:
72             self.assertRaises(NotImplementedError, make_broker, self, 'processes')
73         else:
74             self.assertRaises(ValueError, make_broker, self, 'processes')
75
76     def test_get__unknown(self):
77         self.assertRaises(ValueError, make_broker, self, 'unknown')
78
79     def test_runtime_options(self):
80         option_list = manager_worker_broker.runtime_options()
81         parser = optparse.OptionParser(option_list=option_list)
82         options, args = parser.parse_args([])
83         self.assertTrue(options)
84
85 # FIXME: Add in unit tests for the managers, coverage tests for the interfaces.
86
87
88 if __name__ == '__main__':
89     unittest.main()