69 lines
2.2 KiB
Python
Executable file
69 lines
2.2 KiB
Python
Executable file
# 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
|