# Copyright (c) 2010 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 os
from datetime import datetime
from autotest_lib.client.bin import boottool, utils
from autotest_lib.client.bin.job import base_client_job
from autotest_lib.client.common_lib import error
from autotest_lib.client.cros import cros_logging
LAST_BOOT_TAG = object()
class site_job(base_client_job):
def __init__(self, *args, **kwargs):
base_client_job.__init__(self, *args, **kwargs)
def _runtest(self, url, timeout, tag, args, dargs):
# this replaced base_client_job._runtest, which is called by
# base_client_job.runtest.group_func (see job.py)
try:
self.last_error = None
base_client_job._runtest(self, url, timeout,tag, args, dargs)
except error.TestBaseException, detail:
self.last_error = detail
raise
def run_test(self, url, *args, **dargs):
log_pauser = cros_logging.LogRotationPauser()
passed = False
try:
log_pauser.begin()
passed = base_client_job.run_test(self, url, *args, **dargs)
if not passed:
# Save the VM state immediately after the test failure.
# This is a NOOP if the the test isn't running in a VM or
# if the VM is not properly configured to save state.
group, testname = self.pkgmgr.get_package_name(url, 'test')
now = datetime.now().strftime('%I:%M:%S.%f')
checkpoint_name = '%s-%s' % (testname, now)
utils.save_vm_state(checkpoint_name)
finally:
log_pauser.end()
return passed
def reboot(self, tag=LAST_BOOT_TAG):
if tag == LAST_BOOT_TAG:
tag = self.last_boot_tag
else:
self.last_boot_tag = tag
self.reboot_setup()
self.harness.run_reboot()
# sync first, so that a sync during shutdown doesn't time out
utils.system('sync; sync', ignore_status=True)
utils.system('reboot </dev/null >/dev/null 2>&1 &')
self.quit()
def require_gcc(self):
return False