当前位置: 首页 > news >正文

suricata增加单元测试编译失败

一、环境

$ lsb_release  -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 22.04.5 LTS
Release:	22.04
Codename:	jammy

suricata: suricata7.0.5
IDE: vscode

二、背景

在suricata中开发了某个功能后,增加unittest时,无法编译通过。

三、unittest增加过程

3.1 增加Add功能

src/util-add.h

#ifndef __UTIL_ADD_H__
#define __UTIL_ADD_H__int Add(int a, int b);#ifdef UNITTESTS
void AddRegisterTests(void);
#endif#endif

src/util-add.c

#include "util-add.h"int Add(int a, int b)
{return a+b;
}#ifdef UNITTESTS
#include "tests/util-add.c"
#endif

3.2 添加源码编译

src/Makefile.am

noinst_HEADERS = \...util-add.h \...libsuricata_c_a_SOURCES = \...util-add.c \...

3.3 增加unittest

src/tests/util-add.c

#include "util-add.h"
#include "util-unittest.h"static int AddTest01(void)
{int a = Add(1, 2);FAIL_IF(a != 3);PASS;
}void AddRegisterTests(void)
{UtRegisterTests("AddTest01", AddTest01);
}

3.4 注册单元测试

src/runmode-unittests.c

#ifdef UNITTESTS
...
#include "util-add.h"
...
#endif...#ifdef UNITTESTS
static void RegisterUnittests(void)
{...AddRegisterTests();...
}
#endif

3.5 编译

$ ./configure --enable-unittest

请添加图片描述

$ make -j8

请添加图片描述

四、问题排查

明明有AddRegisterTests函数的实现,为啥报错说没有实现呢?
经过对比发现vscode未识别到宏UNITTESTS的定义
请添加图片描述

经过查找发现UNITTESTS定义在src/autoconf.h,
请添加图片描述

src/autoconf.h是通过文件src/suricata-common.h引用的
请添加图片描述

因此在src/util-add.c中增加 #include "suricata-common.h"解决。

五、总结

因缺少引用头文件src/suricata-common.h,导致UNITTESTS宏在util-add.c中未定义,致使并未编译src/tests/util-add.c
以后添加功能,都引用suricata-common.h头文件,此文件为公共头文件。

http://www.xdnf.cn/news/401275.html

相关文章:

  • cursor 出现 unauthorized request
  • Maven私服搭建与登录全攻略
  • [redis进阶六]详解redis作为缓存分布式锁
  • 贝叶斯算法
  • 【pypi镜像源】使用devpi实现python镜像源代理(缓存加速,私有仓库,版本控制)
  • C#调用YOLOV8实现定位
  • PyCharm 快捷键指南
  • Android11.0 framework第三方无源码APP读写断电后数据丢失问题解决
  • 嵌入式系统:从基础到应用的全面解析
  • 【程序员AI入门:开发】12.AI Agent 革命:从聊天机器人到智能工作流的跃迁
  • postgresql主从集群一键搭建脚本分享
  • 2025年渗透测试面试题总结-渗透测试红队面试七(题目+回答)
  • 基于事件驱动和策略模式的差异化处理方案
  • TDengine 在金融领域的应用
  • 算法模型部署后_python脚本API测试指南-记录3
  • PyTorch实战(4)——卷积神经网络(Convolutional Neural Network, CNN)详解
  • SVN 中文路径访问报错(权限已正确分配)
  • Java项目层级介绍 java 层级 层次
  • Termius ssh连接服务器 vim打开的文件无法复制问题
  • Java中的​​策略模式​​和​​模板方法模式
  • 想实现一个基于MCP的pptx生成系统架构图【初版实现】
  • Java-Arrays工具类:基础到进阶的数组操作全面指南
  • 14B检索能力超过Google Search,阿里ZeroSearch通过RL激发LLM检索推理能力~
  • MFC listctrl修改背景颜色
  • 【文心智能体】使用文心一言来给智能体设计一段稳定调用工作流的提示词
  • 解决LangChain4j报错HTTP/1.1 header parser received no bytes
  • 精益数据分析(56/126):创业阶段的划分与精益数据分析实践
  • ElasticSearch聚合操作案例
  • Oracle adg环境下调整redo日志组以及standby日志组大小
  • CSDN博客粘贴图片失败如何解决