移植开源组件mbedtls测试集到YoC

简介: 本文主要记录了将mbedtls移植到YoC的过程,为测试人员对其他开源组件测试集做移植提供参考。

本文主要记录了将mbedtls移植到YoC的过程,为测试人员对其他开源组件测试集做移植提供参考。 通常来说,知名开源组件测试集覆盖测试点广,质量较高,具有移植价值,但它们大多基于x86平台,并且包含较为复杂的测试框架,移植起来还是有一点难度的。

下面就以mbedtls为例,介绍一下其移植过程。

mbedtls测试集执行流程
参考github上mbedtls的readme.md及tests/Makefile, 可以知道,mbedtls测试集当中每个模块生成单独的可执行文件,以aes.ecb为例,涉及到的输入文件如下:

Main code file : suites/main_test.function
Platform code file : suites/host_test.function
Helper file : suites/helpers.function
Test suite file : suites/test_suite_aes.function
Test suite data : suites/test_suite_aes.ecb.data
Script file : scripts/generate_test_code.py
涉及到的输出文件如下:

Test suite file : test_suite_aes.ecb.c
Test suite data : test_suite_aes.ecb.datax
generate_test_code.py以.function文件为模板,参考.data文件生成test_suite_aes.ecb.c和test_suite_aes.ecb.datax。 以test_suite_aes.ecb.c为例,参考test_suite_aes.ecb.datax前两行:
AES-128-CBC Encrypt NIST KAT #1
2:hex:"fffffffffffff8000000000000000000":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"8b527a6aebdaec9eaef8eda2cb7783e5":int:0

第一行为case描述,第二行首先被parse_arguments分隔存入params数组,params第一个元素为2,参考test_funcs,对应要执行的function为test_aes_encrypt_cbc_wrapper,查看convert_params函数可以知道最终执行的函数调用为

