job_unittest.py revision 75cdfee87bfaa3cf3f9860832b228a6d32aaed2f
15bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh#!/usr/bin/python 25bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 375cdfee87bfaa3cf3f9860832b228a6d32aaed2fshowardimport logging, os, unittest, shutil, sys, time, StringIO 45bba5ca127e99428a3cc6c823b51a8b3062d06bdmblighimport common 56f731364e6207c198ac8de748a043eba1e9223b3jadmanski 65bba5ca127e99428a3cc6c823b51a8b3062d06bdmblighfrom autotest_lib.client.bin import job, boottool, config, sysinfo, harness 7b0b58a2ae3eee9cac2b36cce70ba4b1483d6b442mblighfrom autotest_lib.client.bin import test, xen, kernel, utils 875cdfee87bfaa3cf3f9860832b228a6d32aaed2fshowardfrom autotest_lib.client.common_lib import packages, error, log, logging_manager 975cdfee87bfaa3cf3f9860832b228a6d32aaed2fshowardfrom autotest_lib.client.common_lib import logging_config 105bba5ca127e99428a3cc6c823b51a8b3062d06bdmblighfrom autotest_lib.client.common_lib.test_utils import mock 115bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 125bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 136f731364e6207c198ac8de748a043eba1e9223b3jadmanskiclass first_line_comparator(mock.argument_comparator): 146f731364e6207c198ac8de748a043eba1e9223b3jadmanski def __init__(self, first_line): 156f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.first_line = first_line 166f731364e6207c198ac8de748a043eba1e9223b3jadmanski 176f731364e6207c198ac8de748a043eba1e9223b3jadmanski 186f731364e6207c198ac8de748a043eba1e9223b3jadmanski def is_satisfied_by(self, parameter): 196f731364e6207c198ac8de748a043eba1e9223b3jadmanski return self.first_line == parameter.splitlines()[0] 206f731364e6207c198ac8de748a043eba1e9223b3jadmanski 216f731364e6207c198ac8de748a043eba1e9223b3jadmanski 225bba5ca127e99428a3cc6c823b51a8b3062d06bdmblighclass TestBaseJob(unittest.TestCase): 235bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh def setUp(self): 245bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # make god 255bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god = mock.mock_god() 265bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 275bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # need to set some environ variables 285bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.autodir = "autodir" 295bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh os.environ['AUTODIR'] = self.autodir 305bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 315bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # set up some variables 325bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.control = "control" 335bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.jobtag = "jobtag" 345bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 357629f148feee19efa11bc041d49943aacc43c482showard # get rid of stdout and logging 3654705a0d9dbe23800f14e785edbd6d3f5eebaff3mbligh sys.stdout = StringIO.StringIO() 3775cdfee87bfaa3cf3f9860832b228a6d32aaed2fshoward logging_manager.configure_logging(logging_config.TestingConfig()) 3875cdfee87bfaa3cf3f9860832b228a6d32aaed2fshoward logging.disable(logging.CRITICAL) 3975cdfee87bfaa3cf3f9860832b228a6d32aaed2fshoward def dummy_configure_logging(*args, **kwargs): 4075cdfee87bfaa3cf3f9860832b228a6d32aaed2fshoward pass 4175cdfee87bfaa3cf3f9860832b228a6d32aaed2fshoward self.god.stub_with(logging_manager, 'configure_logging', 4275cdfee87bfaa3cf3f9860832b228a6d32aaed2fshoward dummy_configure_logging) 4375cdfee87bfaa3cf3f9860832b228a6d32aaed2fshoward real_get_logging_manager = logging_manager.get_logging_manager 4475cdfee87bfaa3cf3f9860832b228a6d32aaed2fshoward def get_logging_manager_no_fds(manage_stdout_and_stderr=False, 4575cdfee87bfaa3cf3f9860832b228a6d32aaed2fshoward redirect_fds=False): 4675cdfee87bfaa3cf3f9860832b228a6d32aaed2fshoward return real_get_logging_manager(manage_stdout_and_stderr, False) 4775cdfee87bfaa3cf3f9860832b228a6d32aaed2fshoward self.god.stub_with(logging_manager, 'get_logging_manager', 4875cdfee87bfaa3cf3f9860832b228a6d32aaed2fshoward get_logging_manager_no_fds) 4954705a0d9dbe23800f14e785edbd6d3f5eebaff3mbligh 505bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # stub out some stuff 515bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.stub_function(os.path, 'exists') 52c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh self.god.stub_function(os.path, 'isdir') 537629f148feee19efa11bc041d49943aacc43c482showard self.god.stub_function(os, 'makedirs') 545bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.stub_function(os, 'mkdir') 557629f148feee19efa11bc041d49943aacc43c482showard self.god.stub_function(os, 'remove') 567629f148feee19efa11bc041d49943aacc43c482showard self.god.stub_function(shutil, 'rmtree') 575bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.stub_function(shutil, 'copyfile') 585bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.stub_function(job, 'open') 595bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.stub_function(utils, 'system') 6053da18eddf69243ca175d9a4603cba5b55300726mbligh self.god.stub_function(utils, 'drop_caches') 615bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.stub_function(harness, 'select') 625bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.stub_function(sysinfo, 'log_per_reboot_data') 635bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 645bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.stub_class(config, 'config') 655bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.stub_class(boottool, 'boottool') 66cefe2653333168a08c891f72a708b66855f07853jadmanski self.god.stub_class(sysinfo, 'sysinfo') 675bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 685bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 695bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh def tearDown(self): 7054705a0d9dbe23800f14e785edbd6d3f5eebaff3mbligh sys.stdout = sys.__stdout__ 715bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.unstub_all() 725bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 735bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 745bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh def construct_job(self, cont): 755bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # will construct class instance using __new__ 765bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.job = job.base_job.__new__(job.base_job) 775bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 785bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # now some specific stubs 795bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.stub_function(self.job, '_load_state') 805bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.stub_function(self.job, '_init_group_level') 815bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.stub_function(self.job, 'config_get') 82d948bfb7729e94b457bafca91a13c963d7edcba6mbligh self.god.stub_function(self.job, 'config_set') 835bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.stub_function(self.job, 'record') 845bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.stub_function(self.job, '_increment_group_level') 856f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.god.stub_function(self.job, '_decrement_group_level') 865bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.stub_function(self.job, 'get_state') 875bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 885bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # other setup 895bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh tmpdir = os.path.join(self.autodir, 'tmp') 905bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh results = os.path.join(self.autodir, 'results') 915bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh download = os.path.join(self.autodir, 'tests', 'download') 925bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh resultdir = os.path.join(self.autodir, 'results', self.jobtag) 93c5ddfd1f71caef9ec0c84c53ef7db42fcdc33e1cmbligh pkgdir = os.path.join(self.autodir, 'packages') 945bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 955bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # record 967629f148feee19efa11bc041d49943aacc43c482showard os.path.exists.expect_call(resultdir).and_return(False) 977629f148feee19efa11bc041d49943aacc43c482showard os.makedirs.expect_call(resultdir) 987629f148feee19efa11bc041d49943aacc43c482showard 9953da18eddf69243ca175d9a4603cba5b55300726mbligh utils.drop_caches.expect_call() 1005bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.job._load_state.expect_call() 10123afbec41f6275bef4e80c36726916b0be564204jadmanski self.job.get_state.expect_call("__run_test_cleanup", 10223afbec41f6275bef4e80c36726916b0be564204jadmanski default=True).and_return(True) 103c09fc1543a3f77026bab728770aa0191feaddd07jadmanski job_sysinfo = sysinfo.sysinfo.expect_new(resultdir) 104c09fc1543a3f77026bab728770aa0191feaddd07jadmanski self.job.get_state.expect_call("__sysinfo", 105c09fc1543a3f77026bab728770aa0191feaddd07jadmanski None).and_return(None) 1060910844396c68a8747dc1ab580fb898ecff2469embligh self.job.get_state.expect_call("__last_boot_tag", 1070910844396c68a8747dc1ab580fb898ecff2469embligh default=None).and_return(None) 1085bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh if not cont: 1095bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh os.path.exists.expect_call(tmpdir).and_return(False) 1105bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh os.mkdir.expect_call(tmpdir) 111c5ddfd1f71caef9ec0c84c53ef7db42fcdc33e1cmbligh os.path.exists.expect_call(pkgdir).and_return(False) 112c5ddfd1f71caef9ec0c84c53ef7db42fcdc33e1cmbligh os.mkdir.expect_call(pkgdir) 1135bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh os.path.exists.expect_call(results).and_return(False) 1145bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh os.mkdir.expect_call(results) 1155bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh os.path.exists.expect_call(download).and_return(False) 1165bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh os.mkdir.expect_call(download) 1177629f148feee19efa11bc041d49943aacc43c482showard os.path.exists.expect_call(resultdir).and_return(False) 1187629f148feee19efa11bc041d49943aacc43c482showard os.makedirs.expect_call(os.path.join(resultdir, 'debug')) 1197629f148feee19efa11bc041d49943aacc43c482showard os.makedirs.expect_call(os.path.join(resultdir, 'analysis')) 1205bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh shutil.copyfile.expect_call(mock.is_string_comparator(), 1215bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh os.path.join(resultdir, 'control')) 1225bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 1235bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.job._init_group_level.expect_call() 1245bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.config = config.config.expect_new(self.job) 1255bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh my_harness = self.god.create_mock_class(harness.harness, 1265bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 'my_harness') 1275bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh harness.select.expect_call(None, 1285bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.job).and_return(my_harness) 1295bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.job.config_get.expect_call( 1305bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 'boottool.executable').and_return(None) 1315bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh bootloader = boottool.boottool.expect_new(None) 132cefe2653333168a08c891f72a708b66855f07853jadmanski job_sysinfo.log_per_reboot_data.expect_call() 1335bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh if not cont: 1345bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.job.record.expect_call('START', None, None) 1355bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.job._increment_group_level.expect_call() 1365bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 1375bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh my_harness.run_start.expect_call() 1385bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.job.get_state.expect_call('__monitor_disk', 1395bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh default=0.0).and_return(0.0) 1405bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 141d948bfb7729e94b457bafca91a13c963d7edcba6mbligh self.god.stub_function(utils, 'read_one_line') 142d948bfb7729e94b457bafca91a13c963d7edcba6mbligh utils.read_one_line.expect_call('/proc/cmdline').and_return( 143d948bfb7729e94b457bafca91a13c963d7edcba6mbligh 'blah more-blah root=lala IDENT=81234567 blah-again console=tty1') 144d948bfb7729e94b457bafca91a13c963d7edcba6mbligh self.job.config_set.expect_call('boot.default_args', 145d948bfb7729e94b457bafca91a13c963d7edcba6mbligh 'more-blah console=tty1') 1465bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # finish constructor 147d948bfb7729e94b457bafca91a13c963d7edcba6mbligh self.job.__init__(self.control, self.jobtag, cont, 148d948bfb7729e94b457bafca91a13c963d7edcba6mbligh extra_copy_cmdline=['more-blah']) 1495bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 1505bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # check 1515bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.check_playback() 1525bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 153c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh 1545bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh def test_constructor(self): 1555bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.construct_job(False) 1565bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 1575bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 1585bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh def test_monitor_disk_usage(self): 1595bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.construct_job(True) 1605bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 1615bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # setup 1625bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.stub_function(self.job, 'set_state') 1635bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 1645bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # record 1655bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh max_rate = 10.0 1665bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.job.set_state.expect_call('__monitor_disk', max_rate) 1675bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 1685bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # test 1695bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.job.monitor_disk_usage(max_rate) 1705bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.check_playback() 1715bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 1725bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 1736ca37b61b4701964caf9af73bc988114cae663efjadmanski def test_relative_path(self): 174c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh self.construct_job(True) 175c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh dummy = "asdf" 176c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh ret = self.job.relative_path(os.path.join(self.job.resultdir, dummy)) 177c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh self.assertEquals(ret, dummy) 178c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh 179c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh 180c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh def test_control_functions(self): 181c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh self.construct_job(True) 182c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh control_file = "blah" 183c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh self.job.control_set(control_file) 184c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh self.assertEquals(self.job.control_get(), os.path.abspath(control_file)) 185c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh 186c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh 1875bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh def test_harness_select(self): 1885bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.construct_job(True) 1895bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 1905bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # record 1915bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh which = "which" 1925bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh harness.select.expect_call(which, self.job).and_return(None) 1935bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 1945bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # run and test 1955bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.job.harness_select(which) 1965bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.check_playback() 1975bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 1985bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 1995bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh def test_config_set(self): 2005bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.construct_job(True) 2015bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 202d948bfb7729e94b457bafca91a13c963d7edcba6mbligh # unstub config_set 203d948bfb7729e94b457bafca91a13c963d7edcba6mbligh self.god.unstub(self.job, 'config_set') 2045bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # record 2055bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh name = "foo" 2065bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh val = 10 2075bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.config.set.expect_call(name, val) 2085bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 2095bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # run and test 2105bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.job.config_set(name, val) 2115bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.check_playback() 2125bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 2135bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 2145bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh def test_config_get(self): 2155bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.construct_job(True) 2165bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 2175bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # unstub config_get 2185bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.unstub(self.job, 'config_get') 2195bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # record 2205bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh name = "foo" 2215bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh val = 10 2225bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.config.get.expect_call(name).and_return(val) 2235bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 2245bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # run and test 2255bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.job.config_get(name) 2265bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.check_playback() 2275bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 2285bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 229c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh def test_setup_dirs_raise(self): 230c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh self.construct_job(True) 231c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh 232c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh # setup 233c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh results_dir = 'foo' 234c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh tmp_dir = 'bar' 235c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh 236c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh # record 237c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh os.path.exists.expect_call(tmp_dir).and_return(True) 238c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh os.path.isdir.expect_call(tmp_dir).and_return(False) 239c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh 240c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh # test 241c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh self.assertRaises(ValueError, self.job.setup_dirs, results_dir, tmp_dir) 242c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh self.god.check_playback() 243c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh 244c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh 245c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh def test_setup_dirs(self): 246c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh self.construct_job(True) 247c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh 248c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh # setup 249c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh results_dir1 = os.path.join(self.job.resultdir, 'build') 250c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh results_dir2 = os.path.join(self.job.resultdir, 'build.2') 251c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh results_dir3 = os.path.join(self.job.resultdir, 'build.3') 252c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh tmp_dir = 'bar' 253c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh 254c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh # record 255c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh os.path.exists.expect_call(tmp_dir).and_return(False) 256c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh os.mkdir.expect_call(tmp_dir) 257c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh os.path.isdir.expect_call(tmp_dir).and_return(True) 258c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh os.path.exists.expect_call(results_dir1).and_return(True) 259c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh os.path.exists.expect_call(results_dir2).and_return(True) 260c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh os.path.exists.expect_call(results_dir3).and_return(False) 261c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh os.path.exists.expect_call(results_dir3).and_return(False) 262c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh os.mkdir.expect_call(results_dir3) 263c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh 264c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh # test 265c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh self.assertEqual(self.job.setup_dirs(None, tmp_dir), 266c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh (results_dir3, tmp_dir)) 267c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh self.god.check_playback() 268c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh 269c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh 2706ca37b61b4701964caf9af73bc988114cae663efjadmanski def test_xen(self): 2716ca37b61b4701964caf9af73bc988114cae663efjadmanski self.construct_job(True) 2726ca37b61b4701964caf9af73bc988114cae663efjadmanski 2736ca37b61b4701964caf9af73bc988114cae663efjadmanski # setup 2746ca37b61b4701964caf9af73bc988114cae663efjadmanski self.god.stub_function(self.job, "setup_dirs") 2756ca37b61b4701964caf9af73bc988114cae663efjadmanski self.god.stub_class(xen, "xen") 2766ca37b61b4701964caf9af73bc988114cae663efjadmanski results = 'results_dir' 2776ca37b61b4701964caf9af73bc988114cae663efjadmanski tmp = 'tmp' 2786ca37b61b4701964caf9af73bc988114cae663efjadmanski build = 'xen' 2796ca37b61b4701964caf9af73bc988114cae663efjadmanski base_tree = object() 2806ca37b61b4701964caf9af73bc988114cae663efjadmanski 2816ca37b61b4701964caf9af73bc988114cae663efjadmanski # record 2826ca37b61b4701964caf9af73bc988114cae663efjadmanski self.job.setup_dirs.expect_call(results, 2836ca37b61b4701964caf9af73bc988114cae663efjadmanski tmp).and_return((results, tmp)) 2846ca37b61b4701964caf9af73bc988114cae663efjadmanski myxen = xen.xen.expect_new(self.job, base_tree, results, tmp, build, 2856ca37b61b4701964caf9af73bc988114cae663efjadmanski False, None) 2866ca37b61b4701964caf9af73bc988114cae663efjadmanski 2876ca37b61b4701964caf9af73bc988114cae663efjadmanski # run job and check 2886ca37b61b4701964caf9af73bc988114cae663efjadmanski axen = self.job.xen(base_tree, results, tmp) 2896ca37b61b4701964caf9af73bc988114cae663efjadmanski self.god.check_playback() 2906ca37b61b4701964caf9af73bc988114cae663efjadmanski self.assertEquals(myxen, axen) 2916ca37b61b4701964caf9af73bc988114cae663efjadmanski 2926ca37b61b4701964caf9af73bc988114cae663efjadmanski 2936ca37b61b4701964caf9af73bc988114cae663efjadmanski def test_kernel_rpm(self): 2946ca37b61b4701964caf9af73bc988114cae663efjadmanski self.construct_job(True) 2956ca37b61b4701964caf9af73bc988114cae663efjadmanski 2966ca37b61b4701964caf9af73bc988114cae663efjadmanski # setup 2976ca37b61b4701964caf9af73bc988114cae663efjadmanski self.god.stub_function(self.job, "setup_dirs") 2986ca37b61b4701964caf9af73bc988114cae663efjadmanski self.god.stub_class(kernel, "rpm_kernel") 2996ca37b61b4701964caf9af73bc988114cae663efjadmanski self.god.stub_function(kernel, "preprocess_path") 300c5ddfd1f71caef9ec0c84c53ef7db42fcdc33e1cmbligh self.god.stub_function(self.job.pkgmgr, "fetch_pkg") 301e7785cc37c2081ebd3815673ef73750f7f10dfe0mbligh self.god.stub_function(utils, "get_os_vendor") 3026ca37b61b4701964caf9af73bc988114cae663efjadmanski results = 'results_dir' 3036ca37b61b4701964caf9af73bc988114cae663efjadmanski tmp = 'tmp' 3046ca37b61b4701964caf9af73bc988114cae663efjadmanski build = 'xen' 3056ca37b61b4701964caf9af73bc988114cae663efjadmanski path = "somepath.rpm" 306c5ddfd1f71caef9ec0c84c53ef7db42fcdc33e1cmbligh packages_dir = os.path.join("autodir/packages", path) 3076ca37b61b4701964caf9af73bc988114cae663efjadmanski 3086ca37b61b4701964caf9af73bc988114cae663efjadmanski # record 3096ca37b61b4701964caf9af73bc988114cae663efjadmanski self.job.setup_dirs.expect_call(results, 3106ca37b61b4701964caf9af73bc988114cae663efjadmanski tmp).and_return((results, tmp)) 3116ca37b61b4701964caf9af73bc988114cae663efjadmanski kernel.preprocess_path.expect_call(path).and_return(path) 3123bf79ca4d5490f9af09e1ddc39b8df5343b34d06mbligh os.path.exists.expect_call(path).and_return(False) 313c5ddfd1f71caef9ec0c84c53ef7db42fcdc33e1cmbligh self.job.pkgmgr.fetch_pkg.expect_call(path, packages_dir, repo_url='') 314e7785cc37c2081ebd3815673ef73750f7f10dfe0mbligh utils.get_os_vendor.expect_call() 3151b160a0e5f3ce9877aefd143cd39327303916afembligh mykernel = kernel.rpm_kernel.expect_new(self.job, [packages_dir], 316c5ddfd1f71caef9ec0c84c53ef7db42fcdc33e1cmbligh results) 3176ca37b61b4701964caf9af73bc988114cae663efjadmanski 3186ca37b61b4701964caf9af73bc988114cae663efjadmanski # check 3196ca37b61b4701964caf9af73bc988114cae663efjadmanski akernel = self.job.kernel(path, results, tmp) 3206ca37b61b4701964caf9af73bc988114cae663efjadmanski self.god.check_playback() 3216ca37b61b4701964caf9af73bc988114cae663efjadmanski self.assertEquals(mykernel, akernel) 3226ca37b61b4701964caf9af73bc988114cae663efjadmanski 3236ca37b61b4701964caf9af73bc988114cae663efjadmanski 3246ca37b61b4701964caf9af73bc988114cae663efjadmanski def test_kernel(self): 3256ca37b61b4701964caf9af73bc988114cae663efjadmanski self.construct_job(True) 3266ca37b61b4701964caf9af73bc988114cae663efjadmanski 3276ca37b61b4701964caf9af73bc988114cae663efjadmanski # setup 3286ca37b61b4701964caf9af73bc988114cae663efjadmanski self.god.stub_function(self.job, "setup_dirs") 3296ca37b61b4701964caf9af73bc988114cae663efjadmanski self.god.stub_class(kernel, "kernel") 3306ca37b61b4701964caf9af73bc988114cae663efjadmanski self.god.stub_function(kernel, "preprocess_path") 3316ca37b61b4701964caf9af73bc988114cae663efjadmanski results = 'results_dir' 3326ca37b61b4701964caf9af73bc988114cae663efjadmanski tmp = 'tmp' 3336ca37b61b4701964caf9af73bc988114cae663efjadmanski build = 'linux' 3346ca37b61b4701964caf9af73bc988114cae663efjadmanski path = "somepath.deb" 3356ca37b61b4701964caf9af73bc988114cae663efjadmanski 3366ca37b61b4701964caf9af73bc988114cae663efjadmanski # record 3376ca37b61b4701964caf9af73bc988114cae663efjadmanski self.job.setup_dirs.expect_call(results, 3386ca37b61b4701964caf9af73bc988114cae663efjadmanski tmp).and_return((results, tmp)) 3396ca37b61b4701964caf9af73bc988114cae663efjadmanski kernel.preprocess_path.expect_call(path).and_return(path) 3406ca37b61b4701964caf9af73bc988114cae663efjadmanski mykernel = kernel.kernel.expect_new(self.job, path, results, tmp, 3416ca37b61b4701964caf9af73bc988114cae663efjadmanski build, False) 3426ca37b61b4701964caf9af73bc988114cae663efjadmanski 3436ca37b61b4701964caf9af73bc988114cae663efjadmanski # check 3446ca37b61b4701964caf9af73bc988114cae663efjadmanski akernel = self.job.kernel(path, results, tmp) 3456ca37b61b4701964caf9af73bc988114cae663efjadmanski self.god.check_playback() 3466ca37b61b4701964caf9af73bc988114cae663efjadmanski self.assertEquals(mykernel, akernel) 3476ca37b61b4701964caf9af73bc988114cae663efjadmanski 3486ca37b61b4701964caf9af73bc988114cae663efjadmanski 3496f731364e6207c198ac8de748a043eba1e9223b3jadmanski def test_run_test_logs_test_error_from_unhandled_error(self): 3506f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.construct_job(True) 3516f731364e6207c198ac8de748a043eba1e9223b3jadmanski 3526f731364e6207c198ac8de748a043eba1e9223b3jadmanski # set up stubs 353c5ddfd1f71caef9ec0c84c53ef7db42fcdc33e1cmbligh self.god.stub_function(self.job.pkgmgr, 'get_package_name') 3546f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.god.stub_function(self.job, "_runtest") 3556f731364e6207c198ac8de748a043eba1e9223b3jadmanski 3566f731364e6207c198ac8de748a043eba1e9223b3jadmanski # create an unhandled error object 3576f731364e6207c198ac8de748a043eba1e9223b3jadmanski class MyError(error.TestError): 3586f731364e6207c198ac8de748a043eba1e9223b3jadmanski pass 3596f731364e6207c198ac8de748a043eba1e9223b3jadmanski real_error = MyError("this is the real error message") 360c218083b6b96257788364ef8b7fa0fad5087fcbdmbligh unhandled_error = error.UnhandledTestError(real_error) 3616f731364e6207c198ac8de748a043eba1e9223b3jadmanski 3626f731364e6207c198ac8de748a043eba1e9223b3jadmanski # set up the recording 3636f731364e6207c198ac8de748a043eba1e9223b3jadmanski testname = "error_test" 3646f731364e6207c198ac8de748a043eba1e9223b3jadmanski outputdir = os.path.join(self.job.resultdir, testname) 365c5ddfd1f71caef9ec0c84c53ef7db42fcdc33e1cmbligh self.job.pkgmgr.get_package_name.expect_call( 366c5ddfd1f71caef9ec0c84c53ef7db42fcdc33e1cmbligh testname, 'test').and_return(("", testname)) 367e39c3c0dbe16caed55f4538af78dbf057deb7fadmbligh self.job.get_state.expect_call( 368e39c3c0dbe16caed55f4538af78dbf057deb7fadmbligh self.job._RUN_NUMBER_STATE, default=0).and_return(0) 369e39c3c0dbe16caed55f4538af78dbf057deb7fadmbligh self.job.get_state.expect_call( 370e39c3c0dbe16caed55f4538af78dbf057deb7fadmbligh self.job._KERNEL_IN_TAG_STATE, default=False).and_return(False) 3716f731364e6207c198ac8de748a043eba1e9223b3jadmanski os.path.exists.expect_call(outputdir).and_return(False) 3726f731364e6207c198ac8de748a043eba1e9223b3jadmanski os.mkdir.expect_call(outputdir) 3736f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.job.record.expect_call("START", testname, testname) 3746f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.job._increment_group_level.expect_call() 3756f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.job._runtest.expect_call(testname, "", (), {}).and_raises( 3766f731364e6207c198ac8de748a043eba1e9223b3jadmanski unhandled_error) 377ca7c6fe8e064d422986c633db16123b4e628a532jadmanski self.job.record.expect_call("ERROR", testname, testname, 3786f731364e6207c198ac8de748a043eba1e9223b3jadmanski first_line_comparator(str(real_error))) 3796f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.job._decrement_group_level.expect_call() 380b88d6dc723de628c0da22513c59997eab29ab1f3jadmanski self.job.record.expect_call("END ERROR", testname, testname) 381b6eb2f19e1225b14dee3839c2945caf6bc90fa73jadmanski self.job.harness.run_test_complete.expect_call() 38253da18eddf69243ca175d9a4603cba5b55300726mbligh utils.drop_caches.expect_call() 3836f731364e6207c198ac8de748a043eba1e9223b3jadmanski 3846f731364e6207c198ac8de748a043eba1e9223b3jadmanski # run and check 3856f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.job.run_test(testname) 3866f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.god.check_playback() 3876f731364e6207c198ac8de748a043eba1e9223b3jadmanski 3886f731364e6207c198ac8de748a043eba1e9223b3jadmanski 3896f731364e6207c198ac8de748a043eba1e9223b3jadmanski def test_run_test_logs_non_test_error_from_unhandled_error(self): 3906f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.construct_job(True) 3916f731364e6207c198ac8de748a043eba1e9223b3jadmanski 3926f731364e6207c198ac8de748a043eba1e9223b3jadmanski # set up stubs 393c5ddfd1f71caef9ec0c84c53ef7db42fcdc33e1cmbligh self.god.stub_function(self.job.pkgmgr, 'get_package_name') 3946f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.god.stub_function(self.job, "_runtest") 3956f731364e6207c198ac8de748a043eba1e9223b3jadmanski 3966f731364e6207c198ac8de748a043eba1e9223b3jadmanski # create an unhandled error object 3976f731364e6207c198ac8de748a043eba1e9223b3jadmanski class MyError(Exception): 3986f731364e6207c198ac8de748a043eba1e9223b3jadmanski pass 3996f731364e6207c198ac8de748a043eba1e9223b3jadmanski real_error = MyError("this is the real error message") 400c218083b6b96257788364ef8b7fa0fad5087fcbdmbligh unhandled_error = error.UnhandledTestError(real_error) 4016f731364e6207c198ac8de748a043eba1e9223b3jadmanski reason = first_line_comparator("Unhandled MyError: %s" % real_error) 4026f731364e6207c198ac8de748a043eba1e9223b3jadmanski 4036f731364e6207c198ac8de748a043eba1e9223b3jadmanski # set up the recording 4046f731364e6207c198ac8de748a043eba1e9223b3jadmanski testname = "error_test" 4056f731364e6207c198ac8de748a043eba1e9223b3jadmanski outputdir = os.path.join(self.job.resultdir, testname) 406c5ddfd1f71caef9ec0c84c53ef7db42fcdc33e1cmbligh self.job.pkgmgr.get_package_name.expect_call( 407c5ddfd1f71caef9ec0c84c53ef7db42fcdc33e1cmbligh testname, 'test').and_return(("", testname)) 408e39c3c0dbe16caed55f4538af78dbf057deb7fadmbligh self.job.get_state.expect_call( 409e39c3c0dbe16caed55f4538af78dbf057deb7fadmbligh self.job._RUN_NUMBER_STATE, default=0).and_return(0) 410e39c3c0dbe16caed55f4538af78dbf057deb7fadmbligh self.job.get_state.expect_call( 411e39c3c0dbe16caed55f4538af78dbf057deb7fadmbligh self.job._KERNEL_IN_TAG_STATE, default=False).and_return(False) 4126f731364e6207c198ac8de748a043eba1e9223b3jadmanski os.path.exists.expect_call(outputdir).and_return(False) 4136f731364e6207c198ac8de748a043eba1e9223b3jadmanski os.mkdir.expect_call(outputdir) 4146f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.job.record.expect_call("START", testname, testname) 4156f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.job._increment_group_level.expect_call() 4166f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.job._runtest.expect_call(testname, "", (), {}).and_raises( 4176f731364e6207c198ac8de748a043eba1e9223b3jadmanski unhandled_error) 418ca7c6fe8e064d422986c633db16123b4e628a532jadmanski self.job.record.expect_call("ERROR", testname, testname, reason) 4196f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.job._decrement_group_level.expect_call() 420b88d6dc723de628c0da22513c59997eab29ab1f3jadmanski self.job.record.expect_call("END ERROR", testname, testname) 421b6eb2f19e1225b14dee3839c2945caf6bc90fa73jadmanski self.job.harness.run_test_complete.expect_call() 42253da18eddf69243ca175d9a4603cba5b55300726mbligh utils.drop_caches.expect_call() 4236f731364e6207c198ac8de748a043eba1e9223b3jadmanski 4246f731364e6207c198ac8de748a043eba1e9223b3jadmanski # run and check 4256f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.job.run_test(testname) 4266f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.god.check_playback() 4276f731364e6207c198ac8de748a043eba1e9223b3jadmanski 4286ca37b61b4701964caf9af73bc988114cae663efjadmanski 4296ca37b61b4701964caf9af73bc988114cae663efjadmanski def test_record(self): 4306ca37b61b4701964caf9af73bc988114cae663efjadmanski self.construct_job(True) 4316ca37b61b4701964caf9af73bc988114cae663efjadmanski 4326ca37b61b4701964caf9af73bc988114cae663efjadmanski # steup 4336ca37b61b4701964caf9af73bc988114cae663efjadmanski self.job.group_level = 1 4346ca37b61b4701964caf9af73bc988114cae663efjadmanski status = '' 4356ca37b61b4701964caf9af73bc988114cae663efjadmanski status_code = "PASS" 4366ca37b61b4701964caf9af73bc988114cae663efjadmanski subdir = "subdir" 4376ca37b61b4701964caf9af73bc988114cae663efjadmanski operation = "super_fun" 4386ca37b61b4701964caf9af73bc988114cae663efjadmanski mytime = "1234" 4396ca37b61b4701964caf9af73bc988114cae663efjadmanski msg_tag = "" 4406ca37b61b4701964caf9af73bc988114cae663efjadmanski if "." in self.job.log_filename: 4416ca37b61b4701964caf9af73bc988114cae663efjadmanski msg_tag = self.job.log_filename.split(".", 1)[1] 4426ca37b61b4701964caf9af73bc988114cae663efjadmanski epoch_time = int(mytime) 4436ca37b61b4701964caf9af73bc988114cae663efjadmanski local_time = time.localtime(epoch_time) 4446ca37b61b4701964caf9af73bc988114cae663efjadmanski optional_fields = {} 4456ca37b61b4701964caf9af73bc988114cae663efjadmanski optional_fields["timestamp"] = str(epoch_time) 4466ca37b61b4701964caf9af73bc988114cae663efjadmanski optional_fields["localtime"] = time.strftime("%b %d %H:%M:%S", 4476ca37b61b4701964caf9af73bc988114cae663efjadmanski local_time) 4486ca37b61b4701964caf9af73bc988114cae663efjadmanski fields = [status_code, subdir, operation] 4496ca37b61b4701964caf9af73bc988114cae663efjadmanski fields += ["%s=%s" % x for x in optional_fields.iteritems()] 4506ca37b61b4701964caf9af73bc988114cae663efjadmanski fields.append(status) 4516ca37b61b4701964caf9af73bc988114cae663efjadmanski msg = '\t'.join(str(x) for x in fields) 4526ca37b61b4701964caf9af73bc988114cae663efjadmanski msg = '\t' * self.job.group_level + msg 4536ca37b61b4701964caf9af73bc988114cae663efjadmanski 4543cc04ee32e329ea228d33368bff679e05b2692c8jadmanski self.god.stub_function(log, "is_valid_status") 4556ca37b61b4701964caf9af73bc988114cae663efjadmanski self.god.stub_function(time, "time") 4566ca37b61b4701964caf9af73bc988114cae663efjadmanski self.god.stub_function(self.job, "open") 4576ca37b61b4701964caf9af73bc988114cae663efjadmanski 4586ca37b61b4701964caf9af73bc988114cae663efjadmanski 4596ca37b61b4701964caf9af73bc988114cae663efjadmanski # record 4601b3b376d94edee8f235f8669a047dc00751bf97ambligh log.is_valid_status.expect_call(status_code).and_return(True) 4616ca37b61b4701964caf9af73bc988114cae663efjadmanski time.time.expect_call().and_return(mytime) 4626ca37b61b4701964caf9af73bc988114cae663efjadmanski self.job.harness.test_status_detail.expect_call(status_code, subdir, 4636ca37b61b4701964caf9af73bc988114cae663efjadmanski operation, '', msg_tag) 4646ca37b61b4701964caf9af73bc988114cae663efjadmanski self.job.harness.test_status.expect_call(msg, msg_tag) 4656ca37b61b4701964caf9af73bc988114cae663efjadmanski myfile = self.god.create_mock_class(file, "file") 4666ca37b61b4701964caf9af73bc988114cae663efjadmanski status_file = os.path.join(self.job.resultdir, self.job.log_filename) 4676ca37b61b4701964caf9af73bc988114cae663efjadmanski self.job.open.expect_call(status_file, "a").and_return(myfile) 4686ca37b61b4701964caf9af73bc988114cae663efjadmanski myfile.write.expect_call(msg + "\n") 4696ca37b61b4701964caf9af73bc988114cae663efjadmanski 4706ca37b61b4701964caf9af73bc988114cae663efjadmanski dir = os.path.join(self.job.resultdir, subdir) 4716ca37b61b4701964caf9af73bc988114cae663efjadmanski status_file = os.path.join(dir, self.job.DEFAULT_LOG_FILENAME) 4726ca37b61b4701964caf9af73bc988114cae663efjadmanski self.job.open.expect_call(status_file, "a").and_return(myfile) 4736ca37b61b4701964caf9af73bc988114cae663efjadmanski myfile.write.expect_call(msg + "\n") 4746ca37b61b4701964caf9af73bc988114cae663efjadmanski 4756ca37b61b4701964caf9af73bc988114cae663efjadmanski 4766ca37b61b4701964caf9af73bc988114cae663efjadmanski # run test 4776ca37b61b4701964caf9af73bc988114cae663efjadmanski self.god.unstub(self.job, "record") 4786ca37b61b4701964caf9af73bc988114cae663efjadmanski self.job.record(status_code, subdir, operation) 4796ca37b61b4701964caf9af73bc988114cae663efjadmanski self.god.check_playback() 4806ca37b61b4701964caf9af73bc988114cae663efjadmanski 4816ca37b61b4701964caf9af73bc988114cae663efjadmanski 482067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski def test_end_boot(self): 483067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski self.construct_job(True) 484067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski 485067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski # set up the job class 486067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski self.job.group_level = 2 487067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski 488067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski self.job._decrement_group_level.expect_call() 489067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski self.job.record.expect_call("END GOOD", "sub", "reboot", 490067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski optional_fields={"kernel": "2.6.15-smp", 491067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski "patch0": "patchname"}) 492067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski 493067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski # run test 494067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski self.job.end_reboot("sub", "2.6.15-smp", ["patchname"]) 495067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski self.god.check_playback() 496067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski 497067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski 498067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski def test_end_boot_and_verify_success(self): 4991a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski self.construct_job(True) 5001a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski 5011a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski # set up the job class 5021a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski self.job.group_level = 2 5031a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski 50453da18eddf69243ca175d9a4603cba5b55300726mbligh self.god.stub_function(utils, "running_os_ident") 50553da18eddf69243ca175d9a4603cba5b55300726mbligh utils.running_os_ident.expect_call().and_return("2.6.15-smp") 5061a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski 5071a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski utils.read_one_line.expect_call("/proc/cmdline").and_return( 5081a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski "blah more-blah root=lala IDENT=81234567 blah-again") 5091a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski 5103bf79ca4d5490f9af09e1ddc39b8df5343b34d06mbligh self.god.stub_function(utils, "running_os_full_version") 5113bf79ca4d5490f9af09e1ddc39b8df5343b34d06mbligh utils.running_os_full_version.expect_call().and_return("2.6.15-smp") 5123bf79ca4d5490f9af09e1ddc39b8df5343b34d06mbligh 5131a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski self.job.record.expect_call("GOOD", "sub", "reboot.verify", 5141a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski "2.6.15-smp") 5151a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski self.job._decrement_group_level.expect_call() 5161a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski self.job.record.expect_call("END GOOD", "sub", "reboot", 5171a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski optional_fields={"kernel": "2.6.15-smp"}) 5181a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski 5191a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski # run test 520067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski self.job.end_reboot_and_verify(81234567, "2.6.15-smp", "sub") 5211a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski self.god.check_playback() 5221a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski 5231a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski 524067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski def test_end_boot_and_verify_failure(self): 5251a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski self.construct_job(True) 5261a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski 5271a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski # set up the job class 5281a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski self.job.group_level = 2 5291a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski 53053da18eddf69243ca175d9a4603cba5b55300726mbligh self.god.stub_function(utils, "running_os_ident") 53153da18eddf69243ca175d9a4603cba5b55300726mbligh utils.running_os_ident.expect_call().and_return("2.6.15-smp") 5321a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski 5331a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski utils.read_one_line.expect_call("/proc/cmdline").and_return( 5341a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski "blah more-blah root=lala IDENT=81234567 blah-again") 5351a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski 5361a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski self.job.record.expect_call("ABORT", "sub", "reboot.verify", 5371a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski "boot failure") 5381a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski self.job._decrement_group_level.expect_call() 5391a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski self.job.record.expect_call("END ABORT", "sub", "reboot", 5401a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski optional_fields={"kernel": "2.6.15-smp"}) 5411a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski 5421a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski # run test 543067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski self.assertRaises(error.JobError, self.job.end_reboot_and_verify, 5441a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski 91234567, "2.6.16-smp", "sub") 5451a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski self.god.check_playback() 5461a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski 5471a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski 5485bba5ca127e99428a3cc6c823b51a8b3062d06bdmblighif __name__ == "__main__": 5495bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh unittest.main() 550