#!/usr/bin/env python3 # # Copyright (C) 2016 Intel Corporation # # SPDX-License-Identifier: MIT # import signal import unittest from common import setup_sys_path, TestBase setup_sys_path() from oeqa.core.exception import OEQADependency from oeqa.core.utils.test import getCaseMethod, getSuiteCasesNames, getSuiteCasesIDs class TestTagDecorator(TestBase): def _runTest(self, modules, filterfn, expect): tc = self._testLoader(modules = modules, tags_filter = filterfn) test_loaded = set(getSuiteCasesIDs(tc.suites)) self.assertEqual(expect, test_loaded) def test_oetag(self): # get all cases without any filtering self._runTest(['oetag'], None, { 'oetag.TagTest.testTagGood', 'oetag.TagTest.testTagOther', 'oetag.TagTest.testTagOtherMulti', 'oetag.TagTest.testTagNone', 'oetag.TagClassTest.testTagOther', 'oetag.TagClassTest.testTagOtherMulti', 'oetag.TagClassTest.testTagNone', }) # exclude any case with tags self._runTest(['oetag'], lambda tags: tags, { 'oetag.TagTest.testTagNone', }) # exclude any case with otherTag self._runTest(['oetag'], lambda tags: "otherTag" in tags, { 'oetag.TagTest.testTagGood', 'oetag.TagTest.testTagNone', 'oetag.TagClassTest.testTagNone', }) # exclude any case with classTag self._runTest(['oetag'], lambda tags: "classTag" in tags, { 'oetag.TagTest.testTagGood', 'oetag.TagTest.testTagOther', 'oetag.TagTest.testTagOtherMulti', 'oetag.TagTest.testTagNone', }) # include any case with classTag self._runTest(['oetag'], lambda tags: "classTag" not in tags, { 'oetag.TagClassTest.testTagOther', 'oetag.TagClassTest.testTagOtherMulti', 'oetag.TagClassTest.testTagNone', }) # include any case with classTag or no tags self._runTest(['oetag'], lambda tags: tags and "classTag" not in tags, { 'oetag.TagTest.testTagNone', 'oetag.TagClassTest.testTagOther', 'oetag.TagClassTest.testTagOtherMulti', 'oetag.TagClassTest.testTagNone', }) class TestDependsDecorator(TestBase): modules = ['depends'] def test_depends_order(self): tests = ['depends.DependsTest.testDependsFirst', 'depends.DependsTest.testDependsSecond', 'depends.DependsTest.testDependsThird', 'depends.DependsTest.testDependsFourth', 'depends.DependsTest.testDependsFifth'] tests2 = list(tests) tests2[2], tests2[3] = tests[3], tests[2] tc = self._testLoader(modules=self.modules, tests=tests) test_loaded = getSuiteCasesIDs(tc.suites) result = True if test_loaded == tests or test_loaded == tests2 else False msg = 'Failed to order tests using OETestDepends decorator.\nTest order:'\ ' %s.\nExpected: %s\nOr: %s' % (test_loaded, tests, tests2) self.assertTrue(result, msg=msg) def test_depends_fail_missing_dependency(self): expect = "TestCase depends.DependsTest.testDependsSecond depends on "\ "depends.DependsTest.testDependsFirst and isn't available" tests = ['depends.DependsTest.testDependsSecond'] try: # Must throw OEQADependency because missing 'testDependsFirst' tc = self._testLoader(modules=self.modules, tests=tests) self.fail('Expected OEQADependency exception') except OEQADependency as e: result = True if expect in str(e) else False msg = 'Expected OEQADependency exception missing testDependsFirst test' self.assertTrue(result, msg=msg) def test_depends_fail_circular_dependency(self): expect = 'have a circular dependency' tests = ['depends.DependsTest.testDependsCircular1', 'depends.DependsTest.testDependsCircular2', 'depends.DependsTest.testDependsCircular3'] try: # Must throw OEQADependency because circular dependency tc = self._testLoader(modules=self.modules, tests=tests) self.fail('Expected OEQADependency exception') except OEQADependency as e: result = True if expect in str(e) else False msg = 'Expected OEQADependency exception having a circular dependency' self.assertTrue(result, msg=msg) class TestTimeoutDecorator(TestBase): modules = ['timeout'] def test_timeout(self): tests = ['timeout.TimeoutTest.testTimeoutPass'] msg = 'Failed to run test using OETestTimeout' alarm_signal = signal.getsignal(signal.SIGALRM) tc = self._testLoader(modules=self.modules, tests=tests) self.assertTrue(tc.runTests().wasSuccessful(), msg=msg) msg = "OETestTimeout didn't restore SIGALRM" self.assertIs(alarm_signal, signal.getsignal(signal.SIGALRM), msg=msg) def test_timeout_fail(self): tests = ['timeout.TimeoutTest.testTimeoutFail'] msg = "OETestTimeout test didn't timeout as expected" alarm_signal = signal.getsignal(signal.SIGALRM) tc = self._testLoader(modules=self.modules, tests=tests) self.assertFalse(tc.runTests().wasSuccessful(), msg=msg) msg = "OETestTimeout didn't restore SIGALRM" self.assertIs(alarm_signal, signal.getsignal(signal.SIGALRM), msg=msg) if __name__ == '__main__': unittest.main()