check platforms to prevent mismached feature types.

This commit is contained in:
Chi Song (from Dev Box) 2024-10-02 16:32:17 -07:00 коммит произвёл LiliDeng
Родитель a767a8f82b
Коммит 125817aff0
2 изменённых файлов: 44 добавлений и 12 удалений

Просмотреть файл

@ -655,7 +655,9 @@ class LisaRunner(BaseRunner):
tested_environment = environment.get_guest_environment()
try:
if result.check_environment(
environment=tested_environment, save_reason=True
environment=tested_environment,
environment_platform_type=self.platform.type_name(),
save_reason=True,
) and (
not result.runtime_data.use_new_environment
or environment.is_new
@ -784,9 +786,6 @@ class LisaRunner(BaseRunner):
platform_type: str,
) -> None:
assert platform_type
platform_type_set = search_space.SetSpace[str](
is_allow_set=True, items=[platform_type]
)
cases_ignored_features: Dict[str, Set[str]] = {}
# if platform defined requirement, replace the requirement from
@ -797,12 +796,10 @@ class LisaRunner(BaseRunner):
platform_requirement = self._create_platform_requirement()
test_req: TestCaseRequirement = test_result.runtime_data.requirement
# check if there is platform requirement on test case
if test_req.platform_type and len(test_req.platform_type) > 0:
check_result = platform_type_set.check(test_req.platform_type)
if not check_result.result:
test_result.set_status(TestStatus.SKIPPED, check_result.reasons)
continue
check_result = test_result.check_platform(platform_type)
if not check_result.result:
test_result.set_status(TestStatus.SKIPPED, check_result.reasons)
continue
if test_result.can_run:
assert test_req.environment

Просмотреть файл

@ -187,11 +187,23 @@ class TestResult:
self._send_result_message(self.stacktrace)
def check_environment(
self, environment: Environment, save_reason: bool = False
self,
environment: Environment,
# The environment platform may not be associated to the environment at
# early stage, so pass it in to validate.
environment_platform_type: str = "",
save_reason: bool = False,
) -> bool:
requirement = self.runtime_data.metadata.requirement
assert requirement.environment
check_result = requirement.environment.check(environment.capability)
check_result = search_space.ResultReason()
if environment_platform_type:
check_result = self.check_platform(environment_platform_type)
if check_result.result:
check_result = requirement.environment.check(environment.capability)
if (
check_result.result
and requirement.os_type
@ -230,6 +242,29 @@ class TestResult:
return self._timer.elapsed(False)
def check_platform(
self, environment_platform_type: str
) -> search_space.ResultReason:
result = search_space.ResultReason()
assert environment_platform_type, "platform type is not defined"
environment_platform_type_set = search_space.SetSpace[str](
is_allow_set=True, items=[environment_platform_type]
)
# only check platform, when it's defined.
if (
not self.runtime_data.requirement
or not self.runtime_data.requirement.platform_type
or len(self.runtime_data.requirement.platform_type.items) == 0
):
return result
test_supported_platforms = self.runtime_data.requirement.platform_type
result = environment_platform_type_set.check(test_supported_platforms)
return result
def _send_result_message(self, stacktrace: Optional[str] = None) -> None:
self.elapsed = self.get_elapsed()