# Copyright 2016 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 time import common from autotest_lib.client.common_lib import error from autotest_lib.server import test # Process to kill for log-generation purposes. TARGET_PROCESS = 'weaved' # Number of seconds to wait for host.run commands to timeout. COMMAND_TIMEOUT_SECONDS = 10 # Number of times to retry the command the ls command to find logs. LOG_LIST_RETRIES = 5 class brillo_CrashLogging(test.test): """Confirm that crash logs are generated for native crashes.""" version = 1 def run_once(self, host=None): """Confirm that crash logs are generated for native crashes. @param host: host object representing the device under test. """ if host is None: raise error.TestFail('brillo_Crashlogging test executed without ' 'a host') self.host = host # Remove any existing crash logs. self.host.run('rm /data/misc/crash_reporter/crash/*', timeout=COMMAND_TIMEOUT_SECONDS, ignore_status=True) # Find and kill a process. result = self.host.run('pgrep %s' % TARGET_PROCESS, timeout=COMMAND_TIMEOUT_SECONDS) pid = result.stdout.strip() if not len(pid): raise error.TestFail('No %s process found to kill' % TARGET_PROCESS) self.host.run('kill -SIGSEGV %s' % pid, timeout=COMMAND_TIMEOUT_SECONDS) # If the process links against bionic, then the first kill will be # caught by bionic, so issue the command twice. self.host.run('kill -SIGSEGV %s' % pid, timeout=COMMAND_TIMEOUT_SECONDS, ignore_status=True) logs = None for _ in xrange(LOG_LIST_RETRIES): try: logs = self.host.run_output( 'ls /data/misc/crash_reporter/crash', timeout=COMMAND_TIMEOUT_SECONDS).split() except (error.GenericHostRunError, error.AutoservSSHTimeout, error.CmdTimeoutError): raise error.TestFail('No crash logs were created because of a ' 'host error or because the directory ' 'where crash logs are written to does not ' 'exist on the DUT.') if logs: break time.sleep(1) if not logs: raise error.TestFail('No crash logs were created.')