test_decorators.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #!/usr/bin/env python3
  2. #
  3. # Copyright (C) 2016 Intel Corporation
  4. #
  5. # SPDX-License-Identifier: MIT
  6. #
  7. import signal
  8. import unittest
  9. from common import setup_sys_path, TestBase
  10. setup_sys_path()
  11. from oeqa.core.exception import OEQADependency
  12. from oeqa.core.utils.test import getCaseMethod, getSuiteCasesNames, getSuiteCasesIDs
  13. class TestFilterDecorator(TestBase):
  14. def _runFilterTest(self, modules, filters, expect, msg):
  15. tc = self._testLoader(modules=modules, filters=filters)
  16. test_loaded = set(getSuiteCasesNames(tc.suites))
  17. self.assertEqual(expect, test_loaded, msg=msg)
  18. def test_oetag(self):
  19. # Get all cases without filtering.
  20. filter_all = {}
  21. test_all = {'testTagGood', 'testTagOther', 'testTagNone'}
  22. msg_all = 'Failed to get all oetag cases without filtering.'
  23. # Get cases with 'goodTag'.
  24. filter_good = {'oetag':'goodTag'}
  25. test_good = {'testTagGood'}
  26. msg_good = 'Failed to get just one test filtering with "goodTag" oetag.'
  27. # Get cases with an invalid tag.
  28. filter_invalid = {'oetag':'invalidTag'}
  29. test_invalid = set()
  30. msg_invalid = 'Failed to filter all test using an invalid oetag.'
  31. tests = ((filter_all, test_all, msg_all),
  32. (filter_good, test_good, msg_good),
  33. (filter_invalid, test_invalid, msg_invalid))
  34. for test in tests:
  35. self._runFilterTest(['oetag'], test[0], test[1], test[2])
  36. class TestDependsDecorator(TestBase):
  37. modules = ['depends']
  38. def test_depends_order(self):
  39. tests = ['depends.DependsTest.testDependsFirst',
  40. 'depends.DependsTest.testDependsSecond',
  41. 'depends.DependsTest.testDependsThird',
  42. 'depends.DependsTest.testDependsFourth',
  43. 'depends.DependsTest.testDependsFifth']
  44. tests2 = list(tests)
  45. tests2[2], tests2[3] = tests[3], tests[2]
  46. tc = self._testLoader(modules=self.modules, tests=tests)
  47. test_loaded = getSuiteCasesIDs(tc.suites)
  48. result = True if test_loaded == tests or test_loaded == tests2 else False
  49. msg = 'Failed to order tests using OETestDepends decorator.\nTest order:'\
  50. ' %s.\nExpected: %s\nOr: %s' % (test_loaded, tests, tests2)
  51. self.assertTrue(result, msg=msg)
  52. def test_depends_fail_missing_dependency(self):
  53. expect = "TestCase depends.DependsTest.testDependsSecond depends on "\
  54. "depends.DependsTest.testDependsFirst and isn't available"
  55. tests = ['depends.DependsTest.testDependsSecond']
  56. try:
  57. # Must throw OEQADependency because missing 'testDependsFirst'
  58. tc = self._testLoader(modules=self.modules, tests=tests)
  59. self.fail('Expected OEQADependency exception')
  60. except OEQADependency as e:
  61. result = True if expect in str(e) else False
  62. msg = 'Expected OEQADependency exception missing testDependsFirst test'
  63. self.assertTrue(result, msg=msg)
  64. def test_depends_fail_circular_dependency(self):
  65. expect = 'have a circular dependency'
  66. tests = ['depends.DependsTest.testDependsCircular1',
  67. 'depends.DependsTest.testDependsCircular2',
  68. 'depends.DependsTest.testDependsCircular3']
  69. try:
  70. # Must throw OEQADependency because circular dependency
  71. tc = self._testLoader(modules=self.modules, tests=tests)
  72. self.fail('Expected OEQADependency exception')
  73. except OEQADependency as e:
  74. result = True if expect in str(e) else False
  75. msg = 'Expected OEQADependency exception having a circular dependency'
  76. self.assertTrue(result, msg=msg)
  77. class TestTimeoutDecorator(TestBase):
  78. modules = ['timeout']
  79. def test_timeout(self):
  80. tests = ['timeout.TimeoutTest.testTimeoutPass']
  81. msg = 'Failed to run test using OETestTimeout'
  82. alarm_signal = signal.getsignal(signal.SIGALRM)
  83. tc = self._testLoader(modules=self.modules, tests=tests)
  84. self.assertTrue(tc.runTests().wasSuccessful(), msg=msg)
  85. msg = "OETestTimeout didn't restore SIGALRM"
  86. self.assertIs(alarm_signal, signal.getsignal(signal.SIGALRM), msg=msg)
  87. def test_timeout_fail(self):
  88. tests = ['timeout.TimeoutTest.testTimeoutFail']
  89. msg = "OETestTimeout test didn't timeout as expected"
  90. alarm_signal = signal.getsignal(signal.SIGALRM)
  91. tc = self._testLoader(modules=self.modules, tests=tests)
  92. self.assertFalse(tc.runTests().wasSuccessful(), msg=msg)
  93. msg = "OETestTimeout didn't restore SIGALRM"
  94. self.assertIs(alarm_signal, signal.getsignal(signal.SIGALRM), msg=msg)
  95. if __name__ == '__main__':
  96. unittest.main()