blob: 4ce7d4122abb0d3c9115da80058d0e3e370e25f8 [file] [log] [blame]
#!/usr/bin/python
#
# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import logging, mox, subprocess, unittest
import common
from autotest_lib.frontend.health import check_test_health
class RunPrepScriptsTests(mox.MoxTestBase):
"""Test the run_prep_scripts() function."""
def setUp(self):
super(RunPrepScriptsTests, self).setUp()
self.mox.StubOutWithMock(subprocess, 'call')
self.mox.StubOutWithMock(logging, 'error')
self.mox.StubOutWithMock(logging, 'info')
def test_given_scripts_are_called(self):
"""Test that all the scripts passed in are called when they pass."""
scripts = [['script1.sh', 'arg'], ['script2.sh']]
logging.info(mox.IgnoreArg(), mox.IgnoreArg())
subprocess.call(['script1.sh', 'arg']).AndReturn(0)
logging.info(mox.IgnoreArg(), mox.IgnoreArg())
subprocess.call(['script2.sh']).AndReturn(0)
self.mox.ReplayAll()
check_test_health.run_prep_scripts(scripts)
def test_return_true_if_all_scripts_suceed(self):
"""Test that True is returned when all the scripts succeed."""
scripts = [['script.sh']]
logging.info(mox.IgnoreArg(), mox.IgnoreArg())
subprocess.call(mox.IgnoreArg()).AndReturn(0)
self.mox.ReplayAll()
self.assertTrue(check_test_health.run_prep_scripts(scripts))
def test_script_information_logging(self):
"""Test that we log prep running and failure."""
scripts = [['pass.py'], ['fail.sh', 'arg']]
logging.info('Running %s', 'pass.py')
subprocess.call(['pass.py']).AndReturn(0)
logging.info('Running %s', 'fail.sh arg')
subprocess.call(['fail.sh', 'arg']).AndReturn(1)
logging.error('\'%s\' failed with return code %d',
('fail.sh arg', 1))
self.mox.ReplayAll()
check_test_health.run_prep_scripts(scripts)
def test_return_false_if_script_fails(self):
"""Test that False is returned if a preparation step fails."""
scripts = [['script.sh']]
logging.info(mox.IgnoreArg(), mox.IgnoreArg())
subprocess.call(mox.IgnoreArg()).AndReturn(1)
logging.error(mox.IgnoreArg(), mox.IgnoreArg())
self.mox.ReplayAll()
self.assertFalse(check_test_health.run_prep_scripts(scripts))
def test_do_not_run_other_scripts_after_one_fails(self):
"""Test that the other prep scripts are not ran if one fails."""
scripts = [['script1.sh', 'arg'], ['script2.sh']]
logging.info(mox.IgnoreArg(), mox.IgnoreArg())
subprocess.call(['script1.sh', 'arg']).AndReturn(1)
logging.error(mox.IgnoreArg(), mox.IgnoreArg())
self.mox.ReplayAll()
check_test_health.run_prep_scripts(scripts)
class RunAnalysisScripts(mox.MoxTestBase):
"""Test the run_analysis_scripts() function."""
def setUp(self):
super(RunAnalysisScripts, self).setUp()
self.mox.StubOutWithMock(subprocess, 'call')
self.mox.StubOutWithMock(logging, 'error')
self.mox.StubOutWithMock(logging, 'info')
def test_given_scripts_are_called(self):
"""Test that all the scripts passed in are called when they pass."""
scripts = [['script1.sh', 'arg'], ['script2.sh']]
logging.info(mox.IgnoreArg(), mox.IgnoreArg())
subprocess.call(['script1.sh', 'arg']).AndReturn(0)
logging.info(mox.IgnoreArg(), mox.IgnoreArg())
subprocess.call(['script2.sh']).AndReturn(0)
self.mox.ReplayAll()
check_test_health.run_analysis_scripts(scripts)
def test_return_true_if_all_scripts_suceed(self):
"""Test that True is returned when all the scripts succeed."""
scripts = [['script.sh']]
logging.info(mox.IgnoreArg(), mox.IgnoreArg())
subprocess.call(mox.IgnoreArg()).AndReturn(0)
self.mox.ReplayAll()
self.assertTrue(check_test_health.run_analysis_scripts(scripts))
def test_script_information_logging(self):
"""Test that we log prep running and failure."""
scripts = [['pass.py'], ['fail.sh', 'arg']]
logging.info('Running %s', 'pass.py')
subprocess.call(['pass.py']).AndReturn(0)
logging.info('Running %s', 'fail.sh arg')
subprocess.call(['fail.sh', 'arg']).AndReturn(1)
logging.error('\'%s\' failed with return code %d',
('fail.sh arg', 1))
self.mox.ReplayAll()
check_test_health.run_analysis_scripts(scripts)
def test_return_false_if_script_fails(self):
""""Test that False is returned when at least one script fails."""
scripts = [['script.sh']]
logging.info(mox.IgnoreArg(), mox.IgnoreArg())
subprocess.call(mox.IgnoreArg()).AndReturn(1)
logging.error(mox.IgnoreArg(), mox.IgnoreArg())
self.mox.ReplayAll()
self.assertFalse(check_test_health.run_analysis_scripts(scripts))
def test_run_other_scripts_after_one_fails(self):
"""Test that the other analysis scripts are ran even if one fails."""
scripts = [['script1.sh', 'arg'], ['script2.sh']]
logging.info(mox.IgnoreArg(), mox.IgnoreArg())
subprocess.call(['script1.sh', 'arg']).AndReturn(1)
logging.error(mox.IgnoreArg(), mox.IgnoreArg())
logging.info(mox.IgnoreArg(), mox.IgnoreArg())
subprocess.call(['script2.sh']).AndReturn(0)
self.mox.ReplayAll()
check_test_health.run_analysis_scripts(scripts)
class MainTests(mox.MoxTestBase):
"""Tests the main function."""
def setUp(self):
super(MainTests, self).setUp()
self.mox.StubOutWithMock(check_test_health, 'run_prep_scripts')
self.mox.StubOutWithMock(check_test_health, 'run_analysis_scripts')
self._orig_prep = check_test_health.PREP_SCRIPTS
self._orig_analysis = check_test_health.ANALYSIS_SCRIPTS
def tearDown(self):
super(MainTests, self).tearDown()
check_test_health.PREP_SCRIPTS = self._orig_prep
check_test_health.ANALYSIS_SCRIPTS = self._orig_analysis
def test_all_functions_called_if_there_are_no_errors(self):
"""Test that all the script calling functions are called by default."""
check_test_health.PREP_SCRIPTS = [['test_prep']]
check_test_health.ANALYSIS_SCRIPTS = [['test_analysis']]
check_test_health.run_prep_scripts(
check_test_health.PREP_SCRIPTS).AndReturn(True)
check_test_health.run_analysis_scripts(
check_test_health.ANALYSIS_SCRIPTS).AndReturn(True)
self.mox.ReplayAll()
self.assertEqual(check_test_health.main(), 0)
def test_handle_prep_failure(self):
"""Test that we properly handle a prep script failing."""
check_test_health.run_prep_scripts(mox.IgnoreArg()).AndReturn(False)
self.mox.ReplayAll()
self.assertEqual(check_test_health.main(), 1)
def test_handle_analysis_failure(self):
"""Test that we properly handle an analysis script failing."""
check_test_health.run_prep_scripts(mox.IgnoreArg()).AndReturn(True)
check_test_health.run_analysis_scripts(mox.IgnoreArg()).AndReturn(False)
self.mox.ReplayAll()
self.assertEqual(check_test_health.main(), 1)
if __name__ == '__main__':
unittest.main()