summaryrefslogtreecommitdiff
path: root/Tools/Scripts/webkitpy/common/system/crashlogs_unittest.py
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/Scripts/webkitpy/common/system/crashlogs_unittest.py')
-rw-r--r--Tools/Scripts/webkitpy/common/system/crashlogs_unittest.py316
1 files changed, 0 insertions, 316 deletions
diff --git a/Tools/Scripts/webkitpy/common/system/crashlogs_unittest.py b/Tools/Scripts/webkitpy/common/system/crashlogs_unittest.py
deleted file mode 100644
index 48034e806..000000000
--- a/Tools/Scripts/webkitpy/common/system/crashlogs_unittest.py
+++ /dev/null
@@ -1,316 +0,0 @@
-# Copyright (C) 2011 Google Inc. All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
-# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
-# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-import unittest2 as unittest
-
-from webkitpy.common.system.crashlogs import CrashLogs
-from webkitpy.common.system.filesystem_mock import MockFileSystem
-from webkitpy.common.system.systemhost import SystemHost
-from webkitpy.common.system.systemhost_mock import MockSystemHost
-from webkitpy.thirdparty.mock import Mock
-
-# Needed to support Windows port tests
-from webkitpy.port.win import WinPort
-
-def make_mock_crash_report_darwin(process_name, pid):
- return """Process: {process_name} [{pid}]
-Path: /Volumes/Data/slave/snowleopard-intel-release-tests/build/WebKitBuild/Release/{process_name}
-Identifier: {process_name}
-Version: ??? (???)
-Code Type: X86-64 (Native)
-Parent Process: Python [2578]
-
-Date/Time: 2011-12-07 13:27:34.816 -0800
-OS Version: Mac OS X 10.6.8 (10K549)
-Report Version: 6
-
-Interval Since Last Report: 1660 sec
-Crashes Since Last Report: 1
-Per-App Crashes Since Last Report: 1
-Anonymous UUID: 507D4EEB-9D70-4E2E-B322-2D2F0ABFEDC0
-
-Exception Type: EXC_BREAKPOINT (SIGTRAP)
-Exception Codes: 0x0000000000000002, 0x0000000000000000
-Crashed Thread: 0
-
-Dyld Error Message:
- Library not loaded: /Volumes/Data/WebKit-BuildSlave/snowleopard-intel-release/build/WebKitBuild/Release/WebCore.framework/Versions/A/WebCore
- Referenced from: /Volumes/Data/slave/snowleopard-intel-release/build/WebKitBuild/Release/WebKit.framework/Versions/A/WebKit
- Reason: image not found
-
-Binary Images:
- 0x7fff5fc00000 - 0x7fff5fc3be0f dyld 132.1 (???) <29DECB19-0193-2575-D838-CF743F0400B2> /usr/lib/dyld
-
-System Profile:
-Model: Xserve3,1, BootROM XS31.0081.B04, 8 processors, Quad-Core Intel Xeon, 2.26 GHz, 6 GB, SMC 1.43f4
-Graphics: NVIDIA GeForce GT 120, NVIDIA GeForce GT 120, PCIe, 256 MB
-Memory Module: global_name
-Network Service: Ethernet 2, Ethernet, en1
-PCI Card: NVIDIA GeForce GT 120, sppci_displaycontroller, MXM-Slot
-Serial ATA Device: OPTIARC DVD RW AD-5670S
-""".format(process_name=process_name, pid=pid)
-
-
-def make_mock_crash_report_win(process_name, pid):
- return """Opened log file 'C:\Projects\WebKit\OpenSource\WebKitBuild\Release\bin32\layout-test-results\CrashLog_1d58_2013-06-03_12-21-20-110.txt'
-0:000> .srcpath "C:\Projects\WebKit\OpenSource"
-Source search path is: C:\Projects\WebKit\OpenSource
-0:000> !analyze -vv
-*******************************************************************************
-* *
-* Exception Analysis *
-* *
-*******************************************************************************
-
-*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\Projects\WebKit\OpenSource\WebKitBuild\Release\bin32\libdispatch.dll -
-*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\Windows\SYSTEM32\atiumdag.dll -
-
-FAULTING_IP:
-JavaScriptCore!JSC::JSActivation::getOwnPropertySlot+0 [c:\projects\webkit\opensource\source\javascriptcore\runtime\jsactivation.cpp @ 146]
-01e3d070 55 push ebp
-
-EXCEPTION_RECORD: 00092cc8 -- (.exr 0x92cc8)
-.exr 0x92cc8
-ExceptionAddress: 01e3d070 (JavaScriptCore!JSC::JSActivation::getOwnPropertySlot)
- ExceptionCode: c00000fd (Stack overflow)
- ExceptionFlags: 00000000
-NumberParameters: 2
- Parameter[0]: 00000001
- Parameter[1]: 00092ffc
-
-FAULTING_THREAD: 00000e68
-PROCESS_NAME: {process_name}
-ERROR_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%08lx referenced memory at 0x%08lx. The memory could not be %s.
-EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%08lx referenced memory at 0x%08lx. The memory could not be %s.
-EXCEPTION_CODE_STR: c0000005
-EXCEPTION_PARAMETER1: 00000000
-EXCEPTION_PARAMETER2: 00090000
-READ_ADDRESS: 00090000
-
-FOLLOWUP_IP:
-JavaScriptCore!JSC::JSActivation::getOwnPropertySlot+0 [c:\projects\webkit\opensource\source\javascriptcore\runtime\jsactivation.cpp @ 146]
-01e3d070 55 push ebp
-
-WATSON_BKT_PROCSTAMP: 51a8f979
-WATSON_BKT_MODULE: MSVCR100.dll
-WATSON_BKT_MODVER: 10.0.40219.325
-WATSON_BKT_MODSTAMP: 4df2be1e
-WATSON_BKT_MODOFFSET: 160d7
-MODULE_VER_PRODUCT: Microsoft(R) Visual Studio(R) 2010
-BUILD_VERSION_STRING: 6.2.9200.16384 (win8_rtm.120725-1247)
-NTGLOBALFLAG: 0
-APPLICATION_VERIFIER_FLAGS: 0
-APP: {process_name}
-
-ANALYSIS_SESSION_HOST: FULGBR-PC
-
-ANALYSIS_SESSION_TIME: 06-03-2013 12:21:20.0111
-
-CONTEXT: 00092d18 -- (.cxr 0x92d18)
-.cxr 0x92d18
-eax=01e3d070 ebx=000930bc ecx=7fe03ed0 edx=0751e168 esi=07a7ff98 edi=0791ff78
-eip=01e3d070 esp=00093000 ebp=0009306c iopl=0 nv up ei ng nz ac po cy
-cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00210293
-JavaScriptCore!JSC::JSActivation::getOwnPropertySlot:
-01e3d070 55 push ebp
-.cxr
-Resetting default scope
-
-RECURRING_STACK: From frames 0x14 to 0x1d
-
-THREAD_ATTRIBUTES:
-
-[ GLOBAL ]
-
- Global PID: [{pid}]
- Global Thread_Count: [19]
- Global PageSize: [4096]
- Global ModList_SHA1_Hash: [aacef4e7e83b9bddc9cd0cc094dac88d531ea4a3]
- Global CommandLine: [C:\Projects\WebKit\OpenSource\WebKitBuild\Release\bin32\{process_name} -]
- Global Desktop_Name: [Winsta0\Default]
- Global ProcessName: [{process_name}]
- Global Debugger_CPU_Architecture: [X86]
- Global CPU_ProcessorCount: [24]
- Global CPU_MHZ: [1596]
- Global CPU_Architecture: [X86]
- Global CPU_Family: [6]
- Global CPU_Model: [12]
- Global CPU_Stepping: [2]
- Global CPU_VendorString: [GenuineIntel]
- Global LoadedModule_Count: [82]
- Global ProcessBeingDebugged
- Global GFlags: [0]
- Global Application_Verifer_Flags: [0]
- Global FinalExh: [2012093943]
- Global SystemUpTime: [3 days 23:52:56.000]
- Global SystemUpTime: [345176]
- Global ProcessUpTime: [0 days 0:00:00.000]
- Global ProcessUpTime: [0]
- Global CurrentTimeDate: [Mon Jun 3 12:21:20.000 2013 (UTC - 7:00)]
- Global CurrentTimeDate: [1370287280]
- Global ProductType: [1]
- Global SuiteMask: [272]
- Global ApplicationName: [{process_name}]
- Global ASLR_Enabled
- Global SafeSEH_Enabled
-
-FAULT_INSTR_CODE: 83ec8b55
-
-FAULTING_SOURCE_LINE: c:\projects\webkit\opensource\source\javascriptcore\runtime\jsactivation.cpp
-
-FAULTING_SOURCE_FILE: c:\projects\webkit\opensource\source\javascriptcore\runtime\jsactivation.cpp
-
-FAULTING_SOURCE_LINE_NUMBER: 146
-
-SYMBOL_STACK_INDEX: 0
-
-SYMBOL_NAME: javascriptcore!JSC::JSActivation::getOwnPropertySlot+92ffc
-
-FOLLOWUP_NAME: MachineOwner
-
-MODULE_NAME: JavaScriptCore
-
-IMAGE_NAME: JavaScriptCore.dll
-
-DEBUG_FLR_IMAGE_TIMESTAMP: 51ace473
-
-STACK_COMMAND: .cxr 00092D18 ; kb ; dps 93000 ; kb
-
-FAILURE_BUCKET_ID: STACK_OVERFLOW_c0000005_JavaScriptCore.dll!JSC::JSActivation::getOwnPropertySlot
-
-BUCKET_ID: APPLICATION_FAULT_STACK_OVERFLOW_INVALID_POINTER_READ_javascriptcore!JSC::JSActivation::getOwnPropertySlot+92ffc
-
-ANALYSIS_SESSION_ELAPSED_TIME: 18df
-
-Followup: MachineOwner
----------
-
-0:000> ~*kpn
-
-. 0 Id: 18e0.e68 Suspend: 1 Teb: 7ffdd000 Unfrozen
- # ChildEBP RetAddr
-00 00092a08 7261ece1 MSVCR100!_alloca_probe+0x27
-01 00092a4c 7261a5d0 MSVCR100!_write+0x95
-02 00092a6c 7261ef6b MSVCR100!_flush+0x3b
-03 00092a7c 7261ef1c MSVCR100!_fflush_nolock+0x1c
-04 00092ab4 1000f814 MSVCR100!fflush+0x30
-05 00092ac8 77c0084e DumpRenderTree_10000000!exceptionFilter(struct _EXCEPTION_POINTERS * __formal = 0x852ac807)+0x24 [c:\projects\webkit\opensource\tools\dumprendertree\win\dumprendertree.cpp @ 1281]
-06 00092b60 77e8bf2c KERNELBASE!UnhandledExceptionFilter+0x164
-07 00092b68 77e530b4 ntdll!__RtlUserThreadStart+0x57
-08 00092b7c 77e15246 ntdll!_EH4_CallFilterFunc+0x12
-09 00092ba4 77e151b1 ntdll!_except_handler4_common+0x8e
-0a 00092bc4 77e52e71 ntdll!_except_handler4+0x20
-0b 00092be8 77e52e43 ntdll!ExecuteHandler2+0x26
-0c 00092cb0 77e52cbb ntdll!ExecuteHandler+0x24
-0d 00092cb0 01e3d070 ntdll!KiUserExceptionDispatcher+0xf
-0e 00092ffc 01e67d25 JavaScriptCore!JSC::JSActivation::getOwnPropertySlot(class JSC::JSCell * cell = 0x07a7ff98, class JSC::ExecState * exec = 0x0751e168, class JSC::PropertyName propertyName = class JSC::PropertyName, class JSC::PropertySlot * slot = 0x000930bc) [c:\projects\webkit\opensource\source\javascriptcore\runtime\jsactivation.cpp @ 146]
-0f 0009306c 01e68837 JavaScriptCore!JSC::JSScope::resolveContainingScopeInternal<1,2>(class JSC::ExecState * callFrame = 0x0751e168, class JSC::Identifier * identifier = 0x7fe0ebc0, class JSC::PropertySlot * slot = 0x7fe03ed0, class WTF::Vector<JSC::ResolveOperation,0,WTF::CrashOnOverflow> * operations = 0x7fda16c0, struct JSC::PutToBaseOperation * putToBaseOperation = 0x00000000, bool __formal = false)+0x205 [c:\projects\webkit\opensource\source\javascriptcore\runtime\jsscope.cpp @ 247]
-10 00093090 01e65860 JavaScriptCore!JSC::JSScope::resolveContainingScope<1>(class JSC::ExecState * callFrame = 0x0751e168, class JSC::Identifier * identifier = 0x7fe0ebc0, class JSC::PropertySlot * slot = 0x000930bc, class WTF::Vector<JSC::ResolveOperation,0,WTF::CrashOnOverflow> * operations = 0x7fda16c0, struct JSC::PutToBaseOperation * putToBaseOperation = 0x00000000, bool isStrict = false)+0x27 [c:\projects\webkit\opensource\source\javascriptcore\runtime\jsscope.cpp @ 427]
-11 00093104 01dceeff JavaScriptCore!JSC::JSScope::resolve(class JSC::ExecState * callFrame = 0x0751e168, class JSC::Identifier * identifier = 0x7fe0ebc0, class WTF::Vector<JSC::ResolveOperation,0,WTF::CrashOnOverflow> * operations = 0x7fda16c0)+0xc0 [c:\projects\webkit\opensource\source\javascriptcore\runtime\jsscope.cpp @ 447]
-
-0:000> q
-quit:
-""".format(process_name=process_name, pid=pid)
-
-class CrashLogsTest(unittest.TestCase):
- def test_find_log_darwin(self):
- if not SystemHost().platform.is_mac():
- return
-
- older_mock_crash_report = make_mock_crash_report_darwin('DumpRenderTree', 28528)
- mock_crash_report = make_mock_crash_report_darwin('DumpRenderTree', 28530)
- newer_mock_crash_report = make_mock_crash_report_darwin('DumpRenderTree', 28529)
- other_process_mock_crash_report = make_mock_crash_report_darwin('FooProcess', 28527)
- misformatted_mock_crash_report = 'Junk that should not appear in a crash report' + make_mock_crash_report_darwin('DumpRenderTree', 28526)[200:]
- files = {}
- files['/Users/mock/Library/Logs/DiagnosticReports/DumpRenderTree_2011-06-13-150718_quadzen.crash'] = older_mock_crash_report
- files['/Users/mock/Library/Logs/DiagnosticReports/DumpRenderTree_2011-06-13-150719_quadzen.crash'] = mock_crash_report
- files['/Users/mock/Library/Logs/DiagnosticReports/DumpRenderTree_2011-06-13-150720_quadzen.crash'] = newer_mock_crash_report
- files['/Users/mock/Library/Logs/DiagnosticReports/DumpRenderTree_2011-06-13-150721_quadzen.crash'] = None
- files['/Users/mock/Library/Logs/DiagnosticReports/DumpRenderTree_2011-06-13-150722_quadzen.crash'] = other_process_mock_crash_report
- files['/Users/mock/Library/Logs/DiagnosticReports/DumpRenderTree_2011-06-13-150723_quadzen.crash'] = misformatted_mock_crash_report
- filesystem = MockFileSystem(files)
- crash_logs = CrashLogs(MockSystemHost(filesystem=filesystem))
- log = crash_logs.find_newest_log("DumpRenderTree")
- self.assertMultiLineEqual(log, newer_mock_crash_report)
- log = crash_logs.find_newest_log("DumpRenderTree", 28529)
- self.assertMultiLineEqual(log, newer_mock_crash_report)
- log = crash_logs.find_newest_log("DumpRenderTree", 28530)
- self.assertMultiLineEqual(log, mock_crash_report)
- log = crash_logs.find_newest_log("DumpRenderTree", 28531)
- self.assertIsNone(log)
- log = crash_logs.find_newest_log("DumpRenderTree", newer_than=1.0)
- self.assertIsNone(log)
-
- def bad_read(path):
- raise IOError('IOError: No such file or directory')
-
- def bad_mtime(path):
- raise OSError('OSError: No such file or directory')
-
- filesystem.read_text_file = bad_read
- log = crash_logs.find_newest_log("DumpRenderTree", 28531, include_errors=True)
- self.assertIn('IOError: No such file or directory', log)
-
- filesystem = MockFileSystem(files)
- crash_logs = CrashLogs(MockSystemHost(filesystem=filesystem))
- filesystem.mtime = bad_mtime
- log = crash_logs.find_newest_log("DumpRenderTree", newer_than=1.0, include_errors=True)
- self.assertIn('OSError: No such file or directory', log)
-
- def test_find_log_win(self):
- if not SystemHost().platform.is_win():
- return
-
- older_mock_crash_report = make_mock_crash_report_win('DumpRenderTree', 28528)
- mock_crash_report = make_mock_crash_report_win('DumpRenderTree', 28530)
- newer_mock_crash_report = make_mock_crash_report_win('DumpRenderTree', 28529)
- other_process_mock_crash_report = make_mock_crash_report_win('FooProcess', 28527)
- misformatted_mock_crash_report = 'Junk that should not appear in a crash report' + make_mock_crash_report_win('DumpRenderTree', 28526)[200:]
- files = {}
- files['~/CrashLog_1d58_2013-06-03_12-21-20-110.txt'] = older_mock_crash_report
- files['~/CrashLog_abcd_2013-06-03_12-22-19-129.txt'] = mock_crash_report
- files['~/CrashLog_2eff_2013-06-03_12-23-20-150.txt'] = newer_mock_crash_report
- files['~/CrashLog_31a0_2013-06-03_12-24-22-119.txt'] = None
- files['~/CrashLog_01a3_2013-06-03_12-25-23-120.txt'] = other_process_mock_crash_report
- files['~/CrashLog_aadd_2013-06-03_12-26-24-121.txt'] = misformatted_mock_crash_report
- filesystem = MockFileSystem(files)
- mock_host = MockSystemHost(os_name='win', filesystem=filesystem)
- crash_logs = CrashLogs(mock_host, "~")
-
- log = crash_logs.find_newest_log("DumpRenderTree", 28529)
- self.assertMultiLineEqual(log, newer_mock_crash_report)
- log = crash_logs.find_newest_log("DumpRenderTree", 28530)
- self.assertMultiLineEqual(log, mock_crash_report)
- log = crash_logs.find_newest_log("DumpRenderTree", 28531)
- self.assertIsNone(log)
- log = crash_logs.find_newest_log("DumpRenderTree", newer_than=1.0)
- self.assertIsNone(log)
-
- def bad_read(path):
- raise IOError('IOError: No such file or directory')
-
- filesystem.read_text_file = bad_read
- filesystem.read_binary_file = bad_read
- log = crash_logs.find_newest_log("DumpRenderTree", 28531, include_errors=True)
- self.assertIn('IOError: No such file or directory', log)