job_unittest.py revision d948bfb7729e94b457bafca91a13c963d7edcba6
15bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh#!/usr/bin/python 25bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 37629f148feee19efa11bc041d49943aacc43c482showardimport os, unittest, shutil, sys, time, StringIO, logging.config 45bba5ca127e99428a3cc6c823b51a8b3062d06bdmblighimport common 56f731364e6207c198ac8de748a043eba1e9223b3jadmanski 65bba5ca127e99428a3cc6c823b51a8b3062d06bdmblighfrom autotest_lib.client.bin import job, boottool, config, sysinfo, harness 7b0b58a2ae3eee9cac2b36cce70ba4b1483d6b442mblighfrom autotest_lib.client.bin import test, xen, kernel, utils 853da18eddf69243ca175d9a4603cba5b55300726mblighfrom autotest_lib.client.common_lib import packages, error, log 95bba5ca127e99428a3cc6c823b51a8b3062d06bdmblighfrom autotest_lib.client.common_lib.test_utils import mock 105bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 115bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 126f731364e6207c198ac8de748a043eba1e9223b3jadmanskiclass first_line_comparator(mock.argument_comparator): 136f731364e6207c198ac8de748a043eba1e9223b3jadmanski def __init__(self, first_line): 146f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.first_line = first_line 156f731364e6207c198ac8de748a043eba1e9223b3jadmanski 166f731364e6207c198ac8de748a043eba1e9223b3jadmanski 176f731364e6207c198ac8de748a043eba1e9223b3jadmanski def is_satisfied_by(self, parameter): 186f731364e6207c198ac8de748a043eba1e9223b3jadmanski return self.first_line == parameter.splitlines()[0] 196f731364e6207c198ac8de748a043eba1e9223b3jadmanski 206f731364e6207c198ac8de748a043eba1e9223b3jadmanski 215bba5ca127e99428a3cc6c823b51a8b3062d06bdmblighclass TestBaseJob(unittest.TestCase): 225bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh def setUp(self): 235bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # make god 245bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god = mock.mock_god() 255bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 265bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # need to set some environ variables 275bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.autodir = "autodir" 285bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh os.environ['AUTODIR'] = self.autodir 295bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 305bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # set up some variables 315bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.control = "control" 325bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.jobtag = "jobtag" 335bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 347629f148feee19efa11bc041d49943aacc43c482showard # get rid of stdout and logging 3554705a0d9dbe23800f14e785edbd6d3f5eebaff3mbligh sys.stdout = StringIO.StringIO() 367629f148feee19efa11bc041d49943aacc43c482showard self.god.stub_with(logging.config, 'fileConfig', 377629f148feee19efa11bc041d49943aacc43c482showard lambda x: None) 3854705a0d9dbe23800f14e785edbd6d3f5eebaff3mbligh 395bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # stub out some stuff 405bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.stub_function(os.path, 'exists') 41c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh self.god.stub_function(os.path, 'isdir') 427629f148feee19efa11bc041d49943aacc43c482showard self.god.stub_function(os, 'makedirs') 435bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.stub_function(os, 'mkdir') 447629f148feee19efa11bc041d49943aacc43c482showard self.god.stub_function(os, 'remove') 457629f148feee19efa11bc041d49943aacc43c482showard self.god.stub_function(shutil, 'rmtree') 465bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.stub_function(shutil, 'copyfile') 475bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.stub_function(job, 'open') 485bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.stub_function(utils, 'system') 4953da18eddf69243ca175d9a4603cba5b55300726mbligh self.god.stub_function(utils, 'drop_caches') 505bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.stub_function(harness, 'select') 515bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.stub_function(sysinfo, 'log_per_reboot_data') 525bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 535bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.stub_class(config, 'config') 545bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.stub_class(boottool, 'boottool') 55cefe2653333168a08c891f72a708b66855f07853jadmanski self.god.stub_class(sysinfo, 'sysinfo') 565bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 575bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 585bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh def tearDown(self): 5954705a0d9dbe23800f14e785edbd6d3f5eebaff3mbligh sys.stdout = sys.__stdout__ 605bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.unstub_all() 615bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 625bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 635bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh def construct_job(self, cont): 645bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # will construct class instance using __new__ 655bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.job = job.base_job.__new__(job.base_job) 665bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 675bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # now some specific stubs 685bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.stub_function(self.job, '_load_state') 695bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.stub_function(self.job, '_init_group_level') 705bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.stub_function(self.job, 'config_get') 71d948bfb7729e94b457bafca91a13c963d7edcba6mbligh self.god.stub_function(self.job, 'config_set') 725bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.stub_function(self.job, 'record') 735bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.stub_function(self.job, '_increment_group_level') 746f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.god.stub_function(self.job, '_decrement_group_level') 755bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.stub_function(self.job, 'get_state') 765bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 775bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # other setup 785bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh tmpdir = os.path.join(self.autodir, 'tmp') 795bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh results = os.path.join(self.autodir, 'results') 805bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh download = os.path.join(self.autodir, 'tests', 'download') 815bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh resultdir = os.path.join(self.autodir, 'results', self.jobtag) 82c5ddfd1f71caef9ec0c84c53ef7db42fcdc33e1cmbligh pkgdir = os.path.join(self.autodir, 'packages') 835bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 845bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # record 857629f148feee19efa11bc041d49943aacc43c482showard os.path.exists.expect_call(resultdir).and_return(False) 867629f148feee19efa11bc041d49943aacc43c482showard os.makedirs.expect_call(resultdir) 877629f148feee19efa11bc041d49943aacc43c482showard 8853da18eddf69243ca175d9a4603cba5b55300726mbligh utils.drop_caches.expect_call() 895bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.job._load_state.expect_call() 9023afbec41f6275bef4e80c36726916b0be564204jadmanski self.job.get_state.expect_call("__run_test_cleanup", 9123afbec41f6275bef4e80c36726916b0be564204jadmanski default=True).and_return(True) 92c09fc1543a3f77026bab728770aa0191feaddd07jadmanski job_sysinfo = sysinfo.sysinfo.expect_new(resultdir) 93c09fc1543a3f77026bab728770aa0191feaddd07jadmanski self.job.get_state.expect_call("__sysinfo", 94c09fc1543a3f77026bab728770aa0191feaddd07jadmanski None).and_return(None) 950910844396c68a8747dc1ab580fb898ecff2469embligh self.job.get_state.expect_call("__last_boot_tag", 960910844396c68a8747dc1ab580fb898ecff2469embligh default=None).and_return(None) 975bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh if not cont: 985bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh os.path.exists.expect_call(tmpdir).and_return(False) 995bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh os.mkdir.expect_call(tmpdir) 100c5ddfd1f71caef9ec0c84c53ef7db42fcdc33e1cmbligh os.path.exists.expect_call(pkgdir).and_return(False) 101c5ddfd1f71caef9ec0c84c53ef7db42fcdc33e1cmbligh os.mkdir.expect_call(pkgdir) 1025bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh os.path.exists.expect_call(results).and_return(False) 1035bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh os.mkdir.expect_call(results) 1045bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh os.path.exists.expect_call(download).and_return(False) 1055bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh os.mkdir.expect_call(download) 1067629f148feee19efa11bc041d49943aacc43c482showard os.path.exists.expect_call(resultdir).and_return(False) 1077629f148feee19efa11bc041d49943aacc43c482showard os.makedirs.expect_call(os.path.join(resultdir, 'debug')) 1087629f148feee19efa11bc041d49943aacc43c482showard os.makedirs.expect_call(os.path.join(resultdir, 'analysis')) 1095bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh shutil.copyfile.expect_call(mock.is_string_comparator(), 1105bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh os.path.join(resultdir, 'control')) 1115bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 1125bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.job._init_group_level.expect_call() 1135bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.config = config.config.expect_new(self.job) 1145bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh my_harness = self.god.create_mock_class(harness.harness, 1155bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 'my_harness') 1165bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh harness.select.expect_call(None, 1175bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.job).and_return(my_harness) 1185bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.job.config_get.expect_call( 1195bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 'boottool.executable').and_return(None) 1205bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh bootloader = boottool.boottool.expect_new(None) 121cefe2653333168a08c891f72a708b66855f07853jadmanski job_sysinfo.log_per_reboot_data.expect_call() 1225bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh if not cont: 1235bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.job.record.expect_call('START', None, None) 1245bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.job._increment_group_level.expect_call() 1255bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 1265bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh my_harness.run_start.expect_call() 1275bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.job.get_state.expect_call('__monitor_disk', 1285bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh default=0.0).and_return(0.0) 1295bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 130d948bfb7729e94b457bafca91a13c963d7edcba6mbligh self.god.stub_function(utils, 'read_one_line') 131d948bfb7729e94b457bafca91a13c963d7edcba6mbligh utils.read_one_line.expect_call('/proc/cmdline').and_return( 132d948bfb7729e94b457bafca91a13c963d7edcba6mbligh 'blah more-blah root=lala IDENT=81234567 blah-again console=tty1') 133d948bfb7729e94b457bafca91a13c963d7edcba6mbligh self.job.config_set.expect_call('boot.default_args', 134d948bfb7729e94b457bafca91a13c963d7edcba6mbligh 'more-blah console=tty1') 1355bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # finish constructor 136d948bfb7729e94b457bafca91a13c963d7edcba6mbligh self.job.__init__(self.control, self.jobtag, cont, 137d948bfb7729e94b457bafca91a13c963d7edcba6mbligh extra_copy_cmdline=['more-blah']) 1385bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 1395bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # check 1405bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.check_playback() 1415bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 142c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh 1435bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh def test_constructor(self): 1445bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.construct_job(False) 1455bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 1465bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 1475bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh def test_monitor_disk_usage(self): 1485bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.construct_job(True) 1495bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 1505bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # setup 1515bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.stub_function(self.job, 'set_state') 1525bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 1535bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # record 1545bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh max_rate = 10.0 1555bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.job.set_state.expect_call('__monitor_disk', max_rate) 1565bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 1575bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # test 1585bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.job.monitor_disk_usage(max_rate) 1595bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.check_playback() 1605bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 1615bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 1626ca37b61b4701964caf9af73bc988114cae663efjadmanski def test_relative_path(self): 163c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh self.construct_job(True) 164c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh dummy = "asdf" 165c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh ret = self.job.relative_path(os.path.join(self.job.resultdir, dummy)) 166c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh self.assertEquals(ret, dummy) 167c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh 168c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh 169c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh def test_control_functions(self): 170c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh self.construct_job(True) 171c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh control_file = "blah" 172c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh self.job.control_set(control_file) 173c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh self.assertEquals(self.job.control_get(), os.path.abspath(control_file)) 174c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh 175c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh 1765bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh def test_harness_select(self): 1775bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.construct_job(True) 1785bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 1795bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # record 1805bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh which = "which" 1815bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh harness.select.expect_call(which, self.job).and_return(None) 1825bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 1835bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # run and test 1845bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.job.harness_select(which) 1855bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.check_playback() 1865bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 1875bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 1885bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh def test_config_set(self): 1895bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.construct_job(True) 1905bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 191d948bfb7729e94b457bafca91a13c963d7edcba6mbligh # unstub config_set 192d948bfb7729e94b457bafca91a13c963d7edcba6mbligh self.god.unstub(self.job, 'config_set') 1935bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # record 1945bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh name = "foo" 1955bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh val = 10 1965bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.config.set.expect_call(name, val) 1975bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 1985bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # run and test 1995bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.job.config_set(name, val) 2005bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.check_playback() 2015bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 2025bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 2035bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh def test_config_get(self): 2045bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.construct_job(True) 2055bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 2065bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # unstub config_get 2075bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.unstub(self.job, 'config_get') 2085bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # record 2095bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh name = "foo" 2105bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh val = 10 2115bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.config.get.expect_call(name).and_return(val) 2125bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 2135bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh # run and test 2145bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.job.config_get(name) 2155bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh self.god.check_playback() 2165bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 2175bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh 218c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh def test_setup_dirs_raise(self): 219c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh self.construct_job(True) 220c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh 221c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh # setup 222c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh results_dir = 'foo' 223c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh tmp_dir = 'bar' 224c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh 225c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh # record 226c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh os.path.exists.expect_call(tmp_dir).and_return(True) 227c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh os.path.isdir.expect_call(tmp_dir).and_return(False) 228c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh 229c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh # test 230c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh self.assertRaises(ValueError, self.job.setup_dirs, results_dir, tmp_dir) 231c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh self.god.check_playback() 232c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh 233c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh 234c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh def test_setup_dirs(self): 235c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh self.construct_job(True) 236c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh 237c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh # setup 238c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh results_dir1 = os.path.join(self.job.resultdir, 'build') 239c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh results_dir2 = os.path.join(self.job.resultdir, 'build.2') 240c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh results_dir3 = os.path.join(self.job.resultdir, 'build.3') 241c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh tmp_dir = 'bar' 242c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh 243c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh # record 244c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh os.path.exists.expect_call(tmp_dir).and_return(False) 245c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh os.mkdir.expect_call(tmp_dir) 246c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh os.path.isdir.expect_call(tmp_dir).and_return(True) 247c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh os.path.exists.expect_call(results_dir1).and_return(True) 248c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh os.path.exists.expect_call(results_dir2).and_return(True) 249c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh os.path.exists.expect_call(results_dir3).and_return(False) 250c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh os.path.exists.expect_call(results_dir3).and_return(False) 251c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh os.mkdir.expect_call(results_dir3) 252c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh 253c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh # test 254c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh self.assertEqual(self.job.setup_dirs(None, tmp_dir), 255c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh (results_dir3, tmp_dir)) 256c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh self.god.check_playback() 257c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh 258c1f8cedaa425fa57813e4e8ce6db2b84676816bambligh 2596ca37b61b4701964caf9af73bc988114cae663efjadmanski def test_xen(self): 2606ca37b61b4701964caf9af73bc988114cae663efjadmanski self.construct_job(True) 2616ca37b61b4701964caf9af73bc988114cae663efjadmanski 2626ca37b61b4701964caf9af73bc988114cae663efjadmanski # setup 2636ca37b61b4701964caf9af73bc988114cae663efjadmanski self.god.stub_function(self.job, "setup_dirs") 2646ca37b61b4701964caf9af73bc988114cae663efjadmanski self.god.stub_class(xen, "xen") 2656ca37b61b4701964caf9af73bc988114cae663efjadmanski results = 'results_dir' 2666ca37b61b4701964caf9af73bc988114cae663efjadmanski tmp = 'tmp' 2676ca37b61b4701964caf9af73bc988114cae663efjadmanski build = 'xen' 2686ca37b61b4701964caf9af73bc988114cae663efjadmanski base_tree = object() 2696ca37b61b4701964caf9af73bc988114cae663efjadmanski 2706ca37b61b4701964caf9af73bc988114cae663efjadmanski # record 2716ca37b61b4701964caf9af73bc988114cae663efjadmanski self.job.setup_dirs.expect_call(results, 2726ca37b61b4701964caf9af73bc988114cae663efjadmanski tmp).and_return((results, tmp)) 2736ca37b61b4701964caf9af73bc988114cae663efjadmanski myxen = xen.xen.expect_new(self.job, base_tree, results, tmp, build, 2746ca37b61b4701964caf9af73bc988114cae663efjadmanski False, None) 2756ca37b61b4701964caf9af73bc988114cae663efjadmanski 2766ca37b61b4701964caf9af73bc988114cae663efjadmanski # run job and check 2776ca37b61b4701964caf9af73bc988114cae663efjadmanski axen = self.job.xen(base_tree, results, tmp) 2786ca37b61b4701964caf9af73bc988114cae663efjadmanski self.god.check_playback() 2796ca37b61b4701964caf9af73bc988114cae663efjadmanski self.assertEquals(myxen, axen) 2806ca37b61b4701964caf9af73bc988114cae663efjadmanski 2816ca37b61b4701964caf9af73bc988114cae663efjadmanski 2826ca37b61b4701964caf9af73bc988114cae663efjadmanski def test_kernel_rpm(self): 2836ca37b61b4701964caf9af73bc988114cae663efjadmanski self.construct_job(True) 2846ca37b61b4701964caf9af73bc988114cae663efjadmanski 2856ca37b61b4701964caf9af73bc988114cae663efjadmanski # setup 2866ca37b61b4701964caf9af73bc988114cae663efjadmanski self.god.stub_function(self.job, "setup_dirs") 2876ca37b61b4701964caf9af73bc988114cae663efjadmanski self.god.stub_class(kernel, "rpm_kernel") 2886ca37b61b4701964caf9af73bc988114cae663efjadmanski self.god.stub_function(kernel, "preprocess_path") 289c5ddfd1f71caef9ec0c84c53ef7db42fcdc33e1cmbligh self.god.stub_function(self.job.pkgmgr, "fetch_pkg") 290e7785cc37c2081ebd3815673ef73750f7f10dfe0mbligh self.god.stub_function(utils, "get_os_vendor") 2916ca37b61b4701964caf9af73bc988114cae663efjadmanski results = 'results_dir' 2926ca37b61b4701964caf9af73bc988114cae663efjadmanski tmp = 'tmp' 2936ca37b61b4701964caf9af73bc988114cae663efjadmanski build = 'xen' 2946ca37b61b4701964caf9af73bc988114cae663efjadmanski path = "somepath.rpm" 295c5ddfd1f71caef9ec0c84c53ef7db42fcdc33e1cmbligh packages_dir = os.path.join("autodir/packages", path) 2966ca37b61b4701964caf9af73bc988114cae663efjadmanski 2976ca37b61b4701964caf9af73bc988114cae663efjadmanski # record 2986ca37b61b4701964caf9af73bc988114cae663efjadmanski self.job.setup_dirs.expect_call(results, 2996ca37b61b4701964caf9af73bc988114cae663efjadmanski tmp).and_return((results, tmp)) 3006ca37b61b4701964caf9af73bc988114cae663efjadmanski kernel.preprocess_path.expect_call(path).and_return(path) 3013bf79ca4d5490f9af09e1ddc39b8df5343b34d06mbligh os.path.exists.expect_call(path).and_return(False) 302c5ddfd1f71caef9ec0c84c53ef7db42fcdc33e1cmbligh self.job.pkgmgr.fetch_pkg.expect_call(path, packages_dir, repo_url='') 303e7785cc37c2081ebd3815673ef73750f7f10dfe0mbligh utils.get_os_vendor.expect_call() 304c5ddfd1f71caef9ec0c84c53ef7db42fcdc33e1cmbligh mykernel = kernel.rpm_kernel.expect_new(self.job, packages_dir, 305c5ddfd1f71caef9ec0c84c53ef7db42fcdc33e1cmbligh results) 3066ca37b61b4701964caf9af73bc988114cae663efjadmanski 3076ca37b61b4701964caf9af73bc988114cae663efjadmanski # check 3086ca37b61b4701964caf9af73bc988114cae663efjadmanski akernel = self.job.kernel(path, results, tmp) 3096ca37b61b4701964caf9af73bc988114cae663efjadmanski self.god.check_playback() 3106ca37b61b4701964caf9af73bc988114cae663efjadmanski self.assertEquals(mykernel, akernel) 3116ca37b61b4701964caf9af73bc988114cae663efjadmanski 3126ca37b61b4701964caf9af73bc988114cae663efjadmanski 3136ca37b61b4701964caf9af73bc988114cae663efjadmanski def test_kernel(self): 3146ca37b61b4701964caf9af73bc988114cae663efjadmanski self.construct_job(True) 3156ca37b61b4701964caf9af73bc988114cae663efjadmanski 3166ca37b61b4701964caf9af73bc988114cae663efjadmanski # setup 3176ca37b61b4701964caf9af73bc988114cae663efjadmanski self.god.stub_function(self.job, "setup_dirs") 3186ca37b61b4701964caf9af73bc988114cae663efjadmanski self.god.stub_class(kernel, "kernel") 3196ca37b61b4701964caf9af73bc988114cae663efjadmanski self.god.stub_function(kernel, "preprocess_path") 3206ca37b61b4701964caf9af73bc988114cae663efjadmanski results = 'results_dir' 3216ca37b61b4701964caf9af73bc988114cae663efjadmanski tmp = 'tmp' 3226ca37b61b4701964caf9af73bc988114cae663efjadmanski build = 'linux' 3236ca37b61b4701964caf9af73bc988114cae663efjadmanski path = "somepath.deb" 3246ca37b61b4701964caf9af73bc988114cae663efjadmanski 3256ca37b61b4701964caf9af73bc988114cae663efjadmanski # record 3266ca37b61b4701964caf9af73bc988114cae663efjadmanski self.job.setup_dirs.expect_call(results, 3276ca37b61b4701964caf9af73bc988114cae663efjadmanski tmp).and_return((results, tmp)) 3286ca37b61b4701964caf9af73bc988114cae663efjadmanski kernel.preprocess_path.expect_call(path).and_return(path) 3296ca37b61b4701964caf9af73bc988114cae663efjadmanski mykernel = kernel.kernel.expect_new(self.job, path, results, tmp, 3306ca37b61b4701964caf9af73bc988114cae663efjadmanski build, False) 3316ca37b61b4701964caf9af73bc988114cae663efjadmanski 3326ca37b61b4701964caf9af73bc988114cae663efjadmanski # check 3336ca37b61b4701964caf9af73bc988114cae663efjadmanski akernel = self.job.kernel(path, results, tmp) 3346ca37b61b4701964caf9af73bc988114cae663efjadmanski self.god.check_playback() 3356ca37b61b4701964caf9af73bc988114cae663efjadmanski self.assertEquals(mykernel, akernel) 3366ca37b61b4701964caf9af73bc988114cae663efjadmanski 3376ca37b61b4701964caf9af73bc988114cae663efjadmanski 3386f731364e6207c198ac8de748a043eba1e9223b3jadmanski def test_run_test_logs_test_error_from_unhandled_error(self): 3396f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.construct_job(True) 3406f731364e6207c198ac8de748a043eba1e9223b3jadmanski 3416f731364e6207c198ac8de748a043eba1e9223b3jadmanski # set up stubs 342c5ddfd1f71caef9ec0c84c53ef7db42fcdc33e1cmbligh self.god.stub_function(self.job.pkgmgr, 'get_package_name') 3436f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.god.stub_function(self.job, "_runtest") 3446f731364e6207c198ac8de748a043eba1e9223b3jadmanski 3456f731364e6207c198ac8de748a043eba1e9223b3jadmanski # create an unhandled error object 3466f731364e6207c198ac8de748a043eba1e9223b3jadmanski class MyError(error.TestError): 3476f731364e6207c198ac8de748a043eba1e9223b3jadmanski pass 3486f731364e6207c198ac8de748a043eba1e9223b3jadmanski real_error = MyError("this is the real error message") 349c218083b6b96257788364ef8b7fa0fad5087fcbdmbligh unhandled_error = error.UnhandledTestError(real_error) 3506f731364e6207c198ac8de748a043eba1e9223b3jadmanski 3516f731364e6207c198ac8de748a043eba1e9223b3jadmanski # set up the recording 3526f731364e6207c198ac8de748a043eba1e9223b3jadmanski testname = "error_test" 3536f731364e6207c198ac8de748a043eba1e9223b3jadmanski outputdir = os.path.join(self.job.resultdir, testname) 354c5ddfd1f71caef9ec0c84c53ef7db42fcdc33e1cmbligh self.job.pkgmgr.get_package_name.expect_call( 355c5ddfd1f71caef9ec0c84c53ef7db42fcdc33e1cmbligh testname, 'test').and_return(("", testname)) 356e39c3c0dbe16caed55f4538af78dbf057deb7fadmbligh self.job.get_state.expect_call( 357e39c3c0dbe16caed55f4538af78dbf057deb7fadmbligh self.job._RUN_NUMBER_STATE, default=0).and_return(0) 358e39c3c0dbe16caed55f4538af78dbf057deb7fadmbligh self.job.get_state.expect_call( 359e39c3c0dbe16caed55f4538af78dbf057deb7fadmbligh self.job._KERNEL_IN_TAG_STATE, default=False).and_return(False) 3606f731364e6207c198ac8de748a043eba1e9223b3jadmanski os.path.exists.expect_call(outputdir).and_return(False) 3616f731364e6207c198ac8de748a043eba1e9223b3jadmanski os.mkdir.expect_call(outputdir) 3626f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.job.record.expect_call("START", testname, testname) 3636f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.job._increment_group_level.expect_call() 3646f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.job._runtest.expect_call(testname, "", (), {}).and_raises( 3656f731364e6207c198ac8de748a043eba1e9223b3jadmanski unhandled_error) 366ca7c6fe8e064d422986c633db16123b4e628a532jadmanski self.job.record.expect_call("ERROR", testname, testname, 3676f731364e6207c198ac8de748a043eba1e9223b3jadmanski first_line_comparator(str(real_error))) 3686f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.job._decrement_group_level.expect_call() 369b88d6dc723de628c0da22513c59997eab29ab1f3jadmanski self.job.record.expect_call("END ERROR", testname, testname) 370b6eb2f19e1225b14dee3839c2945caf6bc90fa73jadmanski self.job.harness.run_test_complete.expect_call() 37153da18eddf69243ca175d9a4603cba5b55300726mbligh utils.drop_caches.expect_call() 3726f731364e6207c198ac8de748a043eba1e9223b3jadmanski 3736f731364e6207c198ac8de748a043eba1e9223b3jadmanski # run and check 3746f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.job.run_test(testname) 3756f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.god.check_playback() 3766f731364e6207c198ac8de748a043eba1e9223b3jadmanski 3776f731364e6207c198ac8de748a043eba1e9223b3jadmanski 3786f731364e6207c198ac8de748a043eba1e9223b3jadmanski def test_run_test_logs_non_test_error_from_unhandled_error(self): 3796f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.construct_job(True) 3806f731364e6207c198ac8de748a043eba1e9223b3jadmanski 3816f731364e6207c198ac8de748a043eba1e9223b3jadmanski # set up stubs 382c5ddfd1f71caef9ec0c84c53ef7db42fcdc33e1cmbligh self.god.stub_function(self.job.pkgmgr, 'get_package_name') 3836f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.god.stub_function(self.job, "_runtest") 3846f731364e6207c198ac8de748a043eba1e9223b3jadmanski 3856f731364e6207c198ac8de748a043eba1e9223b3jadmanski # create an unhandled error object 3866f731364e6207c198ac8de748a043eba1e9223b3jadmanski class MyError(Exception): 3876f731364e6207c198ac8de748a043eba1e9223b3jadmanski pass 3886f731364e6207c198ac8de748a043eba1e9223b3jadmanski real_error = MyError("this is the real error message") 389c218083b6b96257788364ef8b7fa0fad5087fcbdmbligh unhandled_error = error.UnhandledTestError(real_error) 3906f731364e6207c198ac8de748a043eba1e9223b3jadmanski reason = first_line_comparator("Unhandled MyError: %s" % real_error) 3916f731364e6207c198ac8de748a043eba1e9223b3jadmanski 3926f731364e6207c198ac8de748a043eba1e9223b3jadmanski # set up the recording 3936f731364e6207c198ac8de748a043eba1e9223b3jadmanski testname = "error_test" 3946f731364e6207c198ac8de748a043eba1e9223b3jadmanski outputdir = os.path.join(self.job.resultdir, testname) 395c5ddfd1f71caef9ec0c84c53ef7db42fcdc33e1cmbligh self.job.pkgmgr.get_package_name.expect_call( 396c5ddfd1f71caef9ec0c84c53ef7db42fcdc33e1cmbligh testname, 'test').and_return(("", testname)) 397e39c3c0dbe16caed55f4538af78dbf057deb7fadmbligh self.job.get_state.expect_call( 398e39c3c0dbe16caed55f4538af78dbf057deb7fadmbligh self.job._RUN_NUMBER_STATE, default=0).and_return(0) 399e39c3c0dbe16caed55f4538af78dbf057deb7fadmbligh self.job.get_state.expect_call( 400e39c3c0dbe16caed55f4538af78dbf057deb7fadmbligh self.job._KERNEL_IN_TAG_STATE, default=False).and_return(False) 4016f731364e6207c198ac8de748a043eba1e9223b3jadmanski os.path.exists.expect_call(outputdir).and_return(False) 4026f731364e6207c198ac8de748a043eba1e9223b3jadmanski os.mkdir.expect_call(outputdir) 4036f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.job.record.expect_call("START", testname, testname) 4046f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.job._increment_group_level.expect_call() 4056f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.job._runtest.expect_call(testname, "", (), {}).and_raises( 4066f731364e6207c198ac8de748a043eba1e9223b3jadmanski unhandled_error) 407ca7c6fe8e064d422986c633db16123b4e628a532jadmanski self.job.record.expect_call("ERROR", testname, testname, reason) 4086f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.job._decrement_group_level.expect_call() 409b88d6dc723de628c0da22513c59997eab29ab1f3jadmanski self.job.record.expect_call("END ERROR", testname, testname) 410b6eb2f19e1225b14dee3839c2945caf6bc90fa73jadmanski self.job.harness.run_test_complete.expect_call() 41153da18eddf69243ca175d9a4603cba5b55300726mbligh utils.drop_caches.expect_call() 4126f731364e6207c198ac8de748a043eba1e9223b3jadmanski 4136f731364e6207c198ac8de748a043eba1e9223b3jadmanski # run and check 4146f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.job.run_test(testname) 4156f731364e6207c198ac8de748a043eba1e9223b3jadmanski self.god.check_playback() 4166f731364e6207c198ac8de748a043eba1e9223b3jadmanski 4176ca37b61b4701964caf9af73bc988114cae663efjadmanski 4186ca37b61b4701964caf9af73bc988114cae663efjadmanski def test_record(self): 4196ca37b61b4701964caf9af73bc988114cae663efjadmanski self.construct_job(True) 4206ca37b61b4701964caf9af73bc988114cae663efjadmanski 4216ca37b61b4701964caf9af73bc988114cae663efjadmanski # steup 4226ca37b61b4701964caf9af73bc988114cae663efjadmanski self.job.group_level = 1 4236ca37b61b4701964caf9af73bc988114cae663efjadmanski status = '' 4246ca37b61b4701964caf9af73bc988114cae663efjadmanski status_code = "PASS" 4256ca37b61b4701964caf9af73bc988114cae663efjadmanski subdir = "subdir" 4266ca37b61b4701964caf9af73bc988114cae663efjadmanski operation = "super_fun" 4276ca37b61b4701964caf9af73bc988114cae663efjadmanski mytime = "1234" 4286ca37b61b4701964caf9af73bc988114cae663efjadmanski msg_tag = "" 4296ca37b61b4701964caf9af73bc988114cae663efjadmanski if "." in self.job.log_filename: 4306ca37b61b4701964caf9af73bc988114cae663efjadmanski msg_tag = self.job.log_filename.split(".", 1)[1] 4316ca37b61b4701964caf9af73bc988114cae663efjadmanski epoch_time = int(mytime) 4326ca37b61b4701964caf9af73bc988114cae663efjadmanski local_time = time.localtime(epoch_time) 4336ca37b61b4701964caf9af73bc988114cae663efjadmanski optional_fields = {} 4346ca37b61b4701964caf9af73bc988114cae663efjadmanski optional_fields["timestamp"] = str(epoch_time) 4356ca37b61b4701964caf9af73bc988114cae663efjadmanski optional_fields["localtime"] = time.strftime("%b %d %H:%M:%S", 4366ca37b61b4701964caf9af73bc988114cae663efjadmanski local_time) 4376ca37b61b4701964caf9af73bc988114cae663efjadmanski fields = [status_code, subdir, operation] 4386ca37b61b4701964caf9af73bc988114cae663efjadmanski fields += ["%s=%s" % x for x in optional_fields.iteritems()] 4396ca37b61b4701964caf9af73bc988114cae663efjadmanski fields.append(status) 4406ca37b61b4701964caf9af73bc988114cae663efjadmanski msg = '\t'.join(str(x) for x in fields) 4416ca37b61b4701964caf9af73bc988114cae663efjadmanski msg = '\t' * self.job.group_level + msg 4426ca37b61b4701964caf9af73bc988114cae663efjadmanski 4433cc04ee32e329ea228d33368bff679e05b2692c8jadmanski self.god.stub_function(log, "is_valid_status") 4446ca37b61b4701964caf9af73bc988114cae663efjadmanski self.god.stub_function(time, "time") 4456ca37b61b4701964caf9af73bc988114cae663efjadmanski self.god.stub_function(self.job, "open") 4466ca37b61b4701964caf9af73bc988114cae663efjadmanski 4476ca37b61b4701964caf9af73bc988114cae663efjadmanski 4486ca37b61b4701964caf9af73bc988114cae663efjadmanski # record 4491b3b376d94edee8f235f8669a047dc00751bf97ambligh log.is_valid_status.expect_call(status_code).and_return(True) 4506ca37b61b4701964caf9af73bc988114cae663efjadmanski time.time.expect_call().and_return(mytime) 4516ca37b61b4701964caf9af73bc988114cae663efjadmanski self.job.harness.test_status_detail.expect_call(status_code, subdir, 4526ca37b61b4701964caf9af73bc988114cae663efjadmanski operation, '', msg_tag) 4536ca37b61b4701964caf9af73bc988114cae663efjadmanski self.job.harness.test_status.expect_call(msg, msg_tag) 4546ca37b61b4701964caf9af73bc988114cae663efjadmanski myfile = self.god.create_mock_class(file, "file") 4556ca37b61b4701964caf9af73bc988114cae663efjadmanski status_file = os.path.join(self.job.resultdir, self.job.log_filename) 4566ca37b61b4701964caf9af73bc988114cae663efjadmanski self.job.open.expect_call(status_file, "a").and_return(myfile) 4576ca37b61b4701964caf9af73bc988114cae663efjadmanski myfile.write.expect_call(msg + "\n") 4586ca37b61b4701964caf9af73bc988114cae663efjadmanski 4596ca37b61b4701964caf9af73bc988114cae663efjadmanski dir = os.path.join(self.job.resultdir, subdir) 4606ca37b61b4701964caf9af73bc988114cae663efjadmanski status_file = os.path.join(dir, self.job.DEFAULT_LOG_FILENAME) 4616ca37b61b4701964caf9af73bc988114cae663efjadmanski self.job.open.expect_call(status_file, "a").and_return(myfile) 4626ca37b61b4701964caf9af73bc988114cae663efjadmanski myfile.write.expect_call(msg + "\n") 4636ca37b61b4701964caf9af73bc988114cae663efjadmanski 4646ca37b61b4701964caf9af73bc988114cae663efjadmanski 4656ca37b61b4701964caf9af73bc988114cae663efjadmanski # run test 4666ca37b61b4701964caf9af73bc988114cae663efjadmanski self.god.unstub(self.job, "record") 4676ca37b61b4701964caf9af73bc988114cae663efjadmanski self.job.record(status_code, subdir, operation) 4686ca37b61b4701964caf9af73bc988114cae663efjadmanski self.god.check_playback() 4696ca37b61b4701964caf9af73bc988114cae663efjadmanski 4706ca37b61b4701964caf9af73bc988114cae663efjadmanski 471067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski def test_end_boot(self): 472067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski self.construct_job(True) 473067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski 474067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski # set up the job class 475067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski self.job.group_level = 2 476067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski 477067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski self.job._decrement_group_level.expect_call() 478067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski self.job.record.expect_call("END GOOD", "sub", "reboot", 479067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski optional_fields={"kernel": "2.6.15-smp", 480067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski "patch0": "patchname"}) 481067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski 482067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski # run test 483067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski self.job.end_reboot("sub", "2.6.15-smp", ["patchname"]) 484067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski self.god.check_playback() 485067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski 486067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski 487067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski def test_end_boot_and_verify_success(self): 4881a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski self.construct_job(True) 4891a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski 4901a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski # set up the job class 4911a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski self.job.group_level = 2 4921a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski 49353da18eddf69243ca175d9a4603cba5b55300726mbligh self.god.stub_function(utils, "running_os_ident") 49453da18eddf69243ca175d9a4603cba5b55300726mbligh utils.running_os_ident.expect_call().and_return("2.6.15-smp") 4951a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski 4961a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski utils.read_one_line.expect_call("/proc/cmdline").and_return( 4971a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski "blah more-blah root=lala IDENT=81234567 blah-again") 4981a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski 4993bf79ca4d5490f9af09e1ddc39b8df5343b34d06mbligh self.god.stub_function(utils, "running_os_full_version") 5003bf79ca4d5490f9af09e1ddc39b8df5343b34d06mbligh utils.running_os_full_version.expect_call().and_return("2.6.15-smp") 5013bf79ca4d5490f9af09e1ddc39b8df5343b34d06mbligh 5021a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski self.job.record.expect_call("GOOD", "sub", "reboot.verify", 5031a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski "2.6.15-smp") 5041a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski self.job._decrement_group_level.expect_call() 5051a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski self.job.record.expect_call("END GOOD", "sub", "reboot", 5061a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski optional_fields={"kernel": "2.6.15-smp"}) 5071a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski 5081a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski # run test 509067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski self.job.end_reboot_and_verify(81234567, "2.6.15-smp", "sub") 5101a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski self.god.check_playback() 5111a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski 5121a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski 513067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski def test_end_boot_and_verify_failure(self): 5141a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski self.construct_job(True) 5151a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski 5161a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski # set up the job class 5171a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski self.job.group_level = 2 5181a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski 51953da18eddf69243ca175d9a4603cba5b55300726mbligh self.god.stub_function(utils, "running_os_ident") 52053da18eddf69243ca175d9a4603cba5b55300726mbligh utils.running_os_ident.expect_call().and_return("2.6.15-smp") 5211a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski 5221a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski utils.read_one_line.expect_call("/proc/cmdline").and_return( 5231a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski "blah more-blah root=lala IDENT=81234567 blah-again") 5241a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski 5251a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski self.job.record.expect_call("ABORT", "sub", "reboot.verify", 5261a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski "boot failure") 5271a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski self.job._decrement_group_level.expect_call() 5281a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski self.job.record.expect_call("END ABORT", "sub", "reboot", 5291a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski optional_fields={"kernel": "2.6.15-smp"}) 5301a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski 5311a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski # run test 532067b26c1f0db3592e788b748ccb7ee5710161fa2jadmanski self.assertRaises(error.JobError, self.job.end_reboot_and_verify, 5331a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski 91234567, "2.6.16-smp", "sub") 5341a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski self.god.check_playback() 5351a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski 5361a43a8cd72c9c572b255e2b316c553a5d5aac19ajadmanski 5375bba5ca127e99428a3cc6c823b51a8b3062d06bdmblighif __name__ == "__main__": 5385bba5ca127e99428a3cc6c823b51a8b3062d06bdmbligh unittest.main() 539