#!/usr/bin/env python
# Copyright (c) 2012 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import glob
import os
import pyauto_functional # Must be imported before pyauto
import pyauto
import pyauto_utils
class CrashReporterTest(pyauto.PyUITest):
"""TestCase for Crash Reporter."""
def testRendererCrash(self):
"""Verify renderer's crash reporting.
Attempts to crash, and then checks that crash dumps get generated. Does
not actually test crash reports on the server.
"""
# Bail out if not a branded build
properties = self.GetBrowserInfo()['properties']
if properties['branding'] != 'Google Chrome':
return
# Make sure Chrome minidumps are enabled on Chrome OS
if self.IsChromeOS():
minidumps_file = '/mnt/stateful_partition/etc/enable_chromium_minidumps'
assert os.path.exists(minidumps_file), 'Chrome minidumps are not enabled.'
breakpad_folder = properties['DIR_CRASH_DUMPS']
self.assertTrue(breakpad_folder, 'Cannot figure crash dir')
unused = pyauto_utils.ExistingPathReplacer(path=breakpad_folder)
# If the temp dir was created as root on chromeos, make sure chronos can
# write to it
if self.IsChromeOS() and os.geteuid() == 0:
os.chown(breakpad_folder, 1000, 1000)
self.NavigateToURL('about:crash') # Trigger renderer crash
dmp_files = glob.glob(os.path.join(breakpad_folder, '*.dmp'))
self.assertEqual(1, len(dmp_files))
if __name__ == '__main__':
pyauto_functional.Main()