aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta-selftest/classes/crasher.bbclass37
-rw-r--r--meta/lib/oeqa/selftest/cases/bbtests.py80
2 files changed, 117 insertions, 0 deletions
diff --git a/meta-selftest/classes/crasher.bbclass b/meta-selftest/classes/crasher.bbclass
new file mode 100644
index 00000000000..63501c60f46
--- /dev/null
+++ b/meta-selftest/classes/crasher.bbclass
@@ -0,0 +1,37 @@
+addtask throwerror
+do_throwerror[nostamp] = "1"
+python do_throwerror() {
+ bb.warn("About to crash...")
+ raise RuntimeError("argh!")
+}
+
+addtask spawnerror
+do_spawnerror[nostamp] = "1"
+python do_spawnerror() {
+ import subprocess
+ subprocess.check_output("echo about to fail; echo here we go; false", shell=True, stderr=subprocess.STDOUT)
+}
+
+addtask spawnerrorbinary
+do_spawnerrorbinary[nostamp] = "1"
+python do_spawnerrorbinary() {
+ import subprocess
+ subprocess.check_output("head -c 10 /bin/bash; false", shell=True, stderr=subprocess.STDOUT)
+}
+
+addtask emiterror
+do_emiterror[nostamp] = "1"
+python do_emiterror() {
+ bb.warn("this is a warning")
+ bb.error("this is an error")
+ bb.error("this is an error\non two lines")
+}
+
+addtask shellerror
+do_shellerror[nostamp] = "1"
+do_shellerror() {
+ bbwarn This is a warning
+ bberror This is an error
+ bbfatal This is fatal
+ bbwarn This should not appear
+}
diff --git a/meta/lib/oeqa/selftest/cases/bbtests.py b/meta/lib/oeqa/selftest/cases/bbtests.py
index 4c82049032b..1bdcf808c04 100644
--- a/meta/lib/oeqa/selftest/cases/bbtests.py
+++ b/meta/lib/oeqa/selftest/cases/bbtests.py
@@ -14,6 +14,19 @@ class BitbakeTests(OESelftestTestCase):
if line in l:
return l
+ def check_log_exception(self, test_recipe, test_task, result):
+ found = re.search('%s' % test_task, result.output)
+
+ return found
+
+ def check_log_error_warning(self, bbtype, test_recipe, test_task, result):
+ bbtype_regex = re.compile('%s: %s.* %s: %s.*'% (bbtype, test_recipe,
+ test_task['TASK'], test_task[bbtype]))
+ found = bbtype_regex.search(result.output)
+
+ return found
+
+
@OETestID(789)
def test_run_bitbake_from_dir_1(self):
os.chdir(os.path.join(self.builddir, 'conf'))
@@ -277,3 +290,70 @@ INHERIT_remove = \"report-error\"
test_recipe_summary_after = get_bb_var('SUMMARY', test_recipe)
self.assertEqual(expected_recipe_summary, test_recipe_summary_after)
+
+ @OETestID(1886)
+ def test_bberror_types(self):
+ test_recipe = 'm4-native'
+ self.write_config("INHERIT += \"crasher\"")
+
+ throwerror = {'TASK' : 'do_throwerror', 'ERROR' : 'Function failed:',
+ 'WARNING' : 'About to crash...',
+ 'EXCEPTION' : 'Exception: RuntimeError: argh!'}
+ spawnerror = {'TASK' : 'do_spawnerror', 'ERROR' : 'Function failed:',
+ 'EXCEPTION' : "Exception: subprocess.CalledProcessError: Command 'echo about to fail; echo here we go; false",
+ 'OUTPUT' : "Subprocess output:\nabout to fail\nhere we go"}
+ spawnerrorbin = {'TASK' : 'do_spawnerrorbinary', 'ERROR' : '',
+ 'EXCEPTION': "Exception: subprocess.CalledProcessError: Command 'head -c 10 /bin/bash; false"}
+ emiterror = {'TASK' : 'do_emiterror', 'ERROR' : 'this is an error', 'WARNING' : 'this is a warning'}
+ emiterror_twol = {'TASK' : 'do_emiterror', 'ERROR' : "this is an error\non two lines"}
+ shellerror = {'TASK' : 'do_shellerror', 'ERROR' : 'This is an error', 'WARNING' : 'This is a warning'}
+ shellfatal = {'TASK' : 'do_shellerror', 'ERROR' : 'This is fatal', 'WARNING' : 'This should not appear'}
+
+ tasks_to_execute = "%s:%s "%(test_recipe, throwerror['TASK']) + \
+ "%s:%s "%(test_recipe, spawnerror['TASK']) + "%s:%s "%(test_recipe, spawnerrorbin['TASK']) + \
+ "%s:%s "%(test_recipe, emiterror['TASK']) + "%s:%s"%(test_recipe, shellerror['TASK'])
+
+ result = bitbake('%s '% tasks_to_execute, ignore_status=True)
+
+ #Test do_throwerror
+ find_error = self.check_log_error_warning('ERROR', test_recipe, throwerror, result)
+ self.assertTrue(find_error, msg = "%s not found on :\n%s" % (throwerror['ERROR'] ,result.output))
+ find_warn = self.check_log_error_warning('WARNING', test_recipe, throwerror, result)
+ self.assertTrue(find_warn, msg = "%s not found on :\n%s" % (throwerror['WARNING'] ,result.output))
+ find_excpt = self.check_log_exception(test_recipe, throwerror['EXCEPTION'], result)
+ self.assertTrue(find_excpt, msg = "%s not found on :\n%s" % (throwerror['EXCEPTION'] ,result.output))
+
+ #Test do_spawnerror
+ find_error = self.check_log_error_warning('ERROR', test_recipe, spawnerror, result)
+ self.assertTrue(find_error, msg = "%s not found on :\n%s" % (spawnerror['ERROR'] ,result.output))
+ find_excpt = self.check_log_exception(test_recipe, spawnerror['EXCEPTION'], result)
+ self.assertTrue(find_excpt, msg = "%s not found on :\n%s" % (spawnerror['EXCEPTION'] ,result.output))
+ find_output = re.search('%s'% spawnerror['OUTPUT'], result.output)
+ self.assertTrue(find_output, msg = "%s not found on :\n%s" % (spawnerror['OUTPUT'] ,result.output))
+
+ #Test do_spawnerror
+ find_error = self.check_log_error_warning('ERROR', test_recipe, spawnerrorbin, result)
+ self.assertTrue(find_error, msg = "%s not found on :\n%s" % (spawnerrorbin['ERROR'] ,result.output))
+ find_excpt = self.check_log_exception(test_recipe, spawnerrorbin['EXCEPTION'], result)
+ self.assertTrue(find_excpt, msg = "%s not found on :\n%s" % (spawnerrorbin['EXCEPTION'] ,result.output))
+ output_bin = runCmd('head -c 10 /bin/bash; false', ignore_status=True)
+ find_output = re.search('%s'% output_bin.output, result.output)
+ self.assertTrue(find_output, msg = "%s not found on :\n%s" % (output_bin.output, result.output))
+
+ #Test do_emiterror
+ find_error = self.check_log_error_warning('ERROR', test_recipe, emiterror, result)
+ self.assertTrue(find_error, msg = "%s not found on :\n%s" % (emiterror['ERROR'] ,result.output))
+ find_warn = self.check_log_error_warning('WARNING', test_recipe, emiterror, result)
+ self.assertTrue(find_warn, msg = "%s not found on :\n%s" % (emiterror['WARNING'] ,result.output))
+ find_error = self.check_log_error_warning('ERROR', test_recipe, emiterror_twol, result)
+ self.assertTrue(find_error, msg = "%s not found on :\n%s" % (emiterror_twol['ERROR'] ,result.output))
+
+ #Test do_shellerror
+ find_error = self.check_log_error_warning('ERROR', test_recipe, shellerror, result)
+ self.assertTrue(find_error, msg = "%s not found on :\n%s" % (shellerror['ERROR'] ,result.output))
+ find_warn = self.check_log_error_warning('WARNING', test_recipe, shellerror, result)
+ self.assertTrue(find_warn, msg = "%s not found on :\n%s" % (shellerror['WARNING'] ,result.output))
+ find_warn = self.check_log_error_warning('ERROR', test_recipe, shellfatal, result)
+ self.assertTrue(find_warn, msg = "%s not found on :\n%s" % (shellfatal['ERROR'] ,result.output))
+ find_warn = self.check_log_error_warning('WARNING', test_recipe, shellfatal, result)
+ self.assertIsNone(find_warn, msg = "%s not found on :\n%s" % (shellfatal['WARNING'] ,result.output))