test_decorators.py 4.7 KB

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