def test_fail_and_skip(self, mock_jobsubmit, mock_getresultstree, mock_warning, mock_error): """ Ensure that a job with failed tasks, no waiving and skipped tests returns SKT_FAIL.""" # pylint: disable=unused-argument beaker_xml = misc.get_asset_content('beaker_skip_and_fail.xml') mock_getresultstree.return_value = fromstring(beaker_xml) mock_jobsubmit.return_value = "J:0001" # no need to wait 60 seconds # though beaker_pass_results.xml only needs one iteration self.myrunner.watchdelay = 0.1 # For the purposes of this test it's not necessary to flip the state # of the fake Beaker XML job to 'Completed', the asset file already has # that state. result = misc.exec_on(self.myrunner, mock_jobsubmit, 'beaker_skip_and_fail.xml', 5, waiving=False) # see method description for details why SKT_FAIL self.assertEqual(SKT_FAIL, result)
def test_jobresult_failure(self, mock_getresultstree): """Ensure jobresult() handles a job failure""" # Mock up a beaker XML reply beaker_xml = misc.get_asset_content('beaker_fail_results.xml') mock_getresultstree.return_value = etree.fromstring(beaker_xml) result = self.myrunner.jobresult("J:00001") self.assertTupleEqual(result, (1, 'Fail'))
def test_getresults(self, mock_getresultstree): """Ensure getresults() works""" # Mock up a beaker XML reply beaker_xml = misc.get_asset_content('beaker_results.xml') mock_getresultstree.return_value = etree.fromstring(beaker_xml) result = self.myrunner.getresults("J:00001") self.assertEqual(result, 0)
def test_getconsolelog(self, mock_getresultstree): """Ensure getconsolelog() works""" # Mock up a beaker XML reply mocked_xml = misc.get_asset_content('beaker_results.xml') mock_getresultstree.return_value = etree.fromstring(mocked_xml) result = self.myrunner.getconsolelog() self.assertEqual(result, "http://example.com/")
def test_jobresult(self, mock_getresultstree): """Ensure jobresult() works""" # beaker_xml up a beaker XML reply beaker_xml = misc.get_asset_content('beaker_results.xml') mock_getresultstree.return_value = etree.fromstring(beaker_xml) result = self.myrunner.jobresult("J:00001") self.assertTupleEqual(result, (0, 'Pass'))
def test_getresults_failure(self, mock_logging): """Ensure __getresults() handles a job failure.""" # pylint: disable=W0212,E1101 self.myrunner.job_to_recipe_set_map = {'jobid': set(['recipeset'])} self.myrunner.recipe_set_results['recipeset'] = fromstring( misc.get_asset_content('beaker_fail_results.xml')) result = self.myrunner._BeakerRunner__getresults() self.assertEqual(result, 1) mock_logging.assert_called()
def test_recipe_to_job(self): """Ensure recipe_to_job() works""" beaker_xml = misc.get_asset_content('beaker_results.xml') xml_parsed = etree.fromstring(beaker_xml) result = self.myrunner.recipe_to_job(xml_parsed) self.assertEqual(result.tag, 'job') result = self.myrunner.recipe_to_job(xml_parsed, samehost=True) self.assertEqual(result.tag, 'job')
def test_recipe_set_to_job(self): """Ensure __recipe_set_to_job() works.""" # pylint: disable=W0212,E1101 beaker_xml = misc.get_asset_content('beaker_recipe_set_results.xml') xml_parsed = fromstring(beaker_xml) result = self.myrunner._BeakerRunner__recipe_set_to_job(xml_parsed) self.assertEqual(result.tag, 'job') result = self.myrunner._BeakerRunner__recipe_set_to_job(xml_parsed, samehost=True) self.assertEqual(result.tag, 'job')
def test_waived_hidden(self, mock_jobsubmit, mock_getresultstree): """ Ensure that waived tests don't affect overall test result.""" beaker_xml = misc.get_asset_content('beaker_results.xml') mock_getresultstree.return_value = fromstring(beaker_xml) mock_jobsubmit.return_value = "J:0001" # no need to wait 60 seconds # though beaker_pass_results.xml only needs one iteration self.myrunner.watchdelay = 0.1 result = misc.exec_on(self.myrunner, mock_jobsubmit, 'beaker_results.xml', 5, 'Completed') self.assertEqual(SKT_SUCCESS, result)
def test_run_wait(self, mock_jobsubmit, mock_getresultstree): """Ensure BeakerRunner.run works""" url = "http://machine1.example.com/builds/1234567890.tar.gz" release = "4.17.0-rc1" wait = True beaker_xml = misc.get_asset_content('beaker_pass_results.xml') mock_getresultstree.return_value = etree.fromstring(beaker_xml) mock_jobsubmit.return_value = "J:0001" # no need to wait 60 seconds # though beaker_pass_results.xml only needs one iteration self.myrunner.watchdelay = 0.1 result = self.myrunner.run(url, release, wait) self.assertEqual(result, 0)
def test_fetchdata_normal(self): """Ensure __fetchdata() works.""" # pylint: disable=W0212,E1101 responses.add(responses.GET, 'http://whatever.example.com/console/log', body=misc.get_asset_content('x86_one_trace.txt'), status=200) # get path to trace asset real_path = misc.get_asset_path('x86_one_trace.txt') consolelog = console.ConsoleLog(kver='4-5-fake', url_or_path=real_path) result = consolelog._ConsoleLog__fetchdata() # check we got expected file content self.assertIn('Linux version 4-5-fake', result[0])
def test_getverboseresults(self, mock_getresultstree): """Ensure getverboseresults() works""" # Mock up a beaker XML reply mocked_xml = misc.get_asset_content('beaker_results.xml') mock_getresultstree.return_value = etree.fromstring(mocked_xml) result = self.myrunner.getverboseresults(["R:00001"]) expected_result = { 'R:00001': { 'R:None': (None, None, 'http://example.com/', 'http://example.com/machinedesc.log', 'http://example.com/lshw.log'), 'result': 'Pass' } } self.assertDictEqual(result, expected_result)
def test_waived_abort(self, mock_jobsubmit, mock_getresultstree, mock_warning, mock_error): """ Ensure that one test failing and one waived test aborting leads to failure. """ # pylint: disable=unused-argument beaker_xml = misc.get_asset_content('beaker_aborted_some.xml') mock_getresultstree.return_value = fromstring(beaker_xml) mock_jobsubmit.return_value = "J:0001" # no need to wait 60 seconds # though beaker_pass_results.xml only needs one iteration self.myrunner.watchdelay = 0.1 result = misc.exec_on(self.myrunner, mock_jobsubmit, 'beaker_aborted_some.xml', 5, 'Aborted') self.assertEqual(result, SKT_ERROR)
def request_get_mocked(filename): """Mock request.get to allow feeding consolelog with known inputs. When request.get is called, it "fetches" the content of the asset passed as parameter. Args: filename: Asset's filename. """ get_mocked = mock.Mock() def remove_nt_marker(line): """Filter function for removing the 'nt ' markers on assets""" return not re.match(r'^nt ', line) get_mocked.text = filter(remove_nt_marker, misc.get_asset_content(filename)) with mock.patch('requests.get', mock.Mock(return_value=get_mocked)): yield
def test_match_one_trace2(self): """ Check one trace can be extracted from a console log. Check that exclude pattern is skipped. """ # pylint: disable=W0212,E1101 # append OK line to the testing content content = misc.get_asset_content('x86_one_trace.txt').splitlines() content = [content[0], '[166357.530080] aa OK aa'] + content[1:] content = '\n'.join(content) + '\n' with tempfile.NamedTemporaryFile(delete=True) as temp: temp.write(content) temp.seek(0) consolelog = console.ConsoleLog('4-5-fake', temp.name) traces = consolelog.gettraces() self.assertEqual(len(traces), 1) expected_trace = self.get_expected_traces('x86_one_trace.txt')[0] self.assertEqual(expected_trace, traces[0])
def test_getresults_failure(self, mock_getresultstree): """Ensure getresults() handles a job failure""" # Mock up a beaker XML reply beaker_xml = misc.get_asset_content('beaker_fail_results.xml') mock_getresultstree.return_value = etree.fromstring(beaker_xml) # Ensure that the failure loop hits 'continue' self.myrunner.failures = {'test': ['A', None, 4]} result = self.myrunner.getresults("J:00001") self.assertEqual(result, 1) # Go through the failure loop with one failed host self.myrunner.failures = {'test': [['A'], ['a'], 1]} result = self.myrunner.getresults("J:00001") self.assertEqual(result, 1) # Go through the failure loop with multiple failed hosts self.myrunner.failures = {'test': [['A', 'B'], ['a'], 1]} result = self.myrunner.getresults("J:00001") self.assertEqual(result, 1)
def get_expected_traces(filename): """Return expected traces from an asset. Each line started with 'nt ' is discarded. Args: filename: Asset's filename. Returns: A list where every member is a trace. """ expected_traces = [] tmp_trace = [] for line in misc.get_asset_content(filename).splitlines()[1:]: if line.startswith('nt '): if tmp_trace: expected_traces.append('\n'.join(tmp_trace)) tmp_trace = [] else: tmp_trace.append(line) expected_traces.append('\n'.join(tmp_trace)) return expected_traces
def test_fetchdata_gz(self): """Ensure __fetchdata() gzip handling works.""" # pylint: disable=W0212,E1101 content = misc.get_asset_content('x86_one_trace.txt') responses.add(responses.GET, 'http://whatever.example.com/console/log.bz', body=content, status=200) with tempfile.NamedTemporaryFile(delete=True, suffix='.gz') as temp: with gzip.open(temp.name, 'wb') as gzip_file: gzip_file.write(content) consolelog = console.ConsoleLog(kver='4-5-fake', url_or_path=temp.name) result = consolelog._ConsoleLog__fetchdata() # check we got expected file content self.assertIn('Linux version 4-5-fake', result[0])
def test_waived_fails(self, mock_jobsubmit, mock_getresultstree): """ Ensure that waived tests don't affect overall test result. This tests test failure.""" beaker_xml = misc.get_asset_content('beaker_results.xml') mock_getresultstree.return_value = fromstring(beaker_xml) mock_jobsubmit.return_value = "J:0001" # no need to wait 60 seconds # though beaker_pass_results.xml only needs one iteration self.myrunner.watchdelay = 0.1 # waiving=False : failure must show result = misc.exec_on(self.myrunner, mock_jobsubmit, 'beaker_results.xml', 5, 'Completed', waiving=False) self.assertEqual(result, SKT_FAIL)
def test_waived_fails2(self, mock_jobsubmit, mock_getresultstree, mock_warning, mock_error): """ Ensure that waived tests don't affect overall test result. This tests test abort.""" # pylint: disable=unused-argument beaker_xml = misc.get_asset_content('beaker_aborted_some.xml') mock_getresultstree.return_value = fromstring(beaker_xml) mock_jobsubmit.return_value = "J:0001" # no need to wait 60 seconds # though beaker_pass_results.xml only needs one iteration self.myrunner.watchdelay = 0.1 # waiving=False: infrastructure error must be reported result = misc.exec_on(self.myrunner, mock_jobsubmit, 'beaker_aborted_some.xml', 5, 'Completed', waiving=False) self.assertEqual(result, SKT_ERROR)