| #!/usr/bin/env python3 |
| # Copyright (c) 2020 Intel Corporation |
| # |
| # SPDX-License-Identifier: Apache-2.0 |
| """ |
| This test file contains foundational testcases for Twister tool |
| """ |
| |
| import os |
| import sys |
| import pytest |
| |
| from pathlib import Path |
| |
| ZEPHYR_BASE = os.getenv("ZEPHYR_BASE") |
| sys.path.insert(0, os.path.join(ZEPHYR_BASE, "scripts/pylib/twister")) |
| |
| import scl |
| from twisterlib.error import ConfigurationError |
| from twisterlib.testplan import TwisterConfigParser |
| |
| def test_yamlload(): |
| """ Test to check if loading the non-existent files raises the errors """ |
| filename = 'testcase_nc.yaml' |
| with pytest.raises(FileNotFoundError): |
| scl.yaml_load(filename) |
| |
| |
| @pytest.mark.parametrize("filename, schema", |
| [("testsuite_correct_schema.yaml", "testsuite-schema.yaml"), |
| ("platform_correct_schema.yaml", "platform-schema.yaml")]) |
| def test_correct_schema(filename, schema, test_data): |
| """ Test to validate the testsuite schema""" |
| filename = test_data + filename |
| schema = scl.yaml_load(ZEPHYR_BASE +'/scripts/schemas/twister//' + schema) |
| data = TwisterConfigParser(filename, schema) |
| data.load() |
| assert data |
| |
| |
| @pytest.mark.parametrize("filename, schema", |
| [("testsuite_incorrect_schema.yaml", "testsuite-schema.yaml"), |
| ("platform_incorrect_schema.yaml", "platform-schema.yaml")]) |
| def test_incorrect_schema(filename, schema, test_data): |
| """ Test to validate the exception is raised for incorrect testsuite schema""" |
| filename = test_data + filename |
| schema = scl.yaml_load(ZEPHYR_BASE +'/scripts/schemas/twister//' + schema) |
| with pytest.raises(Exception) as exception: |
| scl.yaml_load_verify(filename, schema) |
| assert str(exception.value) == "Schema validation failed" |
| |
| def test_testsuite_config_files(): |
| """ Test to validate conf and overlay files are extracted properly """ |
| filename = Path(ZEPHYR_BASE) / "scripts/tests/twister/test_data/testsuites/tests/test_config/test_data.yaml" |
| schema = scl.yaml_load(Path(ZEPHYR_BASE) / "scripts/schemas/twister/testsuite-schema.yaml") |
| data = TwisterConfigParser(filename, schema) |
| data.load() |
| |
| # Load and validate the specific scenario from testcases.yaml |
| scenario = data.get_scenario("test_config.main") |
| assert scenario |
| |
| # CONF_FILE, DTC_OVERLAY_FILE, OVERLAY_CONFIG fields should be stripped out |
| # of extra_args. Other fields should remain untouched. |
| assert scenario["extra_args"] == ["UNRELATED1=abc", "UNRELATED2=xyz"] |
| |
| # Check that all conf files have been assembled in the correct order |
| assert ";".join(scenario["extra_conf_files"]) == \ |
| "conf1;conf2;conf3;conf4;conf5;conf6;conf7;conf8" |
| |
| # Check that all DTC overlay files have been assembled in the correct order |
| assert ";".join(scenario["extra_dtc_overlay_files"]) == \ |
| "overlay1;overlay2;overlay3;overlay4;overlay5;overlay6;overlay7;overlay8" |
| |
| # Check that all overlay conf files have been assembled in the correct order |
| assert scenario["extra_overlay_confs"] == \ |
| ["oc1.conf", "oc2.conf", "oc3.conf", "oc4.conf"] |
| |
| # Check extra kconfig statements, too |
| assert scenario["extra_configs"] == ["CONFIG_FOO=y"] |
| |
| def test_configuration_error(): |
| """Test to validate that the ConfigurationError is raisable without further errors. |
| |
| It ought to have an str with a path, colon and a message as its only args entry. |
| """ |
| filename = Path(ZEPHYR_BASE) / "scripts/tests/twister/test_twister.py" |
| |
| with pytest.raises(ConfigurationError) as exception: |
| raise ConfigurationError(filename, "Dummy message.") |
| |
| assert len(exception.value.args) == 1 |
| assert exception.value.args[0] == str(filename) + ": " + "Dummy message." |