unsigned char *p0 = {0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
size_t p1 = 16;
unsigned char *p2 ={0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
size_t p3 = 16;
unsigned char *p4 ={0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
size_t p5 = 16;
unsigned char *p6={0x8b,0x52,0x7a,0x6a,0xeb,0xda,0xec,0x9e,0xae,0xf8,0xed,0xa2,0xcb,0x77,0x83,0xe5};
size_t p7 = 16;
int p8 = 0
test_aes_encrypt_cbc ({p0,p1}, {p2,p3},{p4,p5},{p6,p7}, p8)
test_aes_encrypt_cbc里面使用TEST_ASSERT来判断case是否pass。

移植设计
首先,我们需要将datax文件放到YoC当中,目前YoC支持spiffs和lfs文件系统,这里我们以lfs为例,介绍一下如何将datax文件放入YoC。 参考

solutions_cb5654/smart_speaker_demo/app/src/audio/lfsdisk/README.md
可以将支持的模块的datax文件都放入一个文件夹,然后制作好镜像。
在要编译的package.yaml里面指定的config.yaml里面添加lfs分区,设定好大小,要和制作的lfs镜像文件的大小保持一致。 在要编译的package.yaml里面Makefile里面指定好编好的lfs镜像目录,将其copy到$(MK_GENERATED_IMGS_PATH)/data/lfs当中。
其次,mbedtls测试集使用了fgets来读取文件内容,YoC不支持FILE *指针,我们使用aos_read自己实现了fgets,代码如下:

static char my_fgets(int fd, char s, int n)
{
int c;
char *cs;
cs = s;
while(--n > 0 && (c = aos_read(fd, s, 1)) > 0)
{

  if((*cs++ = *s++) == '\n')
  {
    break;
  }

}
*cs = '0';
return (c == 0 && cs == s) ? NULL : s ;
}
fopen, fclose可以直接用aos_open, aos_close替换,feof逻辑使用do while循环替换。

问题及调试
YoC里面case是编译成一个solution,然后利用console组件aos_cli_register_command将需要执行的suite注册为串口命令,通过串口命令来执行对应的case。前面提到每个模块都会被编成单独的可执行文件,所以有各自的main函数,移植需要将各模块的main修改,这里采用的方式是修改main为$main_name,然后在scripts/generate_test_code.py里面add_input_info函数增加

snippets['main_name'] = c_file.strip("./")[:-2].replace(".","_")
另外,由于要读取的文件存入了lfs分区,需要修改suites/host_test.function里面的execute_tests将default_filename从"DATA_FILE"改为"/lfs/DATA_FILE"。

此外,由于用到了vfs相关api,需要在suites/helpers.function里面增加#include ,但这样会导致编译失败,由于我们不需要在x86平台生成可执行文件,可以修改tests/Makefile,注释掉$(CC) $(LOCAL_CFLAGS) $(CFLAGS) $< $(MBEDTLS_TEST_OBJS) $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@。

编译过程还会缺乏文件,相关的都一并引入,如图image.png
需要在package.yaml当中的source_file里面添加

app/src/mbedtls_test/*.c
app/src/mbedtls_test/src/*.c
最后编译还是会报重复定义,在重复的函数名前添加static限定即可解决。

参考文件patch: https://gist.github.com/lzq420241/63ad7d7465c8452ba0c480d168c99748

相关文章
|
8天前
|
安全 Linux 网络安全
Metasploit Framework 6.4.88 (macOS, Linux, Windows) - 开源渗透测试框架
Metasploit Framework 6.4.88 (macOS, Linux, Windows) - 开源渗透测试框架
128 0
|
2月前
|
人工智能 自然语言处理 监控
一文看懂开源Coze如何让测试效率飙升
Coze是测试工程师的AI引擎,支持私有部署与零代码测试,提升效率并降低成本。覆盖智能用例生成、数字员工值守、缺陷分析、多模态报告与安全测试五大场景,助力测试智能化转型。
|
4月前
|
Linux 网络安全 iOS开发
Metasploit Framework 6.4.63 (macOS, Linux, Windows) - 开源渗透测试框架
Metasploit Framework 6.4.63 (macOS, Linux, Windows) - 开源渗透测试框架
115 4
Metasploit Framework 6.4.63 (macOS, Linux, Windows) - 开源渗透测试框架
|
5月前
|
人工智能 自然语言处理 JavaScript
测试工程师要失业?Magnitude:开源AI Agent驱动的端到端测试框架,让Web测试更智能,自动完善测试用例!
Magnitude是一个基于视觉AI代理的开源端到端测试框架,通过自然语言构建测试用例,结合推理代理和视觉代理实现智能化的Web应用测试,支持本地运行和CI/CD集成。
718 15
测试工程师要失业?Magnitude:开源AI Agent驱动的端到端测试框架,让Web测试更智能,自动完善测试用例!
|
5月前
|
人工智能 自然语言处理 测试技术
自然语言生成代码一键搞定!Codex CLI:OpenAI开源终端AI编程助手,代码重构+测试全自动
Codex CLI是OpenAI推出的轻量级AI编程智能体,基于自然语言指令帮助开发者高效生成代码、执行文件操作和进行版本控制,支持代码生成、重构、测试及数据库迁移等功能。
881 0
自然语言生成代码一键搞定!Codex CLI:OpenAI开源终端AI编程助手,代码重构+测试全自动
|
5月前
|
Linux 网络安全 iOS开发
Metasploit Framework 6.4.55 (macOS, Linux, Windows) - 开源渗透测试框架
Metasploit Framework 6.4.55 (macOS, Linux, Windows) - 开源渗透测试框架
124 0
Metasploit Framework 6.4.55 (macOS, Linux, Windows) - 开源渗透测试框架
|
7月前
|
Linux 网络安全 iOS开发
Metasploit Framework 6.4.49 (macOS, Linux, Windows) - 开源渗透测试框架
Metasploit Framework 6.4.49 (macOS, Linux, Windows) - 开源渗透测试框架
104 0
Metasploit Framework 6.4.49 (macOS, Linux, Windows) - 开源渗透测试框架
|
8月前
|
数据挖掘 测试技术 项目管理
2025年测试用例管理看这一篇就够了 ----Codes 开源免费、全面的测试管理解决方案
Codes 是国内首款重新定义 SaaS 模式的开源项目管理平台,支持云端认证、本地部署、全部功能开放,并且对 30 人以下团队免费。它通过整合迭代、看板、度量和自动化等功能,简化测试协同工作,使敏捷测试更易于实施。并提供低成本的敏捷测试解决方案,如同步在线离线测试用例、流程化管理缺陷、低代码接口自动化测试和 CI/CD,以及基于迭代的测试管理和测试用时的成本计算等,践行敏捷测试。
2025年测试用例管理看这一篇就够了 ----Codes 开源免费、全面的测试管理解决方案
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
MarS:微软开源金融市场模拟预测引擎,支持策略测试、风险管理和市场分析
MarS 是微软亚洲研究院推出的金融市场模拟预测引擎,基于生成型基础模型 LMM,支持无风险环境下的交易策略测试、风险管理和市场分析。
281 8
MarS:微软开源金融市场模拟预测引擎,支持策略测试、风险管理和市场分析
|
9月前
|
人工智能 自然语言处理 前端开发
CodeArena:在线 LLM 编程竞技场!用于测试不同开源 LLM 的编程能力,实时更新排行榜
CodeArena 是一个在线平台,用于测试和比较不同大型语言模型(LLM)的编程能力。通过实时显示多个 LLM 的代码生成过程和结果,帮助开发者选择适合的 LLM,并推动 LLM 技术的发展。
225 7
CodeArena:在线 LLM 编程竞技场!用于测试不同开源 LLM 的编程能力,实时更新排行榜