diff options
author | Mariano Lopez <mariano.lopez@linux.intel.com> | 2016-11-09 11:26:59 -0600 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2017-01-23 12:05:18 +0000 |
commit | 7bf63b28f1dee0b582769879c1727c5a1171c2b1 (patch) | |
tree | 991a4907c63df8c43199fd749546234e0c150839 /meta | |
parent | 4da4091cee20fd425addccd0d267a5b40f1ab8cd (diff) | |
download | poky-7bf63b28f1dee0b582769879c1727c5a1171c2b1.tar.gz |
oeqa/core: Add tests for the OEQA framework
This test suite covers the current functionality for the OEQA
framework.
For run certain test suite,
$ cd meta/lib/oeqa/core/tests
$ ./test_data.py
(From OE-Core rev: 7d7d0dc3736fc12ae7848de2785f0066e6470cd1)
Signed-off-by: Aníbal Limón <anibal.limon@linux.intel.com>
Signed-off-by: Mariano Lopez <mariano.lopez@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta')
-rw-r--r-- | meta/lib/oeqa/core/tests/__init__.py | 0 | ||||
-rw-r--r-- | meta/lib/oeqa/core/tests/cases/data.py | 20 | ||||
-rw-r--r-- | meta/lib/oeqa/core/tests/cases/depends.py | 38 | ||||
-rw-r--r-- | meta/lib/oeqa/core/tests/cases/loader/invalid/oeid.py | 15 | ||||
-rw-r--r-- | meta/lib/oeqa/core/tests/cases/loader/valid/another.py | 9 | ||||
-rw-r--r-- | meta/lib/oeqa/core/tests/cases/oeid.py | 18 | ||||
-rw-r--r-- | meta/lib/oeqa/core/tests/cases/oetag.py | 18 | ||||
-rw-r--r-- | meta/lib/oeqa/core/tests/cases/timeout.py | 18 | ||||
-rw-r--r-- | meta/lib/oeqa/core/tests/common.py | 35 | ||||
-rwxr-xr-x | meta/lib/oeqa/core/tests/test_data.py | 51 | ||||
-rwxr-xr-x | meta/lib/oeqa/core/tests/test_decorators.py | 135 | ||||
-rwxr-xr-x | meta/lib/oeqa/core/tests/test_loader.py | 86 | ||||
-rwxr-xr-x | meta/lib/oeqa/core/tests/test_runner.py | 38 |
13 files changed, 481 insertions, 0 deletions
diff --git a/meta/lib/oeqa/core/tests/__init__.py b/meta/lib/oeqa/core/tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/meta/lib/oeqa/core/tests/__init__.py | |||
diff --git a/meta/lib/oeqa/core/tests/cases/data.py b/meta/lib/oeqa/core/tests/cases/data.py new file mode 100644 index 0000000000..88003a6adc --- /dev/null +++ b/meta/lib/oeqa/core/tests/cases/data.py | |||
@@ -0,0 +1,20 @@ | |||
1 | # Copyright (C) 2016 Intel Corporation | ||
2 | # Released under the MIT license (see COPYING.MIT) | ||
3 | |||
4 | from oeqa.core.case import OETestCase | ||
5 | from oeqa.core.decorator.oetag import OETestTag | ||
6 | from oeqa.core.decorator.data import OETestDataDepends | ||
7 | |||
8 | class DataTest(OETestCase): | ||
9 | data_vars = ['IMAGE', 'ARCH'] | ||
10 | |||
11 | @OETestDataDepends(['MACHINE',]) | ||
12 | @OETestTag('dataTestOk') | ||
13 | def testDataOk(self): | ||
14 | self.assertEqual(self.td.get('IMAGE'), 'core-image-minimal') | ||
15 | self.assertEqual(self.td.get('ARCH'), 'x86') | ||
16 | self.assertEqual(self.td.get('MACHINE'), 'qemuarm') | ||
17 | |||
18 | @OETestTag('dataTestFail') | ||
19 | def testDataFail(self): | ||
20 | pass | ||
diff --git a/meta/lib/oeqa/core/tests/cases/depends.py b/meta/lib/oeqa/core/tests/cases/depends.py new file mode 100644 index 0000000000..17cdd90b15 --- /dev/null +++ b/meta/lib/oeqa/core/tests/cases/depends.py | |||
@@ -0,0 +1,38 @@ | |||
1 | # Copyright (C) 2016 Intel Corporation | ||
2 | # Released under the MIT license (see COPYING.MIT) | ||
3 | |||
4 | from oeqa.core.case import OETestCase | ||
5 | from oeqa.core.decorator.depends import OETestDepends | ||
6 | |||
7 | class DependsTest(OETestCase): | ||
8 | |||
9 | def testDependsFirst(self): | ||
10 | self.assertTrue(True, msg='How is this possible?') | ||
11 | |||
12 | @OETestDepends(['testDependsFirst']) | ||
13 | def testDependsSecond(self): | ||
14 | self.assertTrue(True, msg='How is this possible?') | ||
15 | |||
16 | @OETestDepends(['testDependsSecond']) | ||
17 | def testDependsThird(self): | ||
18 | self.assertTrue(True, msg='How is this possible?') | ||
19 | |||
20 | @OETestDepends(['testDependsSecond']) | ||
21 | def testDependsFourth(self): | ||
22 | self.assertTrue(True, msg='How is this possible?') | ||
23 | |||
24 | @OETestDepends(['testDependsThird', 'testDependsFourth']) | ||
25 | def testDependsFifth(self): | ||
26 | self.assertTrue(True, msg='How is this possible?') | ||
27 | |||
28 | @OETestDepends(['testDependsCircular3']) | ||
29 | def testDependsCircular1(self): | ||
30 | self.assertTrue(True, msg='How is this possible?') | ||
31 | |||
32 | @OETestDepends(['testDependsCircular1']) | ||
33 | def testDependsCircular2(self): | ||
34 | self.assertTrue(True, msg='How is this possible?') | ||
35 | |||
36 | @OETestDepends(['testDependsCircular2']) | ||
37 | def testDependsCircular3(self): | ||
38 | self.assertTrue(True, msg='How is this possible?') | ||
diff --git a/meta/lib/oeqa/core/tests/cases/loader/invalid/oeid.py b/meta/lib/oeqa/core/tests/cases/loader/invalid/oeid.py new file mode 100644 index 0000000000..038d445931 --- /dev/null +++ b/meta/lib/oeqa/core/tests/cases/loader/invalid/oeid.py | |||
@@ -0,0 +1,15 @@ | |||
1 | # Copyright (C) 2016 Intel Corporation | ||
2 | # Released under the MIT license (see COPYING.MIT) | ||
3 | |||
4 | from oeqa.core.case import OETestCase | ||
5 | |||
6 | class AnotherIDTest(OETestCase): | ||
7 | |||
8 | def testAnotherIdGood(self): | ||
9 | self.assertTrue(True, msg='How is this possible?') | ||
10 | |||
11 | def testAnotherIdOther(self): | ||
12 | self.assertTrue(True, msg='How is this possible?') | ||
13 | |||
14 | def testAnotherIdNone(self): | ||
15 | self.assertTrue(True, msg='How is this possible?') | ||
diff --git a/meta/lib/oeqa/core/tests/cases/loader/valid/another.py b/meta/lib/oeqa/core/tests/cases/loader/valid/another.py new file mode 100644 index 0000000000..c9ffd17773 --- /dev/null +++ b/meta/lib/oeqa/core/tests/cases/loader/valid/another.py | |||
@@ -0,0 +1,9 @@ | |||
1 | # Copyright (C) 2016 Intel Corporation | ||
2 | # Released under the MIT license (see COPYING.MIT) | ||
3 | |||
4 | from oeqa.core.case import OETestCase | ||
5 | |||
6 | class AnotherTest(OETestCase): | ||
7 | |||
8 | def testAnother(self): | ||
9 | self.assertTrue(True, msg='How is this possible?') | ||
diff --git a/meta/lib/oeqa/core/tests/cases/oeid.py b/meta/lib/oeqa/core/tests/cases/oeid.py new file mode 100644 index 0000000000..c2d3d32f2d --- /dev/null +++ b/meta/lib/oeqa/core/tests/cases/oeid.py | |||
@@ -0,0 +1,18 @@ | |||
1 | # Copyright (C) 2016 Intel Corporation | ||
2 | # Released under the MIT license (see COPYING.MIT) | ||
3 | |||
4 | from oeqa.core.case import OETestCase | ||
5 | from oeqa.core.decorator.oeid import OETestID | ||
6 | |||
7 | class IDTest(OETestCase): | ||
8 | |||
9 | @OETestID(101) | ||
10 | def testIdGood(self): | ||
11 | self.assertTrue(True, msg='How is this possible?') | ||
12 | |||
13 | @OETestID(102) | ||
14 | def testIdOther(self): | ||
15 | self.assertTrue(True, msg='How is this possible?') | ||
16 | |||
17 | def testIdNone(self): | ||
18 | self.assertTrue(True, msg='How is this possible?') | ||
diff --git a/meta/lib/oeqa/core/tests/cases/oetag.py b/meta/lib/oeqa/core/tests/cases/oetag.py new file mode 100644 index 0000000000..0cae02e75c --- /dev/null +++ b/meta/lib/oeqa/core/tests/cases/oetag.py | |||
@@ -0,0 +1,18 @@ | |||
1 | # Copyright (C) 2016 Intel Corporation | ||
2 | # Released under the MIT license (see COPYING.MIT) | ||
3 | |||
4 | from oeqa.core.case import OETestCase | ||
5 | from oeqa.core.decorator.oetag import OETestTag | ||
6 | |||
7 | class TagTest(OETestCase): | ||
8 | |||
9 | @OETestTag('goodTag') | ||
10 | def testTagGood(self): | ||
11 | self.assertTrue(True, msg='How is this possible?') | ||
12 | |||
13 | @OETestTag('otherTag') | ||
14 | def testTagOther(self): | ||
15 | self.assertTrue(True, msg='How is this possible?') | ||
16 | |||
17 | def testTagNone(self): | ||
18 | self.assertTrue(True, msg='How is this possible?') | ||
diff --git a/meta/lib/oeqa/core/tests/cases/timeout.py b/meta/lib/oeqa/core/tests/cases/timeout.py new file mode 100644 index 0000000000..870c3157f7 --- /dev/null +++ b/meta/lib/oeqa/core/tests/cases/timeout.py | |||
@@ -0,0 +1,18 @@ | |||
1 | # Copyright (C) 2016 Intel Corporation | ||
2 | # Released under the MIT license (see COPYING.MIT) | ||
3 | |||
4 | from time import sleep | ||
5 | |||
6 | from oeqa.core.case import OETestCase | ||
7 | from oeqa.core.decorator.oetimeout import OETimeout | ||
8 | |||
9 | class TimeoutTest(OETestCase): | ||
10 | |||
11 | @OETimeout(1) | ||
12 | def testTimeoutPass(self): | ||
13 | self.assertTrue(True, msg='How is this possible?') | ||
14 | |||
15 | @OETimeout(1) | ||
16 | def testTimeoutFail(self): | ||
17 | sleep(2) | ||
18 | self.assertTrue(True, msg='How is this possible?') | ||
diff --git a/meta/lib/oeqa/core/tests/common.py b/meta/lib/oeqa/core/tests/common.py new file mode 100644 index 0000000000..52b18a1c3e --- /dev/null +++ b/meta/lib/oeqa/core/tests/common.py | |||
@@ -0,0 +1,35 @@ | |||
1 | # Copyright (C) 2016 Intel Corporation | ||
2 | # Released under the MIT license (see COPYING.MIT) | ||
3 | |||
4 | import sys | ||
5 | import os | ||
6 | |||
7 | import unittest | ||
8 | import logging | ||
9 | import os | ||
10 | |||
11 | logger = logging.getLogger("oeqa") | ||
12 | logger.setLevel(logging.INFO) | ||
13 | consoleHandler = logging.StreamHandler() | ||
14 | formatter = logging.Formatter('OEQATest: %(message)s') | ||
15 | consoleHandler.setFormatter(formatter) | ||
16 | logger.addHandler(consoleHandler) | ||
17 | |||
18 | def setup_sys_path(): | ||
19 | directory = os.path.dirname(os.path.abspath(__file__)) | ||
20 | oeqa_lib = os.path.realpath(os.path.join(directory, '../../../')) | ||
21 | if not oeqa_lib in sys.path: | ||
22 | sys.path.insert(0, oeqa_lib) | ||
23 | |||
24 | class TestBase(unittest.TestCase): | ||
25 | def setUp(self): | ||
26 | self.logger = logger | ||
27 | directory = os.path.dirname(os.path.abspath(__file__)) | ||
28 | self.cases_path = os.path.join(directory, 'cases') | ||
29 | |||
30 | def _testLoader(self, d={}, modules=[], tests=[], filters={}): | ||
31 | from oeqa.core.context import OETestContext | ||
32 | tc = OETestContext(d, self.logger) | ||
33 | tc.loadTests(self.cases_path, modules=modules, tests=tests, | ||
34 | filters=filters) | ||
35 | return tc | ||
diff --git a/meta/lib/oeqa/core/tests/test_data.py b/meta/lib/oeqa/core/tests/test_data.py new file mode 100755 index 0000000000..320468cbe4 --- /dev/null +++ b/meta/lib/oeqa/core/tests/test_data.py | |||
@@ -0,0 +1,51 @@ | |||
1 | #!/usr/bin/env python3 | ||
2 | |||
3 | # Copyright (C) 2016 Intel Corporation | ||
4 | # Released under the MIT license (see COPYING.MIT) | ||
5 | |||
6 | import unittest | ||
7 | import logging | ||
8 | import os | ||
9 | |||
10 | from common import setup_sys_path, TestBase | ||
11 | setup_sys_path() | ||
12 | |||
13 | from oeqa.core.exception import OEQAMissingVariable | ||
14 | from oeqa.core.utils.test import getCaseMethod, getSuiteCasesNames | ||
15 | |||
16 | class TestData(TestBase): | ||
17 | modules = ['data'] | ||
18 | |||
19 | def test_data_fail_missing_variable(self): | ||
20 | expectedException = "oeqa.core.exception.OEQAMissingVariable" | ||
21 | |||
22 | tc = self._testLoader(modules=self.modules) | ||
23 | self.assertEqual(False, tc.runTests().wasSuccessful()) | ||
24 | for test, data in tc._results['errors']: | ||
25 | expect = False | ||
26 | if expectedException in data: | ||
27 | expect = True | ||
28 | |||
29 | self.assertTrue(expect) | ||
30 | |||
31 | def test_data_fail_wrong_variable(self): | ||
32 | expectedError = 'AssertionError' | ||
33 | d = {'IMAGE' : 'core-image-sato', 'ARCH' : 'arm'} | ||
34 | |||
35 | tc = self._testLoader(d=d, modules=self.modules) | ||
36 | self.assertEqual(False, tc.runTests().wasSuccessful()) | ||
37 | for test, data in tc._results['failures']: | ||
38 | expect = False | ||
39 | if expectedError in data: | ||
40 | expect = True | ||
41 | |||
42 | self.assertTrue(expect) | ||
43 | |||
44 | def test_data_ok(self): | ||
45 | d = {'IMAGE' : 'core-image-minimal', 'ARCH' : 'x86', 'MACHINE' : 'qemuarm'} | ||
46 | |||
47 | tc = self._testLoader(d=d, modules=self.modules) | ||
48 | self.assertEqual(True, tc.runTests().wasSuccessful()) | ||
49 | |||
50 | if __name__ == '__main__': | ||
51 | unittest.main() | ||
diff --git a/meta/lib/oeqa/core/tests/test_decorators.py b/meta/lib/oeqa/core/tests/test_decorators.py new file mode 100755 index 0000000000..f7d11e885a --- /dev/null +++ b/meta/lib/oeqa/core/tests/test_decorators.py | |||
@@ -0,0 +1,135 @@ | |||
1 | #!/usr/bin/env python3 | ||
2 | |||
3 | # Copyright (C) 2016 Intel Corporation | ||
4 | # Released under the MIT license (see COPYING.MIT) | ||
5 | |||
6 | import signal | ||
7 | import unittest | ||
8 | |||
9 | from common import setup_sys_path, TestBase | ||
10 | setup_sys_path() | ||
11 | |||
12 | from oeqa.core.exception import OEQADependency | ||
13 | from oeqa.core.utils.test import getCaseMethod, getSuiteCasesNames, getSuiteCasesIDs | ||
14 | |||
15 | class TestFilterDecorator(TestBase): | ||
16 | |||
17 | def _runFilterTest(self, modules, filters, expect, msg): | ||
18 | tc = self._testLoader(modules=modules, filters=filters) | ||
19 | test_loaded = set(getSuiteCasesNames(tc.suites)) | ||
20 | self.assertEqual(expect, test_loaded, msg=msg) | ||
21 | |||
22 | def test_oetag(self): | ||
23 | # Get all cases without filtering. | ||
24 | filter_all = {} | ||
25 | test_all = {'testTagGood', 'testTagOther', 'testTagNone'} | ||
26 | msg_all = 'Failed to get all oetag cases without filtering.' | ||
27 | |||
28 | # Get cases with 'goodTag'. | ||
29 | filter_good = {'oetag':'goodTag'} | ||
30 | test_good = {'testTagGood'} | ||
31 | msg_good = 'Failed to get just one test filtering with "goodTag" oetag.' | ||
32 | |||
33 | # Get cases with an invalid tag. | ||
34 | filter_invalid = {'oetag':'invalidTag'} | ||
35 | test_invalid = set() | ||
36 | msg_invalid = 'Failed to filter all test using an invalid oetag.' | ||
37 | |||
38 | tests = ((filter_all, test_all, msg_all), | ||
39 | (filter_good, test_good, msg_good), | ||
40 | (filter_invalid, test_invalid, msg_invalid)) | ||
41 | |||
42 | for test in tests: | ||
43 | self._runFilterTest(['oetag'], test[0], test[1], test[2]) | ||
44 | |||
45 | def test_oeid(self): | ||
46 | # Get all cases without filtering. | ||
47 | filter_all = {} | ||
48 | test_all = {'testIdGood', 'testIdOther', 'testIdNone'} | ||
49 | msg_all = 'Failed to get all oeid cases without filtering.' | ||
50 | |||
51 | # Get cases with '101' oeid. | ||
52 | filter_good = {'oeid': 101} | ||
53 | test_good = {'testIdGood'} | ||
54 | msg_good = 'Failed to get just one tes filtering with "101" oeid.' | ||
55 | |||
56 | # Get cases with an invalid id. | ||
57 | filter_invalid = {'oeid':999} | ||
58 | test_invalid = set() | ||
59 | msg_invalid = 'Failed to filter all test using an invalid oeid.' | ||
60 | |||
61 | tests = ((filter_all, test_all, msg_all), | ||
62 | (filter_good, test_good, msg_good), | ||
63 | (filter_invalid, test_invalid, msg_invalid)) | ||
64 | |||
65 | for test in tests: | ||
66 | self._runFilterTest(['oeid'], test[0], test[1], test[2]) | ||
67 | |||
68 | class TestDependsDecorator(TestBase): | ||
69 | modules = ['depends'] | ||
70 | |||
71 | def test_depends_order(self): | ||
72 | tests = ['depends.DependsTest.testDependsFirst', | ||
73 | 'depends.DependsTest.testDependsSecond', | ||
74 | 'depends.DependsTest.testDependsThird', | ||
75 | 'depends.DependsTest.testDependsFourth', | ||
76 | 'depends.DependsTest.testDependsFifth'] | ||
77 | tests2 = list(tests) | ||
78 | tests2[2], tests2[3] = tests[3], tests[2] | ||
79 | tc = self._testLoader(modules=self.modules, tests=tests) | ||
80 | test_loaded = getSuiteCasesIDs(tc.suites) | ||
81 | result = True if test_loaded == tests or test_loaded == tests2 else False | ||
82 | msg = 'Failed to order tests using OETestDepends decorator.\nTest order:'\ | ||
83 | ' %s.\nExpected: %s\nOr: %s' % (test_loaded, tests, tests2) | ||
84 | self.assertTrue(result, msg=msg) | ||
85 | |||
86 | def test_depends_fail_missing_dependency(self): | ||
87 | expect = "TestCase depends.DependsTest.testDependsSecond depends on "\ | ||
88 | "depends.DependsTest.testDependsFirst and isn't available" | ||
89 | tests = ['depends.DependsTest.testDependsSecond'] | ||
90 | try: | ||
91 | # Must throw OEQADependency because missing 'testDependsFirst' | ||
92 | tc = self._testLoader(modules=self.modules, tests=tests) | ||
93 | self.fail('Expected OEQADependency exception') | ||
94 | except OEQADependency as e: | ||
95 | result = True if expect in str(e) else False | ||
96 | msg = 'Expected OEQADependency exception missing testDependsFirst test' | ||
97 | self.assertTrue(result, msg=msg) | ||
98 | |||
99 | def test_depends_fail_circular_dependency(self): | ||
100 | expect = 'have a circular dependency' | ||
101 | tests = ['depends.DependsTest.testDependsCircular1', | ||
102 | 'depends.DependsTest.testDependsCircular2', | ||
103 | 'depends.DependsTest.testDependsCircular3'] | ||
104 | try: | ||
105 | # Must throw OEQADependency because circular dependency | ||
106 | tc = self._testLoader(modules=self.modules, tests=tests) | ||
107 | self.fail('Expected OEQADependency exception') | ||
108 | except OEQADependency as e: | ||
109 | result = True if expect in str(e) else False | ||
110 | msg = 'Expected OEQADependency exception having a circular dependency' | ||
111 | self.assertTrue(result, msg=msg) | ||
112 | |||
113 | class TestTimeoutDecorator(TestBase): | ||
114 | modules = ['timeout'] | ||
115 | |||
116 | def test_timeout(self): | ||
117 | tests = ['timeout.TimeoutTest.testTimeoutPass'] | ||
118 | msg = 'Failed to run test using OETestTimeout' | ||
119 | alarm_signal = signal.getsignal(signal.SIGALRM) | ||
120 | tc = self._testLoader(modules=self.modules, tests=tests) | ||
121 | self.assertTrue(tc.runTests().wasSuccessful(), msg=msg) | ||
122 | msg = "OETestTimeout didn't restore SIGALRM" | ||
123 | self.assertIs(alarm_signal, signal.getsignal(signal.SIGALRM), msg=msg) | ||
124 | |||
125 | def test_timeout_fail(self): | ||
126 | tests = ['timeout.TimeoutTest.testTimeoutFail'] | ||
127 | msg = "OETestTimeout test didn't timeout as expected" | ||
128 | alarm_signal = signal.getsignal(signal.SIGALRM) | ||
129 | tc = self._testLoader(modules=self.modules, tests=tests) | ||
130 | self.assertFalse(tc.runTests().wasSuccessful(), msg=msg) | ||
131 | msg = "OETestTimeout didn't restore SIGALRM" | ||
132 | self.assertIs(alarm_signal, signal.getsignal(signal.SIGALRM), msg=msg) | ||
133 | |||
134 | if __name__ == '__main__': | ||
135 | unittest.main() | ||
diff --git a/meta/lib/oeqa/core/tests/test_loader.py b/meta/lib/oeqa/core/tests/test_loader.py new file mode 100755 index 0000000000..b79b8bad4d --- /dev/null +++ b/meta/lib/oeqa/core/tests/test_loader.py | |||
@@ -0,0 +1,86 @@ | |||
1 | #!/usr/bin/env python3 | ||
2 | |||
3 | # Copyright (C) 2016 Intel Corporation | ||
4 | # Released under the MIT license (see COPYING.MIT) | ||
5 | |||
6 | import os | ||
7 | import unittest | ||
8 | |||
9 | from common import setup_sys_path, TestBase | ||
10 | setup_sys_path() | ||
11 | |||
12 | from oeqa.core.exception import OEQADependency | ||
13 | from oeqa.core.utils.test import getSuiteModules, getSuiteCasesIDs | ||
14 | |||
15 | class TestLoader(TestBase): | ||
16 | |||
17 | def test_fail_empty_filter(self): | ||
18 | filters = {'oetag' : ''} | ||
19 | expect = 'Filter oetag specified is empty' | ||
20 | msg = 'Expected TypeError exception for having invalid filter' | ||
21 | try: | ||
22 | # Must throw TypeError because empty filter | ||
23 | tc = self._testLoader(filters=filters) | ||
24 | self.fail(msg) | ||
25 | except TypeError as e: | ||
26 | result = True if expect in str(e) else False | ||
27 | self.assertTrue(result, msg=msg) | ||
28 | |||
29 | def test_fail_invalid_filter(self): | ||
30 | filters = {'invalid' : 'good'} | ||
31 | expect = 'filter but not declared in any of' | ||
32 | msg = 'Expected TypeError exception for having invalid filter' | ||
33 | try: | ||
34 | # Must throw TypeError because invalid filter | ||
35 | tc = self._testLoader(filters=filters) | ||
36 | self.fail(msg) | ||
37 | except TypeError as e: | ||
38 | result = True if expect in str(e) else False | ||
39 | self.assertTrue(result, msg=msg) | ||
40 | |||
41 | def test_fail_duplicated_module(self): | ||
42 | cases_path = self.cases_path | ||
43 | invalid_path = os.path.join(cases_path, 'loader', 'invalid') | ||
44 | self.cases_path = [self.cases_path, invalid_path] | ||
45 | expect = 'Duplicated oeid module found in' | ||
46 | msg = 'Expected ImportError exception for having duplicated module' | ||
47 | try: | ||
48 | # Must throw ImportEror because duplicated module | ||
49 | tc = self._testLoader() | ||
50 | self.fail(msg) | ||
51 | except ImportError as e: | ||
52 | result = True if expect in str(e) else False | ||
53 | self.assertTrue(result, msg=msg) | ||
54 | finally: | ||
55 | self.cases_path = cases_path | ||
56 | |||
57 | def test_filter_modules(self): | ||
58 | expected_modules = {'oeid', 'oetag'} | ||
59 | tc = self._testLoader(modules=expected_modules) | ||
60 | modules = getSuiteModules(tc.suites) | ||
61 | msg = 'Expected just %s modules' % ', '.join(expected_modules) | ||
62 | self.assertEqual(modules, expected_modules, msg=msg) | ||
63 | |||
64 | def test_filter_cases(self): | ||
65 | modules = ['oeid', 'oetag', 'data'] | ||
66 | expected_cases = {'data.DataTest.testDataOk', | ||
67 | 'oetag.TagTest.testTagGood', | ||
68 | 'oeid.IDTest.testIdGood'} | ||
69 | tc = self._testLoader(modules=modules, tests=expected_cases) | ||
70 | cases = set(getSuiteCasesIDs(tc.suites)) | ||
71 | msg = 'Expected just %s cases' % ', '.join(expected_cases) | ||
72 | self.assertEqual(cases, expected_cases, msg=msg) | ||
73 | |||
74 | def test_import_from_paths(self): | ||
75 | cases_path = self.cases_path | ||
76 | cases2_path = os.path.join(cases_path, 'loader', 'valid') | ||
77 | expected_modules = {'oeid', 'another'} | ||
78 | self.cases_path = [self.cases_path, cases2_path] | ||
79 | tc = self._testLoader(modules=expected_modules) | ||
80 | modules = getSuiteModules(tc.suites) | ||
81 | self.cases_path = cases_path | ||
82 | msg = 'Expected modules from two different paths' | ||
83 | self.assertEqual(modules, expected_modules, msg=msg) | ||
84 | |||
85 | if __name__ == '__main__': | ||
86 | unittest.main() | ||
diff --git a/meta/lib/oeqa/core/tests/test_runner.py b/meta/lib/oeqa/core/tests/test_runner.py new file mode 100755 index 0000000000..a3f3861fed --- /dev/null +++ b/meta/lib/oeqa/core/tests/test_runner.py | |||
@@ -0,0 +1,38 @@ | |||
1 | #!/usr/bin/env python3 | ||
2 | |||
3 | # Copyright (C) 2016 Intel Corporation | ||
4 | # Released under the MIT license (see COPYING.MIT) | ||
5 | |||
6 | import unittest | ||
7 | import logging | ||
8 | import tempfile | ||
9 | |||
10 | from common import setup_sys_path, TestBase | ||
11 | setup_sys_path() | ||
12 | |||
13 | from oeqa.core.runner import OEStreamLogger | ||
14 | |||
15 | class TestRunner(TestBase): | ||
16 | def test_stream_logger(self): | ||
17 | fp = tempfile.TemporaryFile(mode='w+') | ||
18 | |||
19 | logging.basicConfig(format='%(message)s', stream=fp) | ||
20 | logger = logging.getLogger() | ||
21 | logger.setLevel(logging.INFO) | ||
22 | |||
23 | oeSL = OEStreamLogger(logger) | ||
24 | |||
25 | lines = ['init', 'bigline_' * 65535, 'morebigline_' * 65535 * 4, 'end'] | ||
26 | for line in lines: | ||
27 | oeSL.write(line) | ||
28 | |||
29 | fp.seek(0) | ||
30 | fp_lines = fp.readlines() | ||
31 | for i, fp_line in enumerate(fp_lines): | ||
32 | fp_line = fp_line.strip() | ||
33 | self.assertEqual(lines[i], fp_line) | ||
34 | |||
35 | fp.close() | ||
36 | |||
37 | if __name__ == '__main__': | ||
38 | unittest.main() | ||