Home | History | Annotate | Download | only in health
      1 #!/usr/bin/python
      2 #
      3 # Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
      4 # Use of this source code is governed by a BSD-style license that can be
      5 # found in the LICENSE file.
      6 
      7 import logging, mox, subprocess, unittest
      8 
      9 import common
     10 
     11 from autotest_lib.frontend.health import check_test_health
     12 
     13 
     14 class RunPrepScriptsTests(mox.MoxTestBase):
     15     """Test the run_prep_scripts() function."""
     16 
     17     def setUp(self):
     18         super(RunPrepScriptsTests, self).setUp()
     19         self.mox.StubOutWithMock(subprocess, 'call')
     20         self.mox.StubOutWithMock(logging, 'error')
     21         self.mox.StubOutWithMock(logging, 'info')
     22 
     23 
     24     def test_given_scripts_are_called(self):
     25         """Test that all the scripts passed in are called when they pass."""
     26         scripts = [['script1.sh', 'arg'], ['script2.sh']]
     27 
     28         logging.info(mox.IgnoreArg(), mox.IgnoreArg())
     29         subprocess.call(['script1.sh', 'arg']).AndReturn(0)
     30         logging.info(mox.IgnoreArg(), mox.IgnoreArg())
     31         subprocess.call(['script2.sh']).AndReturn(0)
     32 
     33         self.mox.ReplayAll()
     34         check_test_health.run_prep_scripts(scripts)
     35 
     36 
     37     def test_return_true_if_all_scripts_suceed(self):
     38         """Test that True is returned when all the scripts succeed."""
     39         scripts = [['script.sh']]
     40 
     41         logging.info(mox.IgnoreArg(), mox.IgnoreArg())
     42         subprocess.call(mox.IgnoreArg()).AndReturn(0)
     43 
     44         self.mox.ReplayAll()
     45         self.assertTrue(check_test_health.run_prep_scripts(scripts))
     46 
     47 
     48     def test_script_information_logging(self):
     49         """Test that we log prep running and failure."""
     50         scripts = [['pass.py'], ['fail.sh', 'arg']]
     51 
     52         logging.info('Running %s', 'pass.py')
     53         subprocess.call(['pass.py']).AndReturn(0)
     54         logging.info('Running %s', 'fail.sh arg')
     55         subprocess.call(['fail.sh', 'arg']).AndReturn(1)
     56         logging.error('\'%s\' failed with return code %d',
     57                       ('fail.sh arg', 1))
     58 
     59         self.mox.ReplayAll()
     60         check_test_health.run_prep_scripts(scripts)
     61 
     62 
     63     def test_return_false_if_script_fails(self):
     64         """Test that False is returned if a preparation step fails."""
     65         scripts = [['script.sh']]
     66 
     67         logging.info(mox.IgnoreArg(), mox.IgnoreArg())
     68         subprocess.call(mox.IgnoreArg()).AndReturn(1)
     69         logging.error(mox.IgnoreArg(), mox.IgnoreArg())
     70 
     71         self.mox.ReplayAll()
     72         self.assertFalse(check_test_health.run_prep_scripts(scripts))
     73 
     74 
     75     def test_do_not_run_other_scripts_after_one_fails(self):
     76         """Test that the other prep scripts are not ran if one fails."""
     77         scripts = [['script1.sh', 'arg'], ['script2.sh']]
     78 
     79         logging.info(mox.IgnoreArg(), mox.IgnoreArg())
     80         subprocess.call(['script1.sh', 'arg']).AndReturn(1)
     81         logging.error(mox.IgnoreArg(), mox.IgnoreArg())
     82 
     83         self.mox.ReplayAll()
     84         check_test_health.run_prep_scripts(scripts)
     85 
     86 
     87 
     88 class RunAnalysisScripts(mox.MoxTestBase):
     89     """Test the run_analysis_scripts() function."""
     90 
     91     def setUp(self):
     92         super(RunAnalysisScripts, self).setUp()
     93         self.mox.StubOutWithMock(subprocess, 'call')
     94         self.mox.StubOutWithMock(logging, 'error')
     95         self.mox.StubOutWithMock(logging, 'info')
     96 
     97 
     98     def test_given_scripts_are_called(self):
     99         """Test that all the scripts passed in are called when they pass."""
    100         scripts = [['script1.sh', 'arg'], ['script2.sh']]
    101 
    102         logging.info(mox.IgnoreArg(), mox.IgnoreArg())
    103         subprocess.call(['script1.sh', 'arg']).AndReturn(0)
    104         logging.info(mox.IgnoreArg(), mox.IgnoreArg())
    105         subprocess.call(['script2.sh']).AndReturn(0)
    106 
    107         self.mox.ReplayAll()
    108         check_test_health.run_analysis_scripts(scripts)
    109 
    110 
    111     def test_return_true_if_all_scripts_suceed(self):
    112         """Test that True is returned when all the scripts succeed."""
    113         scripts = [['script.sh']]
    114 
    115         logging.info(mox.IgnoreArg(), mox.IgnoreArg())
    116         subprocess.call(mox.IgnoreArg()).AndReturn(0)
    117 
    118         self.mox.ReplayAll()
    119         self.assertTrue(check_test_health.run_analysis_scripts(scripts))
    120 
    121 
    122     def test_script_information_logging(self):
    123         """Test that we log prep running and failure."""
    124         scripts = [['pass.py'], ['fail.sh', 'arg']]
    125 
    126         logging.info('Running %s', 'pass.py')
    127         subprocess.call(['pass.py']).AndReturn(0)
    128         logging.info('Running %s', 'fail.sh arg')
    129         subprocess.call(['fail.sh', 'arg']).AndReturn(1)
    130         logging.error('\'%s\' failed with return code %d',
    131                       ('fail.sh arg', 1))
    132 
    133         self.mox.ReplayAll()
    134         check_test_health.run_analysis_scripts(scripts)
    135 
    136 
    137     def test_return_false_if_script_fails(self):
    138         """"Test that False is returned when at least one script fails."""
    139         scripts = [['script.sh']]
    140 
    141         logging.info(mox.IgnoreArg(), mox.IgnoreArg())
    142         subprocess.call(mox.IgnoreArg()).AndReturn(1)
    143         logging.error(mox.IgnoreArg(), mox.IgnoreArg())
    144 
    145         self.mox.ReplayAll()
    146         self.assertFalse(check_test_health.run_analysis_scripts(scripts))
    147 
    148 
    149     def test_run_other_scripts_after_one_fails(self):
    150         """Test that the other analysis scripts are ran even if one fails."""
    151         scripts = [['script1.sh', 'arg'], ['script2.sh']]
    152 
    153         logging.info(mox.IgnoreArg(), mox.IgnoreArg())
    154         subprocess.call(['script1.sh', 'arg']).AndReturn(1)
    155         logging.error(mox.IgnoreArg(), mox.IgnoreArg())
    156         logging.info(mox.IgnoreArg(), mox.IgnoreArg())
    157         subprocess.call(['script2.sh']).AndReturn(0)
    158 
    159         self.mox.ReplayAll()
    160         check_test_health.run_analysis_scripts(scripts)
    161 
    162 
    163 class MainTests(mox.MoxTestBase):
    164     """Tests the main function."""
    165 
    166     def setUp(self):
    167         super(MainTests, self).setUp()
    168         self.mox.StubOutWithMock(check_test_health, 'run_prep_scripts')
    169         self.mox.StubOutWithMock(check_test_health, 'run_analysis_scripts')
    170         self._orig_prep = check_test_health.PREP_SCRIPTS
    171         self._orig_analysis = check_test_health.ANALYSIS_SCRIPTS
    172 
    173 
    174     def tearDown(self):
    175         super(MainTests, self).tearDown()
    176         check_test_health.PREP_SCRIPTS = self._orig_prep
    177         check_test_health.ANALYSIS_SCRIPTS = self._orig_analysis
    178 
    179 
    180     def test_all_functions_called_if_there_are_no_errors(self):
    181         """Test that all the script calling functions are called by default."""
    182         check_test_health.PREP_SCRIPTS = [['test_prep']]
    183         check_test_health.ANALYSIS_SCRIPTS = [['test_analysis']]
    184 
    185         check_test_health.run_prep_scripts(
    186             check_test_health.PREP_SCRIPTS).AndReturn(True)
    187         check_test_health.run_analysis_scripts(
    188             check_test_health.ANALYSIS_SCRIPTS).AndReturn(True)
    189 
    190         self.mox.ReplayAll()
    191         self.assertEqual(check_test_health.main(), 0)
    192 
    193 
    194     def test_handle_prep_failure(self):
    195         """Test that we properly handle a prep script failing."""
    196         check_test_health.run_prep_scripts(mox.IgnoreArg()).AndReturn(False)
    197 
    198         self.mox.ReplayAll()
    199         self.assertEqual(check_test_health.main(), 1)
    200 
    201 
    202     def test_handle_analysis_failure(self):
    203         """Test that we properly handle an analysis script failing."""
    204         check_test_health.run_prep_scripts(mox.IgnoreArg()).AndReturn(True)
    205         check_test_health.run_analysis_scripts(mox.IgnoreArg()).AndReturn(False)
    206 
    207         self.mox.ReplayAll()
    208         self.assertEqual(check_test_health.main(), 1)
    209 
    210 
    211 if __name__ == '__main__':
    212     unittest.main()
    213