15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Copyright (C) 2010 Google Inc. All rights reserved.
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Redistribution and use in source and binary forms, with or without
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# modification, are permitted provided that the following conditions are
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# met:
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#    * Redistributions of source code must retain the above copyright
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# notice, this list of conditions and the following disclaimer.
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#    * Redistributions in binary form must reproduce the above
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# copyright notice, this list of conditions and the following disclaimer
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# in the documentation and/or other materials provided with the
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# distribution.
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#    * Neither the name of Google Inc. nor the names of its
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# contributors may be used to endorse or promote products derived from
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# this software without specific prior written permission.
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
29e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)import unittest
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)from webkitpy.common.system.systemhost_mock import MockSystemHost
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)from webkitpy.layout_tests.port import Port, Driver, DriverOutput
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)from webkitpy.layout_tests.port.server_process_mock import MockServerProcess
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# FIXME: remove the dependency on TestWebKitPort
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)from webkitpy.layout_tests.port.port_testcase import TestWebKitPort
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
39926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)from webkitpy.tool.mocktool import MockOptions
40926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class DriverTest(unittest.TestCase):
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    def make_port(self):
44926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        port = Port(MockSystemHost(), 'test', MockOptions(configuration='Release'))
451e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        port._config.build_directory = lambda configuration: '/mock-checkout/out/' + configuration
46926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return port
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    def _assert_wrapper(self, wrapper_string, expected_wrapper):
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        wrapper = Driver(self.make_port(), None, pixel_tests=False)._command_wrapper(wrapper_string)
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        self.assertEqual(wrapper, expected_wrapper)
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    def test_command_wrapper(self):
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        self._assert_wrapper(None, [])
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        self._assert_wrapper("valgrind", ["valgrind"])
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        # Validate that shlex works as expected.
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        command_with_spaces = "valgrind --smc-check=\"check with spaces!\" --foo"
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        expected_parse = ["valgrind", "--smc-check=check with spaces!", "--foo"]
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        self._assert_wrapper(command_with_spaces, expected_parse)
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    def test_test_to_uri(self):
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        port = self.make_port()
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver = Driver(port, None, pixel_tests=False)
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        self.assertEqual(driver.test_to_uri('foo/bar.html'), 'file://%s/foo/bar.html' % port.layout_tests_dir())
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        self.assertEqual(driver.test_to_uri('http/tests/foo.html'), 'http://127.0.0.1:8000/foo.html')
667242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        self.assertEqual(driver.test_to_uri('http/tests/https/bar.html'), 'https://127.0.0.1:8443/https/bar.html')
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    def test_uri_to_test(self):
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        port = self.make_port()
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver = Driver(port, None, pixel_tests=False)
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        self.assertEqual(driver.uri_to_test('file://%s/foo/bar.html' % port.layout_tests_dir()), 'foo/bar.html')
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        self.assertEqual(driver.uri_to_test('http://127.0.0.1:8000/foo.html'), 'http/tests/foo.html')
737242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        self.assertEqual(driver.uri_to_test('https://127.0.0.1:8443/https/bar.html'), 'http/tests/https/bar.html')
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    def test_read_block(self):
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        port = TestWebKitPort()
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver = Driver(port, 0, pixel_tests=False)
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver._server_process = MockServerProcess(lines=[
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            'ActualHash: foobar',
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            'Content-Type: my_type',
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            'Content-Transfer-Encoding: none',
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            "#EOF",
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ])
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        content_block = driver._read_block(0)
851e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        self.assertEqual(content_block.content, '')
86926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        self.assertEqual(content_block.content_type, 'my_type')
87926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        self.assertEqual(content_block.encoding, 'none')
88926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        self.assertEqual(content_block.content_hash, 'foobar')
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver._server_process = None
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    def test_read_binary_block(self):
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        port = TestWebKitPort()
935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver = Driver(port, 0, pixel_tests=True)
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver._server_process = MockServerProcess(lines=[
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            'ActualHash: actual',
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            'ExpectedHash: expected',
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            'Content-Type: image/png',
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            'Content-Length: 9',
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            "12345678",
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            "#EOF",
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ])
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        content_block = driver._read_block(0)
103926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        self.assertEqual(content_block.content_type, 'image/png')
104926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        self.assertEqual(content_block.content_hash, 'actual')
105926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        self.assertEqual(content_block.content, '12345678\n')
106926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        self.assertEqual(content_block.decoded_content, '12345678\n')
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver._server_process = None
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    def test_read_base64_block(self):
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        port = TestWebKitPort()
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver = Driver(port, 0, pixel_tests=True)
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver._server_process = MockServerProcess(lines=[
1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            'ActualHash: actual',
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            'ExpectedHash: expected',
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            'Content-Type: image/png',
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            'Content-Transfer-Encoding: base64',
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            'Content-Length: 12',
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            'MTIzNDU2NzgK#EOF',
1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ])
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        content_block = driver._read_block(0)
121926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        self.assertEqual(content_block.content_type, 'image/png')
122926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        self.assertEqual(content_block.content_hash, 'actual')
123926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        self.assertEqual(content_block.encoding, 'base64')
124926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        self.assertEqual(content_block.content, 'MTIzNDU2NzgK')
125926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        self.assertEqual(content_block.decoded_content, '12345678\n')
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    def test_no_timeout(self):
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        port = TestWebKitPort()
1291e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        port._config.build_directory = lambda configuration: '/mock-checkout/out/' + configuration
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver = Driver(port, 0, pixel_tests=True, no_timeout=True)
1311e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        self.assertEqual(driver.cmd_line(True, []), ['/mock-checkout/out/Release/content_shell', '--no-timeout', '--dump-render-tree', '-'])
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    def test_check_for_driver_crash(self):
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        port = TestWebKitPort()
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver = Driver(port, 0, pixel_tests=True)
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        class FakeServerProcess(object):
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            def __init__(self, crashed):
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                self.crashed = crashed
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            def pid(self):
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                return 1234
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            def name(self):
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                return 'FakeServerProcess'
1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            def has_crashed(self):
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                return self.crashed
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1501e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)            def stop(self, timeout=0.0):
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                pass
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
15307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        def assert_crash(driver, error_line, crashed, name, pid, unresponsive=False, leaked=False):
154926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            self.assertEqual(driver._check_for_driver_crash(error_line), crashed)
155926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            self.assertEqual(driver._crashed_process_name, name)
156926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            self.assertEqual(driver._crashed_pid, pid)
157926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            self.assertEqual(driver._subprocess_was_unresponsive, unresponsive)
15807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch            self.assertEqual(driver._check_for_leak(error_line), leaked)
1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            driver.stop()
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver._server_process = FakeServerProcess(False)
1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        assert_crash(driver, '', False, None, None)
1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver._crashed_process_name = None
1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver._crashed_pid = None
1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver._server_process = FakeServerProcess(False)
1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver._subprocess_was_unresponsive = False
16807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        driver._leaked = False
1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        assert_crash(driver, '#CRASHED\n', True, 'FakeServerProcess', 1234)
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver._crashed_process_name = None
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver._crashed_pid = None
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver._server_process = FakeServerProcess(False)
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver._subprocess_was_unresponsive = False
17507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        driver._leaked = False
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        assert_crash(driver, '#CRASHED - WebProcess\n', True, 'WebProcess', None)
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver._crashed_process_name = None
1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver._crashed_pid = None
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver._server_process = FakeServerProcess(False)
1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver._subprocess_was_unresponsive = False
18207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        driver._leaked = False
1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        assert_crash(driver, '#CRASHED - WebProcess (pid 8675)\n', True, 'WebProcess', 8675)
1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver._crashed_process_name = None
1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver._crashed_pid = None
1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver._server_process = FakeServerProcess(False)
1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver._subprocess_was_unresponsive = False
18907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        driver._leaked = False
1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        assert_crash(driver, '#PROCESS UNRESPONSIVE - WebProcess (pid 8675)\n', True, 'WebProcess', 8675, True)
1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver._crashed_process_name = None
1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver._crashed_pid = None
1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver._server_process = FakeServerProcess(False)
1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver._subprocess_was_unresponsive = False
19607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        driver._leaked = False
1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        assert_crash(driver, '#CRASHED - renderer (pid 8675)\n', True, 'renderer', 8675)
1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver._crashed_process_name = None
2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver._crashed_pid = None
20107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        driver._server_process = FakeServerProcess(False)
20207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        driver._subprocess_was_unresponsive = False
20307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        driver._leaked = False
20407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        assert_crash(driver, '#LEAK - renderer pid 8675 ({"numberOfLiveDocuments":[2,3]})\n', False, None, None, False, True)
20507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch
20607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        driver._crashed_process_name = None
20707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        driver._crashed_pid = None
2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver._server_process = FakeServerProcess(True)
2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver._subprocess_was_unresponsive = False
21007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        driver._leaked = False
2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        assert_crash(driver, '', True, 'FakeServerProcess', 1234)
2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    def test_creating_a_port_does_not_write_to_the_filesystem(self):
2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        port = TestWebKitPort()
2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver = Driver(port, 0, pixel_tests=True)
216926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        self.assertEqual(port._filesystem.written_files, {})
217926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        self.assertEqual(port._filesystem.last_tmpdir, None)
2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    def test_stop_cleans_up_properly(self):
2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        port = TestWebKitPort()
2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        port._server_process_constructor = MockServerProcess
2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver = Driver(port, 0, pixel_tests=True)
223c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        driver.start(True, [], None)
2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        last_tmpdir = port._filesystem.last_tmpdir
2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        self.assertNotEquals(last_tmpdir, None)
2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver.stop()
2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        self.assertFalse(port._filesystem.isdir(last_tmpdir))
2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    def test_two_starts_cleans_up_properly(self):
2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        port = TestWebKitPort()
2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        port._server_process_constructor = MockServerProcess
2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver = Driver(port, 0, pixel_tests=True)
233c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        driver.start(True, [], None)
2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        last_tmpdir = port._filesystem.last_tmpdir
2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver._start(True, [])
2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        self.assertFalse(port._filesystem.isdir(last_tmpdir))
2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    def test_start_actually_starts(self):
2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        port = TestWebKitPort()
2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        port._server_process_constructor = MockServerProcess
2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        driver = Driver(port, 0, pixel_tests=True)
242c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        driver.start(True, [], None)
2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        self.assertTrue(driver._server_process.started)
244