blob: ee8cf9f34401e66a62f7696e47faa316b7d89ef3 [file] [log] [blame]
# Copyright (c) 2012 The Chromium OS 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 logging
import os
from autotest_lib.client.bin import utils
from autotest_lib.client.common_lib import error
from autotest_lib.client.cros import cros_logging, cros_ui_test
class logging_AsanCrash(cros_ui_test.UITest):
version = 1
auto_login = False
def run_once(self):
import pyauto
if not 'asan' in utils.read_file('/etc/session_manager_use_flags.txt'):
raise error.TestFail('Current image not built with ASAN')
pid = self.pyauto.GetBrowserInfo()['browser_pid']
asan_log_name = '/var/log/chrome/asan_log.%d' % pid
logging.info('Browser PID under pyauto control is %d. '
'So ASAN log is expected at %s.' % (pid, asan_log_name))
logging.info('Initiate simulating memory bug to be caught by ASAN...')
self.pyauto.SimulateAsanMemoryBug()
utils.poll_for_condition(
lambda: os.path.isfile(asan_log_name),
timeout=10,
exception=error.TestFail(
'Found no asan log file %s during 10s' % asan_log_name))
ui_log = cros_logging.LogReader(asan_log_name)
ui_log.read_all_logs()
# We must wait some time until memory bug is simulated (happens
# immediately after the return on the call) and caught by ASAN.
try:
utils.poll_for_condition(
lambda: ui_log.can_find('ERROR: AddressSanitizer'),
timeout=10,
exception=error.TestFail(
'Found no asan log message about Address Sanitizer catch'))
utils.poll_for_condition(
lambda: ui_log.can_find("'testarray'"),
timeout=10,
exception=error.TestFail(
'ASAN caught bug but did not mentioned the cause in log'))
except:
logging.debug('ASAN log content: ' + ui_log.get_logs())
raise
# The cbuildbot logic will look for asan logs and process them.
# Remove the simulated log file to avoid that.
os.remove(asan_log_name)