3 # Copyright (c) 2016 Orange and others.
5 # All rights reserved. This program and the accompanying materials
6 # are made available under the terms of the Apache License, Version 2.0
7 # which accompanies this distribution, and is available at
8 # http://www.apache.org/licenses/LICENSE-2.0
10 """Define the classe required to fully cover testcase."""
17 from functest.core import testcase
19 __author__ = "Cedric Ollivier <cedric.ollivier@orange.com>"
22 class TestCaseTesting(unittest.TestCase):
24 """The class testing TestCase."""
25 # pylint: disable=missing-docstring,too-many-public-methods
27 logging.disable(logging.CRITICAL)
30 _project_name = "functest"
31 _published_result = "PASS"
34 self.test = testcase.TestCase(case_name=self._case_name,
35 project_name=self._project_name)
36 self.test.start_time = "1"
37 self.test.stop_time = "2"
38 self.test.result = 100
39 self.test.details = {"Hello": "World"}
41 def test_run_unimplemented(self):
42 self.assertEqual(self.test.run(),
43 testcase.TestCase.EX_RUN_ERROR)
45 @mock.patch('functest.utils.functest_utils.push_results_to_db',
47 def _test_missing_attribute(self, mock_function=None):
48 self.assertEqual(self.test.push_to_db(),
49 testcase.TestCase.EX_PUSH_TO_DB_ERROR)
50 mock_function.assert_not_called()
52 def test_missing_project_name(self):
53 self.test.project_name = None
54 self._test_missing_attribute()
56 def test_missing_case_name(self):
57 self.test.case_name = None
58 self._test_missing_attribute()
60 def test_missing_start_time(self):
61 self.test.start_time = None
62 self._test_missing_attribute()
64 def test_missing_stop_time(self):
65 self.test.stop_time = None
66 self._test_missing_attribute()
68 @mock.patch('functest.utils.functest_utils.push_results_to_db',
70 def test_missing_details(self, mock_function=None):
71 self.test.details = None
72 self.assertEqual(self.test.push_to_db(),
73 testcase.TestCase.EX_OK)
74 mock_function.assert_called_once_with(
75 self._project_name, self._case_name, self.test.start_time,
76 self.test.stop_time, self._published_result, self.test.details)
78 @mock.patch('functest.utils.functest_utils.push_results_to_db',
80 def test_push_to_db_failed(self, mock_function=None):
81 self.assertEqual(self.test.push_to_db(),
82 testcase.TestCase.EX_PUSH_TO_DB_ERROR)
83 mock_function.assert_called_once_with(
84 self._project_name, self._case_name, self.test.start_time,
85 self.test.stop_time, self._published_result, self.test.details)
87 @mock.patch('functest.utils.functest_utils.push_results_to_db',
89 def test_push_to_db(self, mock_function=None):
90 self.assertEqual(self.test.push_to_db(),
91 testcase.TestCase.EX_OK)
92 mock_function.assert_called_once_with(
93 self._project_name, self._case_name, self.test.start_time,
94 self.test.stop_time, self._published_result, self.test.details)
96 @mock.patch('functest.utils.functest_utils.push_results_to_db',
98 def test_push_to_db_res_ko(self, mock_function=None):
100 self.assertEqual(self.test.push_to_db(),
101 testcase.TestCase.EX_OK)
102 mock_function.assert_called_once_with(
103 self._project_name, self._case_name, self.test.start_time,
104 self.test.stop_time, 'FAIL', self.test.details)
106 @mock.patch('functest.utils.functest_utils.push_results_to_db',
108 def test_push_to_db_both_ko(self, mock_function=None):
110 self.test.criteria = 0
111 self.assertEqual(self.test.push_to_db(),
112 testcase.TestCase.EX_OK)
113 mock_function.assert_called_once_with(
114 self._project_name, self._case_name, self.test.start_time,
115 self.test.stop_time, 'FAIL', self.test.details)
117 def test_check_criteria_missing(self):
118 self.test.criteria = None
119 self.assertEqual(self.test.is_successful(),
120 testcase.TestCase.EX_TESTCASE_FAILED)
122 def test_check_result_missing(self):
123 self.test.result = None
124 self.assertEqual(self.test.is_successful(),
125 testcase.TestCase.EX_TESTCASE_FAILED)
127 def test_check_result_failed(self):
128 # Backward compatibility
129 # It must be removed as soon as TestCase subclasses
130 # stop setting result = 'PASS' or 'FAIL'.
131 self.test.result = 'FAIL'
132 self.assertEqual(self.test.is_successful(),
133 testcase.TestCase.EX_TESTCASE_FAILED)
135 def test_check_result_pass(self):
136 # Backward compatibility
137 # It must be removed as soon as TestCase subclasses
138 # stop setting result = 'PASS' or 'FAIL'.
139 self.test.result = 'PASS'
140 self.assertEqual(self.test.is_successful(),
141 testcase.TestCase.EX_OK)
143 def test_check_result_lt(self):
144 self.test.result = 50
145 self.assertEqual(self.test.is_successful(),
146 testcase.TestCase.EX_TESTCASE_FAILED)
148 def test_check_result_eq(self):
149 self.test.result = 100
150 self.assertEqual(self.test.is_successful(),
151 testcase.TestCase.EX_OK)
153 def test_check_result_gt(self):
154 self.test.criteria = 50
155 self.test.result = 100
156 self.assertEqual(self.test.is_successful(),
157 testcase.TestCase.EX_OK)
159 def test_check_result_zero(self):
160 self.test.criteria = 0
162 self.assertEqual(self.test.is_successful(),
163 testcase.TestCase.EX_TESTCASE_FAILED)
165 def test_get_duration_start_ko(self):
166 self.test.start_time = None
167 self.assertEqual(self.test.get_duration(), "XX:XX")
168 self.test.start_time = 0
169 self.assertEqual(self.test.get_duration(), "XX:XX")
171 def test_get_duration_end_ko(self):
172 self.test.stop_time = None
173 self.assertEqual(self.test.get_duration(), "XX:XX")
174 self.test.stop_time = 0
175 self.assertEqual(self.test.get_duration(), "XX:XX")
177 def test_get_invalid_duration(self):
178 self.test.start_time = 2
179 self.test.stop_time = 1
180 self.assertEqual(self.test.get_duration(), "XX:XX")
182 def test_get_zero_duration(self):
183 self.test.start_time = 2
184 self.test.stop_time = 2
185 self.assertEqual(self.test.get_duration(), "00:00")
187 def test_get_duration(self):
188 self.test.start_time = 1
189 self.test.stop_time = 180
190 self.assertEqual(self.test.get_duration(), "02:59")
192 def test_str_project_name_ko(self):
193 self.test.project_name = None
194 self.assertIn("<functest.core.testcase.TestCase object at",
197 def test_str_case_name_ko(self):
198 self.test.case_name = None
199 self.assertIn("<functest.core.testcase.TestCase object at",
202 def test_str_pass(self):
204 with mock.patch.object(self.test, 'get_duration',
205 return_value=duration), \
206 mock.patch.object(self.test, 'is_successful',
207 return_value=testcase.TestCase.EX_OK):
208 message = str(self.test)
209 self.assertIn(self._project_name, message)
210 self.assertIn(self._case_name, message)
211 self.assertIn(duration, message)
212 self.assertIn('PASS', message)
214 def test_str_fail(self):
216 with mock.patch.object(self.test, 'get_duration',
217 return_value=duration), \
219 self.test, 'is_successful',
220 return_value=testcase.TestCase.EX_TESTCASE_FAILED):
221 message = str(self.test)
222 self.assertIn(self._project_name, message)
223 self.assertIn(self._case_name, message)
224 self.assertIn(duration, message)
225 self.assertIn('FAIL', message)
228 if __name__ == "__main__":
229 unittest.main(verbosity=2)