82 lines
4.1 KiB
Python
82 lines
4.1 KiB
Python
#!/usr/bin/env python3
|
|
"""Behavior tests for the bounded CV184X read-only SDK inspector."""
|
|
|
|
from pathlib import Path
|
|
from tempfile import TemporaryDirectory
|
|
|
|
import inspect_cv184x_sdk
|
|
|
|
|
|
def write(path: Path, value: str) -> None:
|
|
path.parent.mkdir(parents=True, exist_ok=True)
|
|
path.write_text(value, encoding="utf-8")
|
|
|
|
|
|
def main() -> int:
|
|
with TemporaryDirectory() as temporary:
|
|
root = Path(temporary) / "EmxRes"
|
|
board = "cv1841cp_wevb_0015a_spinand"
|
|
project = root / "CV1841CP-TEST"
|
|
sdk = Path(temporary) / "cv184x_v6.3.3"
|
|
write(project / "buildEnvConfig.sh", "EP_COMPANY=Cvitek\nEP_CHIP=CV1841CP\nEP_FLASH_TYPE=nand\nEP_SDK_VER=cv184x_v6.3.3\nBUILD_SDK_DRIVER=n\n")
|
|
write(project / "configs/EPSYNCSDKConfig.sh",
|
|
"EP_UBOOT_BUILD_TOP=build/boards/cv184x/$CV_BUILD_TYPE # known board\n"
|
|
f"rsync -av $EP_CONFIGS_PATH/{board}/. $EP_UBOOT_BUILD_TOP/\nexit 0\n")
|
|
source = project / "configs" / board
|
|
write(source / f"{board}_defconfig", "CONFIG_DUAL_OS=y\nCONFIG_ION_SIZE=0x600000\n")
|
|
write(source / "partition/partition_spinand.xml", "<physical_partition/>\n")
|
|
write(root / "tools/BuildCvitek184XSDKTool.sh",
|
|
'if [[ $EP_CHIP == "CV1841CP" ]];then\n'
|
|
' if [[ $EP_FLASH_TYPE == "nor" ]];then\n'
|
|
' CV_BUILD_TYPE=cv1841cp_wevb_0015a_spinor\n'
|
|
' elif [[ $EP_FLASH_TYPE == "nand" ]];then\n'
|
|
f' CV_BUILD_TYPE={board}\n'
|
|
' fi\nfi\nexport CV_BUILD_TYPE\n'
|
|
'Ep_Sync_SDK_Config_Func\ndefconfig $CV_BUILD_TYPE\n'
|
|
'./cvitek_cv184x_patch/scripts/repos --applypatch --force\nbuild_osdrv\n')
|
|
write(sdk / "cvitek_cv184x_patch/scripts/repos", 'run_cmd(["git", "reset", "--hard", expected_commit])\n')
|
|
write(sdk / "build/boards/cv184x" / board / f"{board}_defconfig", "CONFIG_DUAL_OS=n\n")
|
|
write(sdk / "build/boards/cv184x" / board / "partition/partition_spinand.xml", "<physical_partition/>\n")
|
|
write(sdk / "build/.config", "CONFIG_DUAL_OS=n\nCONFIG_ION_SIZE=0x600000\n")
|
|
result = inspect_cv184x_sdk.inspect(project, sdk)
|
|
assert result["tool_build_type"] == board, result
|
|
assert result["build_order"] == "sync-before-defconfig", result
|
|
assert len(result["mappings"]) == 2, result
|
|
assert result["project_partition_candidate"] == "partition_spinand.xml", result
|
|
codes = {item["code"] for item in result["alerts"]}
|
|
assert {"sdk_copy_differs", "generated_config_differs", "patch_force_reset_possible", "driver_switch_ignored"} <= codes, codes
|
|
assert "build_type_mismatch" not in codes, codes
|
|
assert inspect_cv184x_sdk.partition_name({"CONFIG_ROOTFS_B": "y"}, "nand") == "partition_ab_spinand.xml"
|
|
assert inspect_cv184x_sdk.partition_name({"CONFIG_ROOTFS_B": "y", "CONFIG_ROOTFS_RECOVERY": "y"}, "nand") == "partition_abr_spinand.xml"
|
|
|
|
write(root / "tools/BuildCvitek184XSDKTool.sh",
|
|
'if [[ $EP_CHIP == "CV1841CP" ]];then\n'
|
|
' if [[ $EP_FLASH_TYPE == "nand" ]];then\n'
|
|
' CV_BUILD_TYPE=cv1841cp_other_spinand\n'
|
|
' fi\nfi\nexport CV_BUILD_TYPE\n'
|
|
'defconfig $CV_BUILD_TYPE\nEp_Sync_SDK_Config_Func\n')
|
|
mismatch = inspect_cv184x_sdk.inspect(project, sdk)
|
|
codes = {item["code"] for item in mismatch["alerts"]}
|
|
assert {"build_type_mismatch", "build_order_unknown"} <= codes, codes
|
|
|
|
write(project / "configs/EPSYNCSDKConfig.sh", "rsync -av $EP_CONFIGS_PATH/unknown/. $EP_UBOOT_BUILD_TOP/\n")
|
|
try:
|
|
inspect_cv184x_sdk.inspect(project, sdk)
|
|
except ValueError as exc:
|
|
assert "同步脚本" in str(exc)
|
|
else:
|
|
raise AssertionError("unknown mapping must fail closed")
|
|
|
|
try:
|
|
inspect_cv184x_sdk.inspect(project, Path(temporary))
|
|
except ValueError as exc:
|
|
assert "EP_SDK_VER" in str(exc)
|
|
else:
|
|
raise AssertionError("wrong SDK root must fail")
|
|
print("CV184X read-only SDK inspection tests passed")
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|