Home | History | Annotate | Download | only in dynamic_suite
      1 #pylint: disable-msg=C0111
      2 # Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
      3 # Use of this source code is governed by a BSD-style license that can be
      4 # found in the LICENSE file.
      5 
      6 """Fakes for dynamic_suite-related unit tests."""
      7 
      8 
      9 class FakeControlData(object):
     10     """A fake parsed control file data structure."""
     11     def __init__(self, suite, attributes, data, time='LONG', expr=False,
     12                  dependencies=None, job_retries=0):
     13         self.string = 'text-' + data
     14         self.name = 'name-' + data
     15         self.path = None  # Will be set during 'parsing'.
     16         self.data = data
     17         self.suite = suite
     18         self.attributes = attributes
     19         self.test_type = 'Client'
     20         self.experimental = expr
     21         if not dependencies:
     22             dependencies=[]
     23         self.dependencies = dependencies
     24         self.time = time
     25         self.retries = 0
     26         self.sync_count = 1
     27         self.job_retries = job_retries
     28         self.bug_template = {}
     29         self.require_ssp = None
     30 
     31 
     32 class FakeJob(object):
     33     """Faked out RPC-client-side Job object."""
     34     def __init__(self, id=0, statuses=[], hostnames=[], parent_job_id=None):
     35         self.id = id
     36         self.hostnames = hostnames if hostnames else ['host%d' % id]
     37         self.owner = 'tester'
     38         self.name = 'Fake Job %d' % self.id
     39         self.statuses = statuses
     40         self.parent_job_id = parent_job_id
     41 
     42 
     43 class FakeHost(object):
     44     """Faked out RPC-client-side Host object."""
     45     def __init__(self, hostname='', status='Ready', locked=False, locked_by=''):
     46         self.hostname = hostname
     47         self.status = status
     48         self.locked = locked
     49         self.locked_by = locked_by
     50 
     51 
     52     def __str__(self):
     53         return '%s: %s.  %s%s' % (
     54             self.hostname, self.status,
     55             'Locked' if self.locked else 'Unlocked',
     56             ' by %s' % self.locked_by if self.locked else '')
     57 
     58 
     59 class FakeLabel(object):
     60     """Faked out RPC-client-side Label object."""
     61     def __init__(self, id=0):
     62         self.id = id
     63 
     64 
     65 class FakeStatus(object):
     66     """Fake replacement for server-side job status objects.
     67 
     68     @var status: 'GOOD', 'FAIL', 'ERROR', etc.
     69     @var test_name: name of the test this is status for
     70     @var reason: reason for failure, if any
     71     @var aborted: present and True if the job was aborted.  Optional.
     72     """
     73     def __init__(self, code, name, reason, aborted=None,
     74                  hostname=None, subdir='fake_Test.tag.subdir_tag',
     75                  job_tag='id-owner/hostname'):
     76         self.status = code
     77         self.test_name = name
     78         self.reason = reason
     79         self.hostname = hostname if hostname else 'hostless'
     80         self.entry = {}
     81         self.test_started_time = '2012-11-11 11:11:11'
     82         self.test_finished_time = '2012-11-11 12:12:12'
     83         self.job_tag=job_tag
     84         self.subdir=subdir
     85         if aborted:
     86             self.entry['aborted'] = True
     87         if hostname:
     88             self.entry['host'] = {'hostname': hostname}
     89 
     90 
     91     def __repr__(self):
     92         return '%s\t%s\t%s: %s' % (self.status, self.test_name, self.reason,
     93                                    self.hostname)
     94 
     95 
     96     def equals_record(self, status):
     97         """Compares this object to a recorded status."""
     98         if 'aborted' in self.entry and self.entry['aborted']:
     99             return status._status == 'ABORT'
    100         return (self.status == status._status and
    101                 status._test_name.endswith(self.test_name) and
    102                 self.reason == status._reason)
    103 
    104 
    105     def equals_hostname_record(self, status):
    106         """Compares this object to a recorded status.
    107 
    108         Expects the test name field of |status| to contain |self.hostname|.
    109         """
    110         return (self.status == status._status and
    111                 self.hostname in status._test_name and
    112                 self.reason == status._reason)
    113 
    114 
    115     def record_all(self, record):
    116         pass
    117 
    118 
    119     def is_good(self):
    120         pass
    121 
    122     def name(self):
    123         return self.test_name
    124