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