diff --git a/docs/system_base/dtc/tc_dtc_test_fun001.yaml b/docs/system_base/dtc/tc_dtc_test_fun001.yaml new file mode 100644 index 0000000000000000000000000000000000000000..5c62d9885c2b5404dc5f1c526ceefa435bbfb42d --- /dev/null +++ b/docs/system_base/dtc/tc_dtc_test_fun001.yaml @@ -0,0 +1,39 @@ +作者: douzhichong +优先级: P1 +支持架构: noarch +执行方式: 自动 +测试类型: 功能测试 +通用标签: local, dtc +用例描述: 测试 dtc 基础功能,包括帮助信息、版本信息及基本的格式转换功能 +修改人: douzhichong + +前置条件: +- 安装 dtc 软件包 +- 确保测试目录有写入权限 + +测试步骤: +- ## 测试帮助信息功能 + - 显示 dtc 帮助信息 [命令: dtc -h] + - 验证命令执行成功(返回码为0) + +- ## 测试版本信息功能 + - 显示 dtc 版本信息 [命令: dtc -v] + - 验证命令执行成功(返回码为0) + +- ## 测试基本的格式转换功能 + - 创建简单的设备树源文件 [命令: echo "/dts-v1/; / { compatible = \"test\"; }; " > test.dts] + - 将 .dts 文件编译为 .dtb 二进制文件 [命令: dtc -I dts -O dtb -o test.dtb test.dts] + - 验证编译成功(返回码为0) + - 将 .dtb 二进制文件反编译为 .dts 源文件 [命令: dtc -I dtb -O dts -o test_decompiled.dts test.dtb] + - 验证反编译成功(返回码为0) + +- ## 清理测试文件 + - 删除临时测试文件 [命令: rm -f test.dts test.dtb test_decompiled.dts] + - 验证清理成功(返回码为0) + +期望结果: +- dtc 帮助信息显示正常 +- dtc 版本信息显示正常 +- dts 到 dtb 的编译过程成功完成 +- dtb 到 dts 的反编译过程成功完成 +- 所有命令返回码均为0 \ No newline at end of file diff --git a/docs/system_base/dtc/tc_dtc_test_fun002.yaml b/docs/system_base/dtc/tc_dtc_test_fun002.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f12f0b5c4df83d5a94665e83bbe6d6ff80b47aac --- /dev/null +++ b/docs/system_base/dtc/tc_dtc_test_fun002.yaml @@ -0,0 +1,52 @@ +作者: douzhichong +优先级: P1 +支持架构: noarch +执行方式: 自动 +测试类型: 功能测试 +通用标签: local, dtc +用例描述: 测试 dtc 高级功能,包括复杂设备树编译、不同输出版本、填充对齐等选项 +修改人: douzhichong + +前置条件: +- 安装 dtc 软件包 +- 确保测试目录有写入权限 + +测试步骤: +- ## 测试复杂设备树编译 + - 创建复杂的设备树源文件,包含内存、CPU等节点 + - 验证文件创建成功(返回码为0) + +- ## 测试不同输出版本 + - 使用版本16编译设备树 [命令: dtc -I dts -O dtb -V 16 -o test_v16.dtb test_complex.dts] + - 验证编译成功(返回码为0) + - 使用版本17编译设备树 [命令: dtc -I dts -O dtb -V 17 -o test_v17.dtb test_complex.dts] + - 验证编译成功(返回码为0) + +- ## 测试填充选项 + - 使用填充选项编译设备树 [命令: dtc -I dts -O dtb -p 1024 -o test_padded.dtb test_complex.dts] + - 验证编译成功(返回码为0) + +- ## 测试对齐选项 + - 使用对齐选项编译设备树 [命令: dtc -I dts -O dtb -a 4096 -o test_aligned.dtb test_complex.dts] + - 验证编译成功(返回码为0) + +- ## 测试静默模式 + - 使用静默模式编译设备树 [命令: dtc -q -I dts -O dtb -o test_quiet.dtb test_complex.dts] + - 验证编译成功(返回码为0) + +- ## 测试排序选项 + - 使用排序选项重新输出设备树源文件 [命令: dtc -s -I dts -O dts -o test_sorted.dts test_complex.dts] + - 验证处理成功(返回码为0) + +- ## 清理测试文件 + - 删除所有临时测试文件 [命令: rm -f test_complex.dts test_v16.dtb test_v17.dtb test_padded.dtb test_aligned.dtb test_quiet.dtb test_sorted.dts] + - 验证清理成功(返回码为0) + +期望结果: +- 复杂设备树文件创建成功 +- 所有不同版本的编译过程均成功完成 +- 填充选项处理正常 +- 对齐选项处理正常 +- 静默模式工作正常 +- 排序功能正常工作 +- 所有命令返回码均为0 \ No newline at end of file diff --git a/docs/system_base/dtc/tc_dtc_test_fun003.yaml b/docs/system_base/dtc/tc_dtc_test_fun003.yaml new file mode 100644 index 0000000000000000000000000000000000000000..37a2e7857b83afeb54bd94a0b52f3f93a314df7f --- /dev/null +++ b/docs/system_base/dtc/tc_dtc_test_fun003.yaml @@ -0,0 +1,118 @@ +作者: douzhichong +优先级: P1 +支持架构: noarch +执行方式: 自动 +测试类型: 功能测试 +通用标签: local, dtc +用例描述: 测试 dtc 特殊功能,包括依赖文件生成、符号处理、注释输出、phandle格式等高级选项 +修改人: douzhichong + +前置条件: +- 安装 dtc 软件包 +- 确保测试目录有写入权限 + +测试步骤: +- ## 测试基础设备树创建 + - 创建简单的设备树源文件 [命令: echo "/dts-v1/; / { compatible = \"test\"; }; " > simple.dts] + - 验证文件创建成功(返回码为0) + +- ## 测试依赖文件生成 + - 生成编译依赖文件 [命令: dtc -I dts -O dtb -d dependencies.dep -o test_dep.dtb simple.dts] + - 验证依赖文件生成成功(返回码为0) + - 验证依赖文件存在且包含内容 + +- ## 测试启动CPU选项 + - 创建包含CPU节点的设备树文件 + - 设置启动CPU为0 [命令: dtc -I dts -O dtb -b 0 -o cpu_test.dtb cpu_test.dts] + - 验证编译成功(返回码为0) + +- ## 测试符号生成 + - 创建带标签的设备树文件 + - 生成符号信息 [命令: dtc -@ -I dts -O dtb -o symbol_test.dtb symbol_test.dts] + - 验证编译成功(返回码为0) + +- ## 测试注释输出 + - 生成带注释的设备树源文件 [命令: dtc -T -I dts -O dts -o annotated.dts simple.dts] + - 验证处理成功(返回码为0) + +- ## 测试不同phandle格式 + - 创建带phandle的设备树文件 + - 测试legacy格式 [命令: dtc -H legacy -I dts -O dtb -o phandle_legacy.dtb phandle_test.dts] + - 验证编译成功(返回码为0) + - 测试epapr格式 [命令: dtc -H epapr -I dts -O dtb -o phandle_epapr.dtb phandle_test.dts] + - 验证编译成功(返回码为0) + - 测试both格式 [命令: dtc -H both -I dts -O dtb -o phandle_both.dtb phandle_test.dts] + - 验证编译成功(返回码为0) + +- ## 测试保留条目选项 + - 添加保留条目 [命令: dtc -I dts -O dtb -R 4 -o test_reserve.dtb simple.dts] + - 验证编译成功(返回码为0) + +- ## 测试空间分配选项 + - 分配额外空间 [命令: dtc -I dts -O dtb -S 4096 -o test_space.dtb simple.dts] + - 验证编译成功(返回码为0) + +- ## 测试静默模式级别 + - 测试一级静默 [命令: dtc -q -I dts -O dtb -o test_q.dtb simple.dts] + - 验证编译成功(返回码为0) + - 测试二级静默 [命令: dtc -qq -I dts -O dtb -o test_qq.dtb simple.dts] + - 验证编译成功(返回码为0) + - 测试三级静默 [命令: dtc -qqq -I dts -O dtb -o test_qqq.dtb simple.dts] + - 验证编译成功(返回码为0) + +- ## 测试警告控制选项 + - 创建可能产生警告的设备树文件 + - 禁用特定警告 [命令: dtc -W no-unit_address_format -I dts -O dtb -o reg_test.dtb reg_test.dts] + - 验证编译成功(返回码为0) + +- ## 测试十六进制值处理 + - 创建包含十六进制值的设备树文件 + - 编译设备树 [命令: dtc -I dts -O dtb -o value_test.dtb value_test.dts] + - 验证编译成功(返回码为0) + - 反编译验证 [命令: dtc -I dtb -O dts -o value_test_back.dts value_test.dtb] + - 验证反编译成功(返回码为0) + +- ## 测试自动别名生成 + - 创建带标签的节点 + - 生成自动别名 [命令: dtc -A -I dts -O dtb -o alias_test.dtb alias_test.dts] + - 验证编译成功(返回码为0) + +- ## 测试排序功能 + - 创建未排序的设备树文件 + - 排序输出 [命令: dtc -s -I dts -O dts -o sorted.dts unsorted.dts] + - 验证处理成功(返回码为0) + +- ## 测试输出版本控制 + - 创建版本测试文件 + - 测试版本16输出 [命令: dtc -I dts -O dtb -V 16 -o version_v16.dtb version_test.dts] + - 验证编译成功(返回码为0) + - 测试版本17输出 [命令: dtc -I dts -O dtb -V 17 -o version_v17.dtb version_test.dts] + - 验证编译成功(返回码为0) + +- ## 测试填充和对齐 + - 测试填充选项 [命令: dtc -I dts -O dtb -p 512 -o padded_test.dtb simple.dts] + - 验证编译成功(返回码为0) + - 测试对齐选项 [命令: dtc -I dts -O dtb -a 1024 -o aligned_test.dtb simple.dts] + - 验证编译成功(返回码为0) + +- ## 清理测试文件 + - 删除所有临时测试文件 + - 验证清理成功(返回码为0) + +期望结果: +- 所有设备树文件创建成功 +- 依赖文件正确生成并包含内容 +- 启动CPU选项设置成功 +- 符号生成功能正常工作 +- 注释输出功能正常 +- 各种phandle格式处理正确 +- 保留条目添加成功 +- 空间分配功能正常 +- 不同级别的静默模式工作正常 +- 警告控制功能有效 +- 十六进制值处理正确 +- 自动别名生成功能正常 +- 排序功能正常工作 +- 不同版本输出控制正常 +- 填充和对齐选项处理正确 +- 所有命令返回码均为0 \ No newline at end of file diff --git a/tests/system_base/dtc/tc_dtc_test_fun001.py b/tests/system_base/dtc/tc_dtc_test_fun001.py new file mode 100644 index 0000000000000000000000000000000000000000..85186ac47870431c626de89e4c38c229518fdb9a --- /dev/null +++ b/tests/system_base/dtc/tc_dtc_test_fun001.py @@ -0,0 +1,49 @@ +""" +@File: tc_dtc_test_fun001.py +@Time: 2025/12/10 15:45:00 +@Author: douzhichong +@Version: 1.0 +@Contact: douzhichong@inspur.com +@License: Mulan PSL v2 +@Modify: douzhichong +""" + +from common.basetest import LocalTest + + +class Test(LocalTest): + """ + See tc_dtc_test_fun001.yaml for details + + :avocado: tags=P1,noarch,local,dtc + """ + PARAM_DIC = {"pkg_name": "dtc"} + + def setUp(self): + super().setUp(self.PARAM_DIC) + + def test(self): + + code, result = self.cmd('dtc -h') + self.assertEqual(code, 0, "show dtc help information fail") + + code, result = self.cmd('dtc -v') + self.assertEqual(code, 0, "show dtc version information fail") + + create_cmd = 'echo "/dts-v1/; / { compatible = \\"test\\"; }; " > test.dts' + code, result = self.cmd(create_cmd) + self.assertEqual(code, 0, "create test.dts file fail") + + code, result = self.cmd('dtc -I dts -O dtb -o test.dtb test.dts') + self.assertEqual(code, 0, "compile dts to dtb fail") + + code, result = self.cmd('dtc -I dtb -O dts -o test_decompiled.dts test.dtb') + self.assertEqual(code, 0, "decompile dtb to dts fail") + + def tearDown(self): + + clean_cmd = 'rm -f test.dts test.dtb test_decompiled.dts' + code, result = self.cmd(clean_cmd) + self.assertEqual(code, 0, "clean up temporary files fail") + + super().tearDown(self.PARAM_DIC) \ No newline at end of file diff --git a/tests/system_base/dtc/tc_dtc_test_fun002.py b/tests/system_base/dtc/tc_dtc_test_fun002.py new file mode 100644 index 0000000000000000000000000000000000000000..32ea02c8ce5f1fdcab6b43b7878be20553b39937 --- /dev/null +++ b/tests/system_base/dtc/tc_dtc_test_fun002.py @@ -0,0 +1,80 @@ +""" +@File: tc_dtc_test_fun002.py +@Time: 2025/12/10 15:45:00 +@Author: douzhichong +@Version: 1.0 +@Contact: douzhichong@inspur.com +@License: Mulan PSL v2 +@Modify: douzhichong +""" + +from common.basetest import LocalTest + + +class Test(LocalTest): + """ + See tc_dtc_test_fun002.yaml for details + + :avocado: tags=P1,noarch,local,dtc + """ + PARAM_DIC = {"pkg_name": "dtc"} + + def setUp(self): + + super().setUp(self.PARAM_DIC) + + def test(self): + + dts_content = '''/dts-v1/; + +/ { + compatible = "test-board"; + #address-cells = <1>; + #size-cells = <1>; + + memory@0 { + device_type = "memory"; + reg = <0x00000000 0x40000000>; + }; + + cpus { + #address-cells = <1>; + #size-cells = <0>; + + cpu@0 { + compatible = "arm,cortex-a53"; + device_type = "cpu"; + reg = <0>; + }; + }; +};''' + + create_cmd = f'cat > test_complex.dts << \'EOF\'\n{dts_content}\nEOF' + code, result = self.cmd(create_cmd) + self.assertEqual(code, 0, "create complex test.dts file fail") + + code, result = self.cmd('dtc -I dts -O dtb -V 16 -o test_v16.dtb test_complex.dts') + self.assertEqual(code, 0, "compile with version 16 fail") + + code, result = self.cmd('dtc -I dts -O dtb -V 17 -o test_v17.dtb test_complex.dts') + self.assertEqual(code, 0, "compile with version 17 fail") + + code, result = self.cmd('dtc -I dts -O dtb -p 1024 -o test_padded.dtb test_complex.dts') + self.assertEqual(code, 0, "compile with padding fail") + + code, result = self.cmd('dtc -I dts -O dtb -a 4096 -o test_aligned.dtb test_complex.dts') + self.assertEqual(code, 0, "compile with alignment fail") + + code, result = self.cmd('dtc -q -I dts -O dtb -o test_quiet.dtb test_complex.dts') + self.assertEqual(code, 0, "compile in quiet mode fail") + + code, result = self.cmd('dtc -s -I dts -O dts -o test_sorted.dts test_complex.dts') + self.assertEqual(code, 0, "sort nodes and properties fail") + + def tearDown(self): + + clean_cmd = 'rm -f test_complex.dts test_v16.dtb test_v17.dtb ' + clean_cmd += 'test_padded.dtb test_aligned.dtb test_quiet.dtb test_sorted.dts' + code, result = self.cmd(clean_cmd) + self.assertEqual(code, 0, "clean up temporary files fail") + super().tearDown(self.PARAM_DIC) \ No newline at end of file diff --git a/tests/system_base/dtc/tc_dtc_test_fun003.py b/tests/system_base/dtc/tc_dtc_test_fun003.py new file mode 100644 index 0000000000000000000000000000000000000000..7597daadfd9c46abc8097f848ea2c2a545a23203 --- /dev/null +++ b/tests/system_base/dtc/tc_dtc_test_fun003.py @@ -0,0 +1,119 @@ +""" +@File: tc_dtc_test_fun003.py +@Time: 2025/12/10 15:45:00 +@Author: douzhichong +@Version: 1.0 +@Contact: douzhichong@inspur.com +@License: Mulan PSL v2 +@Modify: douzhichong +""" + +from common.basetest import LocalTest + + +class Test(LocalTest): + """ + See tc_dtc_test_fun003.yaml for details + + :avocado: tags=P1,noarch,local,dtc + """ + PARAM_DIC = {"pkg_name": "dtc"} + + def setUp(self): + super().setUp(self.PARAM_DIC) + + def test(self): + create_cmd = 'echo "/dts-v1/; / { compatible = \\"test\\"; }; " > simple.dts' + code, result = self.cmd(create_cmd) + self.assertEqual(code, 0, "create simple.dts file fail") + + code, result = self.cmd('dtc -I dts -O dtb -d dependencies.dep -o test_dep.dtb simple.dts') + self.assertEqual(code, 0, "generate dependency file fail") + + code, result = self.cmd('[ -f dependencies.dep ] && head -1 dependencies.dep') + self.assertEqual(code, 0, "dependency file not created properly") + + code, result = self.cmd( + 'echo "/dts-v1/; / { cpus { #address-cells = <1>; cpu@0 { compatible = \\"test-cpu\\"; }; }; }; " > cpu_test.dts') + code, result = self.cmd('dtc -I dts -O dtb -b 0 -o cpu_test.dtb cpu_test.dts') + self.assertEqual(code, 0, "set boot cpu fail") + + code, result = self.cmd('echo "/dts-v1/; / { label: node { value = <1>; }; }; " > symbol_test.dts') + code, result = self.cmd('dtc -@ -I dts -O dtb -o symbol_test.dtb symbol_test.dts') + self.assertEqual(code, 0, "generate symbols fail") + + code, result = self.cmd('dtc -T -I dts -O dts -o annotated.dts simple.dts') + self.assertEqual(code, 0, "annotate output fail") + + code, result = self.cmd('echo "/dts-v1/; / { node { phandle = <1>; }; }; " > phandle_test.dts') + + code, result = self.cmd('dtc -H legacy -I dts -O dtb -o phandle_legacy.dtb phandle_test.dts') + self.assertEqual(code, 0, "legacy phandle format fail") + + code, result = self.cmd('dtc -H epapr -I dts -O dtb -o phandle_epapr.dtb phandle_test.dts') + self.assertEqual(code, 0, "epapr phandle format fail") + + code, result = self.cmd('dtc -H both -I dts -O dtb -o phandle_both.dtb phandle_test.dts') + self.assertEqual(code, 0, "both phandle format fail") + + code, result = self.cmd('dtc -I dts -O dtb -R 4 -o test_reserve.dtb simple.dts') + self.assertEqual(code, 0, "add reserve entries fail") + + code, result = self.cmd('dtc -I dts -O dtb -S 4096 -o test_space.dtb simple.dts') + self.assertEqual(code, 0, "add extra space fail") + + code, result = self.cmd('dtc -q -I dts -O dtb -o test_q.dtb simple.dts') + self.assertEqual(code, 0, "quiet mode level 1 fail") + + code, result = self.cmd('dtc -qq -I dts -O dtb -o test_qq.dtb simple.dts') + self.assertEqual(code, 0, "quiet mode level 2 fail") + + code, result = self.cmd('dtc -qqq -I dts -O dtb -o test_qqq.dtb simple.dts') + self.assertEqual(code, 0, "quiet mode level 3 fail") + + code, result = self.cmd('echo "/dts-v1/; / { node@1 { reg = <1>; }; }; " > reg_test.dts') + + code, result = self.cmd('dtc -W no-unit_address_format -I dts -O dtb -o reg_test.dtb reg_test.dts') + self.assertEqual(code, 0, "disable specific warning fail") + + code, result = self.cmd('echo "/dts-v1/; / { value = <0x12345678>; }; " > value_test.dts') + code, result = self.cmd('dtc -I dts -O dtb -o value_test.dtb value_test.dts') + self.assertEqual(code, 0, "compile with hex value fail") + + code, result = self.cmd('dtc -I dtb -O dts -o value_test_back.dts value_test.dtb') + self.assertEqual(code, 0, "decompile dtb to dts fail") + + code, result = self.cmd('echo "/dts-v1/; / { node1: subnode1 { }; node2: subnode2 { }; }; " > alias_test.dts') + code, result = self.cmd('dtc -A -I dts -O dtb -o alias_test.dtb alias_test.dts') + self.assertEqual(code, 0, "auto-alias generation fail") + + code, result = self.cmd('echo "/dts-v1/; / { b = <2>; a = <1>; d = <4>; c = <3>; }; " > unsorted.dts') + code, result = self.cmd('dtc -s -I dts -O dts -o sorted.dts unsorted.dts') + self.assertEqual(code, 0, "sort nodes and properties fail") + + code, result = self.cmd('echo "/dts-v1/; / { compatible = \\"version-test\\"; }; " > version_test.dts') + code, result = self.cmd('dtc -I dts -O dtb -V 16 -o version_v16.dtb version_test.dts') + self.assertEqual(code, 0, "output version 16 fail") + + code, result = self.cmd('dtc -I dts -O dtb -V 17 -o version_v17.dtb version_test.dts') + self.assertEqual(code, 0, "output version 17 fail") + + code, result = self.cmd('dtc -I dts -O dtb -p 512 -o padded_test.dtb simple.dts') + self.assertEqual(code, 0, "add padding fail") + + code, result = self.cmd('dtc -I dts -O dtb -a 1024 -o aligned_test.dtb simple.dts') + self.assertEqual(code, 0, "add alignment fail") + + + def tearDown(self): + + clean_cmd = 'rm -rf simple.dts test_dep.dtb dependencies.dep cpu_test.dts cpu_test.dtb ' + clean_cmd += 'symbol_test.dts symbol_test.dtb annotated.dts phandle_test.dts ' + clean_cmd += 'phandle_legacy.dtb phandle_epapr.dtb phandle_both.dtb test_reserve.dtb ' + clean_cmd += 'test_space.dtb test_q.dtb test_qq.dtb test_qqq.dtb reg_test.dts reg_test.dtb ' + clean_cmd += 'value_test.dts value_test.dtb value_test_back.dts alias_test.dts alias_test.dtb ' + clean_cmd += 'unsorted.dts sorted.dts version_test.dts version_v16.dtb version_v17.dtb ' + clean_cmd += 'padded_test.dtb aligned_test.dtb' + code, result = self.cmd(clean_cmd) + self.assertEqual(code, 0, "clean up temporary files fail") + super().tearDown(self.PARAM_DIC) \ No newline at end of file