[autotest] Fix unittests broken by recording-change CLs
I'm a bad, bad person and broke my own unit tests with my most recent commits.
Fixed them here.
BUG=chromium-os:22060
TEST=run dynamic_suite_unittest.py
Change-Id: I8595a78acc8905cb3d3d8edd9f99068b318cf022
Reviewed-on: https://gerrit.chromium.org/gerrit/26460
Tested-by: Chris Masone <cmasone@chromium.org>
Reviewed-by: Scott Zawalski <scottz@chromium.org>
Commit-Ready: Chris Masone <cmasone@chromium.org>
diff --git a/server/cros/dynamic_suite_unittest.py b/server/cros/dynamic_suite_unittest.py
index d891c16..487ad35 100755
--- a/server/cros/dynamic_suite_unittest.py
+++ b/server/cros/dynamic_suite_unittest.py
@@ -21,10 +21,52 @@
from autotest_lib.server.cros import job_status
from autotest_lib.server.cros.dynamic_suite_fakes import FakeControlData
from autotest_lib.server.cros.dynamic_suite_fakes import FakeHost, FakeJob
-from autotest_lib.server.cros.dynamic_suite_fakes import FakeLabel
+from autotest_lib.server.cros.dynamic_suite_fakes import FakeLabel, FakeResult
from autotest_lib.server import frontend
+class StatusContains(mox.Comparator):
+ @staticmethod
+ def CreateFromStrings(status=None, test_name=None, reason=None):
+ status_comp = mox.StrContains(status) if status else mox.IgnoreArg()
+ name_comp = mox.StrContains(test_name) if test_name else mox.IgnoreArg()
+ reason_comp = mox.StrContains(reason) if reason else mox.IgnoreArg()
+ return StatusContains(status_comp, name_comp, reason_comp)
+
+
+ def __init__(self, status=mox.IgnoreArg(), test_name=mox.IgnoreArg(),
+ reason=mox.IgnoreArg()):
+ """Initialize.
+
+ Takes mox.Comparator objects to apply to dynamic_suite.Status
+ member variables.
+
+ @param status: status code, e.g. 'INFO', 'START', etc.
+ @param test_name: expected test name.
+ @param reason: expected reason
+ """
+ self._status = status
+ self._test_name = test_name
+ self._reason = reason
+
+
+ def equals(self, rhs):
+ """Check to see if fields match base_job.status_log_entry obj in rhs.
+
+ @param rhs: base_job.status_log_entry object to match.
+ @return boolean
+ """
+ return (self._status.equals(rhs.status_code) and
+ self._test_name.equals(rhs.operation) and
+ self._reason.equals(rhs.message))
+
+
+ def __repr__(self):
+ return '<Status containing \'%s\t%s\t%s\'>' % (self._status,
+ self._test_name,
+ self._reason)
+
+
class DynamicSuiteTest(mox.MoxTestBase):
"""Unit tests for dynamic_suite module methods.
@@ -205,13 +247,20 @@
def testReportResultsGood(self):
"""Should report results in the case where all jobs passed."""
- job = self.mox.CreateMock(frontend.Job)
- job.name = 'RPC Client job'
+ H1 = 'host1'
+
+ job = FakeJob()
job.result = True
+ job.results_platform_map = {'netbook': {'Completed' : [H1]}}
+ job.test_status = {H1: frontend.TestResults()}
+ job.test_status[H1].good = [FakeResult('a')]
+
recorder = self.mox.CreateMock(base_job.base_job)
- recorder.record('GOOD', mox.IgnoreArg(), job.name)
+ recorder.record_entry(StatusContains.CreateFromStrings('START'))
+ recorder.record_entry(StatusContains.CreateFromStrings('GOOD', H1))
+ recorder.record_entry(StatusContains.CreateFromStrings('END GOOD'))
self.mox.ReplayAll()
- self.reimager._report_results(job, recorder.record)
+ self.reimager._report_results(job, recorder.record_entry)
def testReportResultsBad(self):
@@ -231,10 +280,6 @@
H4 = 'host4'
H5 = 'host5'
- class FakeResult(object):
- def __init__(self, reason):
- self.reason = reason
-
# The RPC-client-side Job object that is annotated with results.
job = FakeJob()
@@ -252,22 +297,36 @@
h2.fail = [FakeResult('a'), FakeResult('b')]
h3 = frontend.TestResults()
h3.fail = [FakeResult('a'), FakeResult('b')]
+ h4 = frontend.TestResults()
+ h4.good = [FakeResult('c')]
+ h5 = frontend.TestResults()
+ h5.good = [FakeResult('c')]
# Skipping H1 in |test_status| dict means that it did not get run.
- job.test_status = {H2: h2, H3: h3, H4: {}, H5: {}}
+ job.test_status = {H2: h2, H3: h3, H4: h4, H5: h5}
# Set up recording expectations.
rjob = self.mox.CreateMock(base_job.base_job)
+ def set_recording_expectations(code, hostname, reason):
+ rjob.record_entry(
+ StatusContains.CreateFromStrings('START')).InAnyOrder()
+ rjob.record_entry(
+ StatusContains.CreateFromStrings(code,
+ hostname,
+ reason)).InAnyOrder()
+ rjob.record_entry(
+ StatusContains.CreateFromStrings('END %s' % code)).InAnyOrder()
+
for res in h2.fail:
- rjob.record('FAIL', mox.IgnoreArg(), H2, res.reason).InAnyOrder()
+ set_recording_expectations('FAIL', H2, res.reason)
for res in h3.fail:
- rjob.record('ABORT', mox.IgnoreArg(), H3, res.reason).InAnyOrder()
- rjob.record('GOOD', mox.IgnoreArg(), H4).InAnyOrder()
- rjob.record('GOOD', mox.IgnoreArg(), H5).InAnyOrder()
- rjob.record(
- 'ERROR', mox.IgnoreArg(), H1, mox.IgnoreArg()).InAnyOrder()
+ set_recording_expectations('ABORT', H3, res.reason)
+
+ set_recording_expectations('GOOD', H4, None)
+ set_recording_expectations('GOOD', H5, None)
+ set_recording_expectations('ERROR', H1, None)
self.mox.ReplayAll()
- self.reimager._report_results(job, rjob.record)
+ self.reimager._report_results(job, rjob.record_entry)
def testScheduleJob(self):
@@ -341,11 +400,10 @@
canary = self.expect_attempt(success=True)
rjob = self.mox.CreateMock(base_job.base_job)
- rjob.record('START', mox.IgnoreArg(), mox.IgnoreArg())
- rjob.record('END GOOD', mox.IgnoreArg(), mox.IgnoreArg())
self.reimager._clear_build_state(mox.StrContains(canary.hostname))
self.mox.ReplayAll()
- self.reimager.attempt(self._BUILD, self._BOARD, None, rjob.record, True)
+ self.assertTrue(self.reimager.attempt(self._BUILD, self._BOARD, None,
+ rjob.record_entry, True))
self.reimager.clear_reimaged_host_state(self._BUILD)
@@ -354,11 +412,10 @@
canary = self.expect_attempt(success=False)
rjob = self.mox.CreateMock(base_job.base_job)
- rjob.record('START', mox.IgnoreArg(), mox.IgnoreArg())
- rjob.record('END FAIL', mox.IgnoreArg(), mox.IgnoreArg())
self.reimager._clear_build_state(mox.StrContains(canary.hostname))
self.mox.ReplayAll()
- self.reimager.attempt(self._BUILD, self._BOARD, None, rjob.record, True)
+ self.assertFalse(self.reimager.attempt(self._BUILD, self._BOARD, None,
+ rjob.record_entry, True))
self.reimager.clear_reimaged_host_state(self._BUILD)
@@ -367,11 +424,12 @@
canary = self.expect_attempt(success=None)
rjob = self.mox.CreateMock(base_job.base_job)
- rjob.record('START', mox.IgnoreArg(), mox.IgnoreArg())
- rjob.record('FAIL', mox.IgnoreArg(), canary.name, mox.IgnoreArg())
- rjob.record('END FAIL', mox.IgnoreArg(), mox.IgnoreArg())
+ rjob.record_entry(StatusContains.CreateFromStrings('START'))
+ rjob.record_entry(StatusContains.CreateFromStrings('FAIL'))
+ rjob.record_entry(StatusContains.CreateFromStrings('END FAIL'))
self.mox.ReplayAll()
- self.reimager.attempt(self._BUILD, self._BOARD, None, rjob.record, True)
+ self.reimager.attempt(self._BUILD, self._BOARD, None,
+ rjob.record_entry, True)
self.reimager.clear_reimaged_host_state(self._BUILD)
@@ -381,10 +439,13 @@
canary = self.expect_attempt(success=None, ex=Exception(ex_message))
rjob = self.mox.CreateMock(base_job.base_job)
- rjob.record('START', mox.IgnoreArg(), mox.IgnoreArg())
- rjob.record('END ERROR', mox.IgnoreArg(), mox.IgnoreArg(), ex_message)
+ rjob.record_entry(StatusContains.CreateFromStrings('START'))
+ rjob.record_entry(StatusContains.CreateFromStrings('ERROR',
+ reason=ex_message))
+ rjob.record_entry(StatusContains.CreateFromStrings('END ERROR'))
self.mox.ReplayAll()
- self.reimager.attempt(self._BUILD, self._BOARD, None, rjob.record, True)
+ self.reimager.attempt(self._BUILD, self._BOARD, None,
+ rjob.record_entry, True)
self.reimager.clear_reimaged_host_state(self._BUILD)
@@ -394,12 +455,10 @@
canary = self.expect_attempt(success=True, check_hosts=False)
rjob = self.mox.CreateMock(base_job.base_job)
- rjob.record('START', mox.IgnoreArg(), mox.IgnoreArg())
- rjob.record('END GOOD', mox.IgnoreArg(), mox.IgnoreArg())
self.reimager._clear_build_state(mox.StrContains(canary.hostname))
self.mox.ReplayAll()
- self.reimager.attempt(self._BUILD, self._BOARD, None, rjob.record,
- False)
+ self.assertTrue(self.reimager.attempt(self._BUILD, self._BOARD, None,
+ rjob.record_entry, False))
self.reimager.clear_reimaged_host_state(self._BUILD)
@@ -412,11 +471,13 @@
self.reimager._count_usable_hosts(mox.IgnoreArg()).AndReturn(1)
rjob = self.mox.CreateMock(base_job.base_job)
- rjob.record('START', mox.IgnoreArg(), mox.IgnoreArg())
- rjob.record('END WARN', mox.IgnoreArg(), mox.IgnoreArg(),
- mox.StrContains('Too few hosts'))
+ rjob.record_entry(StatusContains.CreateFromStrings('START'))
+ rjob.record_entry(
+ StatusContains.CreateFromStrings('WARN', reason='Too few hosts'))
+ rjob.record_entry(StatusContains.CreateFromStrings('END WARN'))
self.mox.ReplayAll()
- self.reimager.attempt(self._BUILD, self._BOARD, None, rjob.record, True)
+ self.reimager.attempt(self._BUILD, self._BOARD, None,
+ rjob.record_entry, True)
self.reimager.clear_reimaged_host_state(self._BUILD)
@@ -429,56 +490,16 @@
self.reimager._count_usable_hosts(mox.IgnoreArg()).AndReturn(0)
rjob = self.mox.CreateMock(base_job.base_job)
- rjob.record('START', mox.IgnoreArg(), mox.IgnoreArg())
- rjob.record('END ERROR', mox.IgnoreArg(), mox.IgnoreArg(),
- mox.StrContains('All hosts'))
+ rjob.record_entry(StatusContains.CreateFromStrings('START'))
+ rjob.record_entry(StatusContains.CreateFromStrings('ERROR',
+ reason='All hosts'))
+ rjob.record_entry(StatusContains.CreateFromStrings('END ERROR'))
self.mox.ReplayAll()
- self.reimager.attempt(self._BUILD, self._BOARD, None, rjob.record, True)
+ self.reimager.attempt(self._BUILD, self._BOARD, None,
+ rjob.record_entry, True)
self.reimager.clear_reimaged_host_state(self._BUILD)
-class StatusContains(mox.Comparator):
- @staticmethod
- def CreateFromStrings(status=None, test_name=None, reason=None):
- status_comp = mox.StrContains(status) if status else mox.IgnoreArg()
- name_comp = mox.StrContains(test_name) if test_name else mox.IgnoreArg()
- reason_comp = mox.StrContains(reason) if reason else mox.IgnoreArg()
- return StatusContains(status_comp, name_comp, reason_comp)
-
-
- def __init__(self, status=mox.IgnoreArg(), test_name=mox.IgnoreArg(),
- reason=mox.IgnoreArg()):
- """Initialize.
-
- Takes mox.Comparator objects to apply to dynamic_suite.Status
- member variables.
-
- @param status: status code, e.g. 'INFO', 'START', etc.
- @param test_name: expected test name.
- @param reason: expected reason
- """
- self._status = status
- self._test_name = test_name
- self._reason = reason
-
-
- def equals(self, rhs):
- """Check to see if fields match base_job.status_log_entry obj in rhs.
-
- @param rhs: base_job.status_log_entry object to match.
- @return boolean
- """
- return (self._status.equals(rhs.status_code) and
- self._test_name.equals(rhs.operation) and
- self._reason.equals(rhs.message))
-
-
- def __repr__(self):
- return '<Status containing \'%s\t%s\t%s\'>' % (self._status,
- self._test_name,
- self._reason)
-
-
class SuiteTest(mox.MoxTestBase):
"""Unit tests for dynamic_suite.Suite.