|
17 | 17 | from twisterlib.testinstance import TestInstance
|
18 | 18 | from twisterlib.testsuite import TestSuite
|
19 | 19 | from twisterlib.platform import Platform
|
| 20 | +from twisterlib.quarantine import Quarantine |
20 | 21 |
|
21 | 22 |
|
22 | 23 | def test_testplan_add_testsuites(class_testplan):
|
@@ -256,3 +257,81 @@ def test_add_instances(test_data, class_env, all_testsuites_dict, platforms_list
|
256 | 257 | [platform.name + '/' + s for s in list(all_testsuites_dict.keys())]
|
257 | 258 | assert all(isinstance(n, TestInstance) for n in list(plan.instances.values()))
|
258 | 259 | assert list(plan.instances.values()) == instance_list
|
| 260 | + |
| 261 | + |
| 262 | +QUARANTINE_BASIC = { |
| 263 | + 'demo_board_1/zephyr/scripts/tests/twister/test_data/testsuites/tests/test_a/test_a.check_1' : 'a1 on board_1 and board_3', |
| 264 | + 'demo_board_3/zephyr/scripts/tests/twister/test_data/testsuites/tests/test_a/test_a.check_1' : 'a1 on board_1 and board_3' |
| 265 | +} |
| 266 | + |
| 267 | +QUARANTINE_WITH_REGEXP = { |
| 268 | + 'demo_board_2/zephyr/scripts/tests/twister/test_data/testsuites/tests/test_a/test_a.check_2' : 'a2 and c2 on x86', |
| 269 | + 'demo_board_1/zephyr/scripts/tests/twister/test_data/testsuites/tests/test_d/test_d.check_1' : 'all test_d', |
| 270 | + 'demo_board_3/zephyr/scripts/tests/twister/test_data/testsuites/tests/test_d/test_d.check_1' : 'all test_d', |
| 271 | + 'demo_board_2/zephyr/scripts/tests/twister/test_data/testsuites/tests/test_d/test_d.check_1' : 'all test_d', |
| 272 | + 'demo_board_2/zephyr/scripts/tests/twister/test_data/testsuites/tests/test_c/test_c.check_2' : 'a2 and c2 on x86' |
| 273 | +} |
| 274 | + |
| 275 | +QUARANTINE_PLATFORM = { |
| 276 | + 'demo_board_3/zephyr/scripts/tests/twister/test_data/testsuites/tests/test_a/test_a.check_1' : 'all on board_3', |
| 277 | + 'demo_board_3/zephyr/scripts/tests/twister/test_data/testsuites/tests/test_a/test_a.check_2' : 'all on board_3', |
| 278 | + 'demo_board_3/zephyr/scripts/tests/twister/test_data/testsuites/tests/test_d/test_d.check_1' : 'all on board_3', |
| 279 | + 'demo_board_3/zephyr/scripts/tests/twister/test_data/testsuites/tests/test_b/test_b.check_1' : 'all on board_3', |
| 280 | + 'demo_board_3/zephyr/scripts/tests/twister/test_data/testsuites/tests/test_b/test_b.check_2' : 'all on board_3', |
| 281 | + 'demo_board_3/zephyr/scripts/tests/twister/test_data/testsuites/tests/test_c/test_c.check_1' : 'all on board_3', |
| 282 | + 'demo_board_3/zephyr/scripts/tests/twister/test_data/testsuites/tests/test_c/test_c.check_2' : 'all on board_3' |
| 283 | +} |
| 284 | + |
| 285 | +QUARANTINE_MULTIFILES = { |
| 286 | + **QUARANTINE_BASIC, |
| 287 | + **QUARANTINE_WITH_REGEXP |
| 288 | +} |
| 289 | + |
| 290 | +@pytest.mark.parametrize( |
| 291 | + ("quarantine_files, quarantine_verify, expected_val"), |
| 292 | + [ |
| 293 | + (['basic.yaml'], False, QUARANTINE_BASIC), |
| 294 | + (['with_regexp.yaml'], False, QUARANTINE_WITH_REGEXP), |
| 295 | + (['with_regexp.yaml'], True, QUARANTINE_WITH_REGEXP), |
| 296 | + (['platform.yaml'], False, QUARANTINE_PLATFORM), |
| 297 | + (['basic.yaml', 'with_regexp.yaml'], False, QUARANTINE_MULTIFILES), |
| 298 | + (['empty.yaml'], False, {}) |
| 299 | + ], |
| 300 | + ids=[ |
| 301 | + 'basic', |
| 302 | + 'with_regexp', |
| 303 | + 'quarantine_verify', |
| 304 | + 'platform', |
| 305 | + 'multifiles', |
| 306 | + 'empty' |
| 307 | + ]) |
| 308 | +def test_quarantine(class_testplan, platforms_list, test_data, |
| 309 | + quarantine_files, quarantine_verify, expected_val): |
| 310 | + """ Testing quarantine feature in Twister |
| 311 | + """ |
| 312 | + class_testplan.options.all = True |
| 313 | + class_testplan.platforms = platforms_list |
| 314 | + class_testplan.platform_names = [p.name for p in platforms_list] |
| 315 | + class_testplan.TESTSUITE_FILENAME = 'test_data.yaml' |
| 316 | + class_testplan.add_testsuites() |
| 317 | + |
| 318 | + quarantine_list = [ |
| 319 | + os.path.join(test_data, 'quarantines', quarantine_file) for quarantine_file in quarantine_files |
| 320 | + ] |
| 321 | + class_testplan.quarantine = Quarantine(quarantine_list) |
| 322 | + class_testplan.options.quarantine_verify = quarantine_verify |
| 323 | + class_testplan.apply_filters() |
| 324 | + |
| 325 | + for testname, instance in class_testplan.instances.items(): |
| 326 | + if quarantine_verify: |
| 327 | + if testname in expected_val: |
| 328 | + assert not instance.status |
| 329 | + else: |
| 330 | + assert instance.status == 'filtered' |
| 331 | + assert instance.reason == "Not under quarantine" |
| 332 | + else: |
| 333 | + if testname in expected_val: |
| 334 | + assert instance.status == 'filtered' |
| 335 | + assert instance.reason == expected_val[testname] |
| 336 | + else: |
| 337 | + assert not instance.status |
0 commit comments