Diff
Modified: trunk/Tools/ChangeLog (112170 => 112171)
--- trunk/Tools/ChangeLog 2012-03-26 23:35:04 UTC (rev 112170)
+++ trunk/Tools/ChangeLog 2012-03-26 23:36:06 UTC (rev 112171)
@@ -51,6 +51,113 @@
(TestFinderTest.test_clean):
(TestFinderTest.test_find_names):
+2012-03-26 Dirk Pranke <[email protected]>
+
+ nrwt: remove --worker-model flag
+ https://bugs.webkit.org/show_bug.cgi?id=82112
+
+ Reviewed by Adam Barth.
+
+ The --worker-model=inline flag is basically redundant with the
+ --child-processes=1 flag (technically, you could one run child
+ process, but this is only useful for testing); this patch
+ removes this flag, which simplifies things and enables more
+ cleanup down the road.
+
+ * Scripts/webkitpy/layout_tests/controllers/manager.py:
+ (Manager._run_tests):
+ (Manager.print_config):
+ * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:
+ (get):
+ * Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py:
+ (make_broker):
+ (FunctionTests.test_get__inline):
+ (FunctionTests.test_get__processes):
+ (_TestsMixin.setUp):
+ (_TestsMixin.make_broker):
+ (InlineBrokerTests.setUp):
+ (MultiProcessBrokerTests.setUp):
+ * Scripts/webkitpy/layout_tests/port/base.py:
+ (Port.default_child_processes):
+ * Scripts/webkitpy/layout_tests/port/chromium_android.py:
+ (ChromiumAndroidPort.check_sys_deps):
+ * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:
+ (ChromiumAndroidPortTest):
+ * Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py:
+ (MockDRTPortTest.make_port):
+ * Scripts/webkitpy/layout_tests/port/port_testcase.py:
+ (PortTestCase):
+ (PortTestCase.make_port):
+ * Scripts/webkitpy/layout_tests/port/test.py:
+ (TestPort.default_child_processes):
+ * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
+ (_set_up_derived_options):
+ (parse_args):
+ * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
+ (parse_args):
+ (MainTest.test_batch_size):
+ (MainTest.test_child_processes_2):
+ (MainTest.test_child_processes_min):
+ (MainTest.test_exception_raised):
+ (MainTest.test_keyboard_interrupt):
+ (MainTest.test_exit_after_n_crashes):
+ (MainTest.assert_run_order):
+ (MainTest.test_run_order__inline):
+ (MainTest.test_virtual):
+
+2012-03-26 Dirk Pranke <[email protected]>
+
+ test-webkitpy: split test-finding code into a different module
+ https://bugs.webkit.org/show_bug.cgi?id=82253
+
+ Reviewed by Adam Barth.
+
+ Per suggestion from abarth, this change splits all the
+ filesystem-crawling, test-finding code in test-webkitpy out into
+ a separate module and switches to using a FileSystem object.
+ This makes things much more testable, so we also add tests :).
+
+ We also add a realpath() method to the Filesystem object, since
+ test-webkitpy needs that in order to be able to resolve symlinks
+ properly to determine whether a file is under a particular tree
+ or not.
+
+ * Scripts/webkitpy/common/system/filesystem.py:
+ (FileSystem.realpath):
+ * Scripts/webkitpy/common/system/filesystem_mock.py:
+ (MockFileSystem.realpath):
+ * Scripts/webkitpy/test/main.py:
+ (Tester.__init__):
+ (Tester.add_tree):
+ (Tester.run):
+ (Tester._run_tests):
+ (Tester._log_exception):
+ * Scripts/webkitpy/test/test_finder.py: Added.
+ (TestDirectoryTree):
+ (TestDirectoryTree.__init__):
+ (TestDirectoryTree.find_modules):
+ (TestDirectoryTree.find_modules.file_filter):
+ (TestDirectoryTree.to_module):
+ (TestDirectoryTree.clean):
+ (TestFinder):
+ (TestFinder.__init__):
+ (TestFinder.add_tree):
+ (TestFinder.additional_paths):
+ (TestFinder.clean_trees):
+ (TestFinder.is_module):
+ (TestFinder.to_module):
+ (TestFinder.find_names):
+ (TestFinder._exclude):
+ * Scripts/webkitpy/test/test_finder_unittest.py: Added.
+ (TestFinderTest):
+ (TestFinderTest.setUp):
+ (TestFinderTest.tearDown):
+ (TestFinderTest.test_additional_system_paths):
+ (TestFinderTest.test_is_module):
+ (TestFinderTest.test_to_module):
+ (TestFinderTest.test_clean):
+ (TestFinderTest.test_find_names):
+
2012-03-26 Raphael Kubo da Costa <[email protected]>
[jhbuild] Use $MAKE if it is defined to build jhbuild itself.
Modified: trunk/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py (112170 => 112171)
--- trunk/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py 2012-03-26 23:35:04 UTC (rev 112170)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py 2012-03-26 23:36:06 UTC (rev 112171)
@@ -751,7 +751,7 @@
num_workers = min(int(self._options.child_processes), len(all_shards))
self._log_num_workers(num_workers, len(all_shards), len(locked_shards))
- manager_connection = manager_worker_broker.get(self._options.worker_model, self, worker.Worker)
+ manager_connection = manager_worker_broker.get(num_workers, self, worker.Worker)
if self._options.dry_run:
return (keyboard_interrupted, interrupted, thread_timings, self._group_stats, self._all_results)
@@ -760,7 +760,7 @@
for worker_number in xrange(num_workers):
worker_arguments = worker.WorkerArguments(worker_number, self.results_directory(), self._options)
worker_connection = manager_connection.start_worker(worker_arguments)
- if self._options.worker_model == 'inline':
+ if self._options.child_processes == 1:
# FIXME: We need to be able to share a port with the work so
# that some of the tests can query state on the port; ideally
# we'd rewrite the tests so that this wasn't necessary.
@@ -1124,7 +1124,6 @@
p.print_config('Command line: ' +
' '.join(self._port.driver_cmd_line()))
- p.print_config("Worker model: %s" % self._options.worker_model)
p.print_config("")
def _print_expected_results_of_type(self, result_summary,
Modified: trunk/Tools/Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py (112170 => 112171)
--- trunk/Tools/Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py 2012-03-26 23:35:04 UTC (rev 112170)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py 2012-03-26 23:36:06 UTC (rev 112171)
@@ -87,11 +87,11 @@
ANY_WORKER_TOPIC = 'workers'
-def get(worker_model, client, worker_class):
+def get(max_workers, client, worker_class):
"""Return a connection to a manager/worker message_broker
Args:
- worker_model - concurrency model to use (inline/processes)
+ max_workers - max # of workers to run concurrently.
client - BrokerClient implementation to dispatch
replies to.
worker_class - type of workers to create. This class should override
@@ -99,14 +99,12 @@
Returns:
A handle to an object that will talk to a message broker configured
for the normal manager/worker communication."""
- if worker_model == 'inline':
+ if max_workers == 1:
queue_class = Queue.Queue
manager_class = _InlineManager
- elif worker_model == 'processes':
+ else:
queue_class = multiprocessing.Queue
manager_class = _MultiProcessManager
- else:
- raise ValueError("unsupported value for --worker-model: %s" % worker_model)
broker = _Broker(queue_class)
return manager_class(broker, client, worker_class)
Modified: trunk/Tools/Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py (112170 => 112171)
--- trunk/Tools/Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py 2012-03-26 23:35:04 UTC (rev 112170)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/controllers/manager_worker_broker_unittest.py 2012-03-26 23:36:06 UTC (rev 112171)
@@ -46,12 +46,13 @@
WORKER_NAME = 'TestWorker'
-def make_broker(manager, worker_model, start_queue=None, stop_queue=None):
+
+def make_broker(manager, max_workers, start_queue=None, stop_queue=None):
global starting_queue
global stopping_queue
starting_queue = start_queue
stopping_queue = stop_queue
- return manager_worker_broker.get(worker_model, manager, _TestWorker)
+ return manager_worker_broker.get(max_workers, manager, _TestWorker)
class _TestWorker(manager_worker_broker.AbstractWorker):
@@ -87,18 +88,15 @@
class FunctionTests(unittest.TestCase):
def test_get__inline(self):
- self.assertTrue(make_broker(self, 'inline') is not None)
+ self.assertTrue(make_broker(self, 1) is not None)
def test_get__processes(self):
# This test sometimes fails on Windows. See <http://webkit.org/b/55087>.
if sys.platform in ('cygwin', 'win32'):
return
- self.assertTrue(make_broker(self, 'processes') is not None)
+ self.assertTrue(make_broker(self, 2) is not None)
- def test_get__unknown(self):
- self.assertRaises(ValueError, make_broker, self, 'unknown')
-
class _TestsMixin(object):
"""Mixin class that implements a series of tests to enforce the
contract all implementations must follow."""
@@ -125,10 +123,10 @@
self._broker = None
self._done = False
self._exception = None
- self._worker_model = None
+ self._max_workers = None
def make_broker(self, starting_queue=None, stopping_queue=None):
- self._broker = make_broker(self, self._worker_model, starting_queue,
+ self._broker = make_broker(self, self._max_workers, starting_queue,
stopping_queue)
def test_name(self):
@@ -177,7 +175,7 @@
class InlineBrokerTests(_TestsMixin, unittest.TestCase):
def setUp(self):
_TestsMixin.setUp(self)
- self._worker_model = 'inline'
+ self._max_workers = 1
def test_inline_arguments(self):
self.make_broker()
@@ -195,7 +193,7 @@
class MultiProcessBrokerTests(_TestsMixin, unittest.TestCase):
def setUp(self):
_TestsMixin.setUp(self)
- self._worker_model = 'processes'
+ self._max_workers = 2
class InterfaceTest(unittest.TestCase):
Modified: trunk/Tools/Scripts/webkitpy/layout_tests/port/base.py (112170 => 112171)
--- trunk/Tools/Scripts/webkitpy/layout_tests/port/base.py 2012-03-26 23:35:04 UTC (rev 112170)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/port/base.py 2012-03-26 23:36:06 UTC (rev 112171)
@@ -168,9 +168,6 @@
return min(supportable_instances, cpu_count)
return cpu_count
- def default_worker_model(self):
- return 'processes'
-
def worker_startup_delay_secs(self):
# FIXME: If we start workers up too quickly, DumpRenderTree appears
# to thrash on something and time out its first few tests. Until
Modified: trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py (112170 => 112171)
--- trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py 2012-03-26 23:35:04 UTC (rev 112170)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py 2012-03-26 23:36:06 UTC (rev 112171)
@@ -179,9 +179,6 @@
return False
return True
- def default_worker_model(self):
- return 'inline'
-
def test_expectations(self):
# Automatically apply all expectation rules of chromium-linux to
# chromium-android.
Modified: trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py (112170 => 112171)
--- trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py 2012-03-26 23:35:04 UTC (rev 112170)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py 2012-03-26 23:36:06 UTC (rev 112171)
@@ -38,4 +38,3 @@
class ChromiumAndroidPortTest(port_testcase.PortTestCase):
port_name = 'chromium-android'
port_maker = chromium_android.ChromiumAndroidPort
- expected_default_worker_model = 'inline'
Modified: trunk/Tools/Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py (112170 => 112171)
--- trunk/Tools/Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py 2012-03-26 23:35:04 UTC (rev 112170)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/port/mock_drt_unittest.py 2012-03-26 23:36:06 UTC (rev 112171)
@@ -56,10 +56,6 @@
return mock_drt.MockDRTPort(host, port_name='mock-chromium-win', options=options)
return mock_drt.MockDRTPort(host, port_name='mock-mac', options=options)
- def test_default_worker_model(self):
- # only overridding the default test; we don't care about this one.
- pass
-
def test_port_name_in_constructor(self):
self.assertTrue(mock_drt.MockDRTPort(MockSystemHost(), port_name='mock-test'))
Modified: trunk/Tools/Scripts/webkitpy/layout_tests/port/port_testcase.py (112170 => 112171)
--- trunk/Tools/Scripts/webkitpy/layout_tests/port/port_testcase.py 2012-03-26 23:35:04 UTC (rev 112170)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/port/port_testcase.py 2012-03-26 23:36:06 UTC (rev 112171)
@@ -52,7 +52,6 @@
os_name = None
os_version = None
port_maker = None
- expected_default_worker_model = 'processes'
def make_port(self, host=None, port_name=None, options=None, os_name=None, os_version=None, **kwargs):
host = host or MockSystemHost(os_name=(os_name or self.os_name), os_version=(os_version or self.os_version))
@@ -61,10 +60,6 @@
port_name = self.port_maker.determine_full_port_name(host, options, port_name)
return self.port_maker(host, port_name, options=options, **kwargs)
- def test_default_worker_model(self):
- port = self.make_port()
- self.assertEqual(port.default_worker_model(), self.expected_default_worker_model)
-
def test_driver_cmd_line(self):
port = self.make_port()
self.assertTrue(len(port.driver_cmd_line()))
Modified: trunk/Tools/Scripts/webkitpy/layout_tests/port/test.py (112170 => 112171)
--- trunk/Tools/Scripts/webkitpy/layout_tests/port/test.py 2012-03-26 23:35:04 UTC (rev 112170)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/port/test.py 2012-03-26 23:36:06 UTC (rev 112171)
@@ -372,9 +372,6 @@
def default_child_processes(self):
return 1
- def default_worker_model(self):
- return 'inline'
-
def worker_startup_delay_secs(self):
return 0
Modified: trunk/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py (112170 => 112171)
--- trunk/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py 2012-03-26 23:35:04 UTC (rev 112170)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py 2012-03-26 23:36:06 UTC (rev 112171)
@@ -134,13 +134,6 @@
# We return a list of warnings to print after the printer is initialized.
warnings = []
- if options.worker_model is None:
- options.worker_model = port.default_worker_model()
-
- if options.worker_model == 'inline':
- if options.child_processes and int(options.child_processes) > 1:
- warnings.append("--worker-model=inline overrides --child-processes")
- options.child_processes = "1"
if not options.child_processes:
options.child_processes = os.environ.get("WEBKIT_TEST_CHILD_PROCESSES",
str(port.default_child_processes()))
@@ -407,9 +400,6 @@
optparse.make_option("--child-processes",
help="Number of DumpRenderTrees to run in parallel."),
# FIXME: Display default number of child processes that will run.
- optparse.make_option("--worker-model", action=""
- default=None, help=("controls worker model. Valid values are "
- "'inline' and 'processes'.")),
optparse.make_option("-f", "--experimental-fully-parallel",
action=""
help="run all tests in parallel"),
Modified: trunk/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py (112170 => 112171)
--- trunk/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py 2012-03-26 23:35:04 UTC (rev 112170)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py 2012-03-26 23:36:06 UTC (rev 112171)
@@ -73,8 +73,8 @@
if not new_results:
args.append('--no-new-test-results')
- if not '--child-processes' in extra_args and not '--worker-model' in extra_args:
- args.extend(['--worker-model', 'inline'])
+ if not '--child-processes' in extra_args:
+ args.extend(['--child-processes', 1])
args.extend(extra_args)
if not tests_included:
# We use the glob to test that globbing works.
@@ -285,25 +285,19 @@
for batch in batch_tests_run:
self.assertTrue(len(batch) <= 2, '%s had too many tests' % ', '.join(batch))
- def test_child_process_1(self):
- if SHOULD_TEST_PROCESSES:
- _, _, regular_output, _ = logging_run(
- ['--print', 'config', '--worker-model', 'processes', '--child-processes', '1'])
- self.assertTrue(any(['Running 1 ' in line for line in regular_output.buflist]))
-
def test_child_processes_2(self):
# This test seems to fail on win32.
if sys.platform == 'win32':
return
if SHOULD_TEST_PROCESSES:
_, _, regular_output, _ = logging_run(
- ['--print', 'config', '--worker-model', 'processes', '--child-processes', '2'])
+ ['--print', 'config', '--child-processes', '2'])
self.assertTrue(any(['Running 2 ' in line for line in regular_output.buflist]))
def test_child_processes_min(self):
if SHOULD_TEST_PROCESSES:
_, _, regular_output, _ = logging_run(
- ['--print', 'config', '--worker-model', 'processes', '--child-processes', '2', 'passes'],
+ ['--print', 'config', '--child-processes', '2', 'passes'],
tests_included=True)
self.assertTrue(any(['Running 1 ' in line for line in regular_output.buflist]))
@@ -319,18 +313,17 @@
# whether they are in-process or out. inline exceptions work as normal,
# which allows us to get the full stack trace and traceback from the
# worker. The downside to this is that it could be any error, but this
- # is actually useful in testing, which is what --worker-model=inline is
- # usually used for.
+ # is actually useful in testing.
#
# Exceptions raised in a separate process are re-packaged into
# WorkerExceptions, which have a string capture of the stack which can
# be printed, but don't display properly in the unit test exception handlers.
self.assertRaises(ValueError, logging_run,
- ['failures/expected/exception.html'], tests_included=True)
+ ['failures/expected/exception.html', '--child-processes', '1'], tests_included=True)
if SHOULD_TEST_PROCESSES:
self.assertRaises(run_webkit_tests.WorkerException, logging_run,
- ['--worker-model', 'processes', 'failures/expected/exception.html'], tests_included=True)
+ ['--child-processes', '2', '--force', 'failures/expected/exception.html', 'passes/text.html'], tests_included=True)
def test_full_results_html(self):
# FIXME: verify html?
@@ -355,13 +348,13 @@
# Note that this also tests running a test marked as SKIP if
# you specify it explicitly.
self.assertRaises(KeyboardInterrupt, logging_run,
- ['failures/expected/keyboard.html'], tests_included=True)
-
- def test_keyboard_interrupt_inline_worker_model(self):
- self.assertRaises(KeyboardInterrupt, logging_run,
- ['failures/expected/keyboard.html', '--worker-model', 'inline'],
+ ['failures/expected/keyboard.html', '--child-processes', '1'],
tests_included=True)
+ if SHOULD_TEST_PROCESSES:
+ self.assertRaises(KeyboardInterrupt, logging_run,
+ ['failures/expected/keyboard.html', 'passes/text.html', '--child-processes', '2', '--force'], tests_included=True)
+
def test_no_tests_found(self):
res, out, err, user = logging_run(['resources'], tests_included=True)
self.assertEqual(res, -1)
@@ -683,17 +676,6 @@
flatten_batches=True)
self.assertEquals(['failures/expected/crash.html', 'passes/text.html'], tests_run)
- def test_exit_after_n_crashes_inline_worker_model(self):
- tests_run = get_tests_run([
- 'failures/unexpected/timeout.html',
- 'passes/text.html',
- '--exit-after-n-crashes-or-timeouts', '1',
- '--worker-model', 'inline',
- ],
- tests_included=True,
- flatten_batches=True)
- self.assertEquals(['failures/unexpected/timeout.html'], tests_run)
-
def test_results_directory_absolute(self):
# We run a configuration that should fail, to generate output, then
# look for what the output results url was.
@@ -730,19 +712,17 @@
# These next tests test that we run the tests in ascending alphabetical
# order per directory. HTTP tests are sharded separately from other tests,
# so we have to test both.
- def assert_run_order(self, worker_model, child_processes='1'):
- tests_run = get_tests_run(['--worker-model', worker_model,
- '--child-processes', child_processes, 'passes'],
+ def assert_run_order(self, child_processes='1'):
+ tests_run = get_tests_run(['--child-processes', child_processes, 'passes'],
tests_included=True, flatten_batches=True)
self.assertEquals(tests_run, sorted(tests_run))
- tests_run = get_tests_run(['--worker-model', worker_model,
- '--child-processes', child_processes, 'http/tests/passes'],
+ tests_run = get_tests_run(['--child-processes', child_processes, 'http/tests/passes'],
tests_included=True, flatten_batches=True)
self.assertEquals(tests_run, sorted(tests_run))
def test_run_order__inline(self):
- self.assert_run_order('inline')
+ self.assert_run_order()
def test_tolerance(self):
class ImageDiffTestPort(TestPort):
@@ -775,26 +755,6 @@
self.assertTrue(passing_run(['passes/text.html', 'passes/args.html',
'virtual/passes/text.html', 'virtual/passes/args.html']))
- def test_worker_model__inline(self):
- self.assertTrue(passing_run(['--worker-model', 'inline']))
-
- def test_worker_model__inline_with_child_processes(self):
- res, out, err, user = logging_run(['--worker-model', 'inline',
- '--child-processes', '2'])
- self.assertEqual(res, 0)
- self.assertContainsLine(err, '--worker-model=inline overrides --child-processes\n')
-
- def test_worker_model__processes(self):
- if SHOULD_TEST_PROCESSES:
- self.assertTrue(passing_run(['--worker-model', 'processes']))
-
- def test_worker_model__processes_and_dry_run(self):
- if SHOULD_TEST_PROCESSES:
- self.assertTrue(passing_run(['--worker-model', 'processes', '--dry-run']))
-
- def test_worker_model__unknown(self):
- self.assertRaises(ValueError, logging_run, ['--worker-model', 'unknown'])
-
def test_reftest_run(self):
tests_run = get_tests_run(['passes/reftest.html'], tests_included=True, flatten_batches=True)
self.assertEquals(['passes/reftest.html'], tests_run)