diff --git a/avocado/core/test.py b/avocado/core/test.py index d522ec3628e4a1c8e7f737536a9e6ba1e5b292d3..2f46b6f53e3f0349a01f494eaf763fa0acc0de2d 100644 --- a/avocado/core/test.py +++ b/avocado/core/test.py @@ -714,12 +714,12 @@ class Test(unittest.TestCase): except exceptions.TestBaseException as detail: self.__status = detail.status self.__fail_class = detail.__class__.__name__ - self.__fail_reason = detail + self.__fail_reason = str(detail) self.__traceback = stacktrace.prepare_exc_info(sys.exc_info()) except AssertionError as detail: self.__status = 'FAIL' self.__fail_class = detail.__class__.__name__ - self.__fail_reason = detail + self.__fail_reason = str(detail) self.__traceback = stacktrace.prepare_exc_info(sys.exc_info()) except Exception as detail: self.__status = 'ERROR' diff --git a/selftests/functional/test_basic.py b/selftests/functional/test_basic.py index d36f850d6ce0db2b65a064171487a1a64ef236dc..0c08ee9882f488245dbcd72562198370a7ba2f62 100644 --- a/selftests/functional/test_basic.py +++ b/selftests/functional/test_basic.py @@ -29,23 +29,6 @@ basedir = os.path.abspath(basedir) AVOCADO = os.environ.get("UNITTEST_AVOCADO_CMD", "./scripts/avocado") -PASS_SCRIPT_CONTENTS = """#!/bin/sh -true -""" - -PASS_SHELL_CONTENTS = "exit 0" - -FAIL_SCRIPT_CONTENTS = """#!/bin/sh -false -""" - -FAIL_SHELL_CONTENTS = "exit 1" - -HELLO_LIB_CONTENTS = """ -def hello(): - return 'Hello world' -""" - LOCAL_IMPORT_TEST_CONTENTS = ''' from avocado import Test from mylib import hello @@ -114,6 +97,19 @@ class MyTest(Test): ''' +RAISE_CUSTOM_PATH_EXCEPTION_CONTENT = '''import os +import sys + +from avocado import Test + +class SharedLibTest(Test): + def test(self): + sys.path.append(os.path.join(os.path.dirname(__file__), "shared_lib")) + from mylib import CancelExc + raise CancelExc("This should not crash on unpickling in runner") +''' + + def probe_binary(binary): try: return utils_path.find_command(binary) @@ -264,7 +260,7 @@ class RunnerOperationTest(unittest.TestCase): def test_runner_test_with_local_imports(self): mylib = script.TemporaryScript( 'mylib.py', - HELLO_LIB_CONTENTS, + "def hello():\n return 'Hello world'", 'avocado_simpletest_functional') mylib.save() mytest = script.Script( @@ -396,6 +392,26 @@ class RunnerOperationTest(unittest.TestCase): result)) self.assertIn('"status": "FAIL"', result.stdout) + def test_exception_not_in_path(self): + os.chdir(basedir) + os.mkdir(os.path.join(self.tmpdir, "shared_lib")) + mylib = script.Script(os.path.join(self.tmpdir, "shared_lib", + "mylib.py"), + "from avocado import TestCancel\n\n" + "class CancelExc(TestCancel):\n" + " pass") + mylib.save() + mytest = script.Script(os.path.join(self.tmpdir, "mytest.py"), + RAISE_CUSTOM_PATH_EXCEPTION_CONTENT) + mytest.save() + result = process.run("%s --show test run --sysinfo=off " + "--job-results-dir %s %s" + % (AVOCADO, self.tmpdir, mytest)) + self.assertIn("mytest.py:SharedLibTest.test -> CancelExc: This " + "should not crash on unpickling in runner", + result.stdout) + self.assertNotIn("Failed to read queue", result.stdout) + def test_runner_timeout(self): os.chdir(basedir) cmd_line = ('%s run --sysinfo=off --job-results-dir %s ' @@ -669,11 +685,11 @@ class RunnerSimpleTest(unittest.TestCase): self.tmpdir = tempfile.mkdtemp(prefix='avocado_' + __name__) self.pass_script = script.TemporaryScript( 'ʊʋʉʈɑ ʅʛʌ', - PASS_SCRIPT_CONTENTS, + "#!/bin/sh\ntrue", 'avocado_simpletest_functional') self.pass_script.save() self.fail_script = script.TemporaryScript('avocado_fail.sh', - FAIL_SCRIPT_CONTENTS, + "#!/bin/sh\nfalse", 'avocado_simpletest_' 'functional') self.fail_script.save() @@ -833,12 +849,12 @@ class ExternalRunnerTest(unittest.TestCase): self.tmpdir = tempfile.mkdtemp(prefix='avocado_' + __name__) self.pass_script = script.TemporaryScript( 'pass', - PASS_SHELL_CONTENTS, + "exit 0", 'avocado_externalrunner_functional') self.pass_script.save() self.fail_script = script.TemporaryScript( 'fail', - FAIL_SHELL_CONTENTS, + "exit 1", 'avocado_externalrunner_functional') self.fail_script.save()