1"""The harness interface
2
3The interface between the client and the server when hosted.
4"""
5
6__author__ = """Copyright Andy Whitcroft 2006"""
7
8import os, sys, logging
9import common
10
11class harness(object):
12    """The NULL server harness
13
14    Properties:
15            job
16                    The job object for this job
17    """
18
19    def __init__(self, job):
20        """
21                job
22                        The job object for this job
23        """
24        self.setup(job)
25
26
27    def setup(self, job):
28        """
29                job
30                        The job object for this job
31        """
32        self.job = job
33
34        configd = os.path.join(os.environ['AUTODIR'], 'configs')
35        if os.path.isdir(configd):
36            (name, dirs, files) = os.walk(configd).next()
37            job.config_set('kernel.default_config_set',
38                           [ configd + '/' ] + files)
39
40
41    def run_start(self):
42        """A run within this job is starting"""
43        pass
44
45
46    def run_pause(self):
47        """A run within this job is completing (expect continue)"""
48        pass
49
50
51    def run_reboot(self):
52        """A run within this job is performing a reboot
53           (expect continue following reboot)
54        """
55        pass
56
57
58    def run_abort(self):
59        """A run within this job is aborting. It all went wrong"""
60        pass
61
62
63    def run_complete(self):
64        """A run within this job is completing (all done)"""
65        pass
66
67
68    def run_test_complete(self):
69        """A test run by this job is complete. Note that if multiple
70        tests are run in parallel, this will only be called when all
71        of the parallel runs complete."""
72        pass
73
74
75    def test_status(self, status, tag):
76        """A test within this job is completing"""
77        pass
78
79
80    def test_status_detail(self, code, subdir, operation, status, tag,
81                           optional_fields):
82        """A test within this job is completing (detail)"""
83        pass
84
85
86def select(which, job, harness_args):
87    if not which:
88        which = 'standalone'
89
90    logging.debug('Selected harness: %s' % which)
91
92    harness_name = 'harness_%s' % which
93    harness_module = common.setup_modules.import_module(harness_name,
94                                                        'autotest_lib.client.bin')
95    harness_instance = getattr(harness_module, harness_name)(job, harness_args)
96
97    return harness_instance
98