Aviv Keshet | 6f45526 | 2013-03-01 16:02:29 -0800 | [diff] [blame] | 1 | #pylint: disable-msg=C0111 |
Chris Masone | 8d6e641 | 2012-06-28 11:20:56 -0700 | [diff] [blame] | 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.""" |
Aviv Keshet | d7959f3 | 2013-05-17 15:58:43 -0700 | [diff] [blame] | 11 | def __init__(self, suite, data, time='LONG', expr=False, |
Fang Deng | e3bc24b | 2014-03-17 15:19:46 -0700 | [diff] [blame^] | 12 | dependencies=None, job_retries=0): |
Chris Masone | 8d6e641 | 2012-06-28 11:20:56 -0700 | [diff] [blame] | 13 | self.string = 'text-' + data |
| 14 | self.name = 'name-' + data |
Chris Masone | 8906ab1 | 2012-07-23 15:37:56 -0700 | [diff] [blame] | 15 | self.path = None # Will be set during 'parsing'. |
Chris Masone | 8d6e641 | 2012-06-28 11:20:56 -0700 | [diff] [blame] | 16 | self.data = data |
| 17 | self.suite = suite |
| 18 | self.test_type = 'Client' |
| 19 | self.experimental = expr |
Aviv Keshet | d7959f3 | 2013-05-17 15:58:43 -0700 | [diff] [blame] | 20 | if not dependencies: |
| 21 | dependencies=[] |
| 22 | self.dependencies = dependencies |
Dan Shi | ef5b53f | 2013-01-22 10:22:01 -0800 | [diff] [blame] | 23 | self.time = time |
Aviv Keshet | 6f45526 | 2013-03-01 16:02:29 -0800 | [diff] [blame] | 24 | self.retries = 0 |
Dan Shi | 6eedadb | 2013-12-04 15:38:01 -0800 | [diff] [blame] | 25 | self.sync_count = 1 |
Fang Deng | e3bc24b | 2014-03-17 15:19:46 -0700 | [diff] [blame^] | 26 | self.job_retries = job_retries |
Chris Masone | 8d6e641 | 2012-06-28 11:20:56 -0700 | [diff] [blame] | 27 | |
| 28 | |
| 29 | class FakeJob(object): |
| 30 | """Faked out RPC-client-side Job object.""" |
Aviv Keshet | 133beb1 | 2013-08-20 14:37:13 -0700 | [diff] [blame] | 31 | def __init__(self, id=0, statuses=[], hostnames=[], parent_job_id=None): |
Chris Masone | 8d6e641 | 2012-06-28 11:20:56 -0700 | [diff] [blame] | 32 | self.id = id |
Chris Masone | 517ef48 | 2012-07-23 15:36:36 -0700 | [diff] [blame] | 33 | self.hostnames = hostnames if hostnames else ['host%d' % id] |
Chris Masone | 8d6e641 | 2012-06-28 11:20:56 -0700 | [diff] [blame] | 34 | self.owner = 'tester' |
| 35 | self.name = 'Fake Job %d' % self.id |
| 36 | self.statuses = statuses |
Aviv Keshet | 133beb1 | 2013-08-20 14:37:13 -0700 | [diff] [blame] | 37 | self.parent_job_id = parent_job_id |
Chris Masone | 8d6e641 | 2012-06-28 11:20:56 -0700 | [diff] [blame] | 38 | |
| 39 | |
| 40 | class FakeHost(object): |
| 41 | """Faked out RPC-client-side Host object.""" |
Chris Masone | e99bcf2 | 2012-08-17 15:09:49 -0700 | [diff] [blame] | 42 | def __init__(self, hostname='', status='Ready', locked=False, locked_by=''): |
Chris Masone | 275ec90 | 2012-07-10 15:28:34 -0700 | [diff] [blame] | 43 | self.hostname = hostname |
Chris Masone | 8d6e641 | 2012-06-28 11:20:56 -0700 | [diff] [blame] | 44 | self.status = status |
Chris Masone | e99bcf2 | 2012-08-17 15:09:49 -0700 | [diff] [blame] | 45 | self.locked = locked |
| 46 | self.locked_by = locked_by |
Chris Masone | 8d6e641 | 2012-06-28 11:20:56 -0700 | [diff] [blame] | 47 | |
Chris Masone | 275ec90 | 2012-07-10 15:28:34 -0700 | [diff] [blame] | 48 | |
Chris Masone | 8906ab1 | 2012-07-23 15:37:56 -0700 | [diff] [blame] | 49 | def __str__(self): |
| 50 | return '%s: %s. %s%s' % ( |
| 51 | self.hostname, self.status, |
| 52 | 'Locked' if self.locked else 'Unlocked', |
| 53 | ' by %s' % self.locked_by if self.locked else '') |
| 54 | |
| 55 | |
Chris Masone | 8d6e641 | 2012-06-28 11:20:56 -0700 | [diff] [blame] | 56 | class FakeLabel(object): |
| 57 | """Faked out RPC-client-side Label object.""" |
| 58 | def __init__(self, id=0): |
| 59 | self.id = id |
| 60 | |
| 61 | |
| 62 | class FakeStatus(object): |
| 63 | """Fake replacement for server-side job status objects. |
| 64 | |
| 65 | @var status: 'GOOD', 'FAIL', 'ERROR', etc. |
| 66 | @var test_name: name of the test this is status for |
| 67 | @var reason: reason for failure, if any |
| 68 | @var aborted: present and True if the job was aborted. Optional. |
| 69 | """ |
Fang Deng | 5c50833 | 2014-03-19 10:26:00 -0700 | [diff] [blame] | 70 | def __init__(self, code, name, reason, aborted=None, |
| 71 | hostname=None, subdir='fake_Test.tag.subdir_tag', |
| 72 | job_tag='id-owner/hostname'): |
Chris Masone | 8d6e641 | 2012-06-28 11:20:56 -0700 | [diff] [blame] | 73 | self.status = code |
| 74 | self.test_name = name |
| 75 | self.reason = reason |
Chris Masone | 6ea0cad | 2012-07-02 09:43:36 -0700 | [diff] [blame] | 76 | self.hostname = hostname if hostname else 'hostless' |
Chris Masone | 8d6e641 | 2012-06-28 11:20:56 -0700 | [diff] [blame] | 77 | self.entry = {} |
| 78 | self.test_started_time = '2012-11-11 11:11:11' |
| 79 | self.test_finished_time = '2012-11-11 12:12:12' |
Fang Deng | 5c50833 | 2014-03-19 10:26:00 -0700 | [diff] [blame] | 80 | self.job_tag=job_tag |
| 81 | self.subdir=subdir |
Chris Masone | 8d6e641 | 2012-06-28 11:20:56 -0700 | [diff] [blame] | 82 | if aborted: |
| 83 | self.entry['aborted'] = True |
Chris Masone | 6ea0cad | 2012-07-02 09:43:36 -0700 | [diff] [blame] | 84 | if hostname: |
| 85 | self.entry['host'] = {'hostname': hostname} |
| 86 | |
Chris Masone | e3dcadb | 2012-07-31 12:16:19 -0700 | [diff] [blame] | 87 | |
Chris Masone | 6ea0cad | 2012-07-02 09:43:36 -0700 | [diff] [blame] | 88 | def __repr__(self): |
| 89 | return '%s\t%s\t%s: %s' % (self.status, self.test_name, self.reason, |
| 90 | self.hostname) |
Chris Masone | 8d6e641 | 2012-06-28 11:20:56 -0700 | [diff] [blame] | 91 | |
Chris Masone | e3dcadb | 2012-07-31 12:16:19 -0700 | [diff] [blame] | 92 | |
Chris Masone | 8d6e641 | 2012-06-28 11:20:56 -0700 | [diff] [blame] | 93 | def equals_record(self, status): |
| 94 | """Compares this object to a recorded status.""" |
Chris Masone | 8d6e641 | 2012-06-28 11:20:56 -0700 | [diff] [blame] | 95 | if 'aborted' in self.entry and self.entry['aborted']: |
Chris Masone | e3dcadb | 2012-07-31 12:16:19 -0700 | [diff] [blame] | 96 | return status._status == 'ABORT' |
Chris Masone | 6ea0cad | 2012-07-02 09:43:36 -0700 | [diff] [blame] | 97 | return (self.status == status._status and |
Chris Masone | e71a515 | 2012-07-31 12:16:19 -0700 | [diff] [blame] | 98 | status._test_name.endswith(self.test_name) and |
Chris Masone | 6ea0cad | 2012-07-02 09:43:36 -0700 | [diff] [blame] | 99 | self.reason == status._reason) |
Chris Masone | f63576d | 2012-06-29 11:13:31 -0700 | [diff] [blame] | 100 | |
Chris Masone | e3dcadb | 2012-07-31 12:16:19 -0700 | [diff] [blame] | 101 | |
Chris Masone | 6ea0cad | 2012-07-02 09:43:36 -0700 | [diff] [blame] | 102 | def equals_hostname_record(self, status): |
| 103 | """Compares this object to a recorded status. |
Chris Masone | f63576d | 2012-06-29 11:13:31 -0700 | [diff] [blame] | 104 | |
Chris Masone | 6ea0cad | 2012-07-02 09:43:36 -0700 | [diff] [blame] | 105 | Expects the test name field of |status| to contain |self.hostname|. |
| 106 | """ |
| 107 | return (self.status == status._status and |
| 108 | self.hostname in status._test_name and |
| 109 | self.reason == status._reason) |
Alex Miller | 176a29f | 2012-07-30 14:03:55 -0700 | [diff] [blame] | 110 | |
| 111 | |
| 112 | def record_all(self, record): |
| 113 | pass |
| 114 | |
| 115 | |
| 116 | def is_good(self): |
| 117 | pass |
| 118 | |
| 119 | def name(self): |
| 120 | return self.test_name |