blob: 9e20b6a00e15a94560d26010b10d68febdbd57e5 [file] [log] [blame]
import logging
from autotest_lib.client.common_lib.cros import crash_detector
from autotest_lib.client.common_lib.cros.cfm.usb import usb_device_collector
from autotest_lib.client.common_lib.cros.cfm.usb import usb_port_manager
from autotest_lib.server.cros.cfm import cfm_base_test
from autotest_lib.server.cros.cfm.configurable_test import action_context
from autotest_lib.server.cros.cfm.utils import bond_http_api
from autotest_lib.server.cros.cfm.utils import perf_metrics_collector
class TestRunner(object):
"""
Runs a test.
"""
def __init__(self, context):
"""
Initializes.
@param context ActionContext providing the dependencies for the test.
"""
self.context = context
def run_test(self, cfm_test):
"""
Runs one test.
@param cfm_test CfmTest instance to execute.
"""
logging.info('RUNNING:\n%s', str(cfm_test))
cfm_test.scenario.execute(self.context)
class HostFileContentsCollector(object):
"""
File contents collector that executes commands against the host.
"""
def __init__(self, host):
"""
Initializes with a host.
@param host a host object as available from CfmBaseTest.host
"""
self.host = host
def collect_file_contents(self, path):
"""
Returns the file contents of the file at the specified path.
@param path The path of the file.
@returns The contents of the file
"""
return self.host.run_output('cat "%s"' % path)
class ConfigurableCfmTest(cfm_base_test.CfmBaseTest):
"""
Base class for the actual Autotests that execute configurable CFM tests.
"""
version = 1
def initialize(self, host, cfm_test):
"""
Initializes the test.
@param host The host the test is run against
@param cfm_test CfmTest instance to execute.
"""
(super(ConfigurableCfmTest, self)
.initialize(host,
cfm_test.configuration.run_test_only,
cfm_test.configuration.skip_enrollment))
self.cfm_test = cfm_test
device_collector = usb_device_collector.UsbDeviceCollector(host)
port_manager = usb_port_manager.UsbPortManager(host)
crash_file_detector = crash_detector.CrashDetector(host)
# Call get_new_crash_files() once. This records the current crash
# files so that subsequent calls only check the delta, i.e.
# new crash files from here on.
crash_file_detector.get_new_crash_files()
# self.cfm_facade is inherited from CfmBaseTest.
context = action_context.ActionContext(
cfm_facade=self.cfm_facade,
file_contents_collector=HostFileContentsCollector(host),
host=host,
usb_device_collector=device_collector,
usb_port_manager=port_manager,
crash_detector=crash_file_detector,
perf_metrics_collector=self._create_perf_metrics_collector(),
bond_api=bond_http_api.BondHttpApi())
self.test_runner = TestRunner(context)
def _create_perf_metrics_collector(self):
system_facade = self._facade_factory.create_system_facade()
return perf_metrics_collector.PerfMetricsCollector(system_facade,
self.cfm_facade, self.output_perf_value)
def run_once(self):
"""
Runs the test.
"""
self.test_runner.run_test(self.cfm_test)