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
头文件,此文件为公共头文件。
相关文章:
suricata增加单元测试编译失败
一、环境 $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.5 LTS Release: 22.04 Codename: jammysuricata: suricata7.0.5 IDE: vscode 二、背景 在suricata中开发了某个功能后,增加unittest时,…...
如何查看电脑处理器配置 电脑处理器查看方法
电脑处理器(CPU)直接影响着电脑的运行速度和响应能力,无论是进行日常办公、娱乐,还是玩大型游戏,处理器的性能都至关重要。那么,电脑cpu在哪里看呢?本文将为你介绍几种简单的方法,帮…...
idea查看pom文件依赖
IDEA中查看依赖树的插件 很方便 能够分析源码中引入的注解是来自哪个jar包的...
图形化编程平台的破局之道:从工具同质化到生态差异化
一、同质化困局的底层逻辑剖析 在全球图形化编程市场中,工具功能趋同已成为行业共识。据 Statista 2024 年数据显示,主流平台的基础功能重合度高达 78%,核心模块(如条件判断、循环结构)的实现方式高度相似。这种现象的…...
Spring Boot动态配置修改全攻略
精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 无需重启应用,实时更新配置的终极指南 在微服务架构中,动态配置管理是提高系统灵活性的关键技术。本文将通过4种主流方案,…...
基于STM32、HAL库的DPS368XTSA1气压传感器 驱动程序设计
一、简介: DPS368XTSA1 是 InvenSense(TDK 集团旗下公司)生产的一款高精度数字气压传感器,专为需要精确测量气压和温度的应用场景设计。它具有超低功耗、高精度、快速响应等特点,非常适合物联网、可穿戴设备和无人机等应用。 二、硬件接口: DPS368XTSA1 引脚STM32L4XX 引…...
VMware虚拟机实例-docker启动失败
DOCKER启动失败 错误消息 [rootlocalhost docker]# yum install docker......[rootlocalhost docker]# systemctl start dockerFailed to start docker.service: Unit is masked. 错误原因 # /var/log/messagesMay 12 18:14:04 localhost systemd: Started Session 11 of user…...
计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 09.天空和背景
天空和背景 对于 3D 场景,通常可以通过在远处的地平线附近创造一些逼真的效果,来增强其真实感。我们可以采用天空盒、天空柱(Skydome)或天空穹(Skydome)等技术来模拟天空。 天空盒 天空盒(Sk…...
CSDN博客粘贴图片失败如何解决
以前还好,最近越发的厉害了。 因为我最近恰好换了个网,所以我还以为是网络的问题。 网的问题我暂时解决不了,除非在加银子换个网,否则我搞不定。 终于找到一种貌似还行的方法,记录一下。 1,现象 CSDN博…...
USB学习【10】描述符-HID描述符
目录 1.前言2.HID描述符概述3.HID描述符组成4.报告描述符的概念和作用5.报告描述符中的通用项(Item) 1.前言 HID描述符功能上面相对独立一些,所以单分一篇专门整理。 原文链接:https://blog.csdn.net/weiaipan1314/article/detai…...
什么是Vim
Vim可是Linux中最强大、最受欢迎的文本编辑器之一,很多程序员、系统管理员都离不开它。要说清楚Vim的各种功能和用法,似乎有点长,但我会尽量用简单通俗的方式,把Vim的核心知识讲清楚,让你能一步一步开始使用它。 一、…...
【Unity3D插件】Unity3D插件之天气系统/日夜系统插件-UniStorm
推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享QQ群:398291828小红书小破站 一、前言 1.0136537.8,1.023651377.4,每天进步一点点,一年后就差了几十倍的差距,加油吧少年。 UniStorm是一款强大的动态昼夜天气系统&…...
AIGC时代的内容安全:AI检测技术如何应对新型风险挑战?
在数字时代,互联网内容以文本、图像、音频和视频等形式呈现爆发式增长,深刻塑造了信息传播的格局。然而,内容的快速传播也带来了严峻挑战:违法信息(如涉黄、涉政)、虚假广告、网络暴力等内容不仅威胁用户体…...
SAGAR线上网页程序生成准随机结构(SQS)
SAGAR线上网页程序地址 http://sagar.compphys.cn/sagar 页面最上方默认使用8个原子的Si为基础结构。 打开网页 选择C1模块 在下方填入结构信息,以及掺杂入原子和数量 这里则设置掺杂入4个C原子,然后点击submit,则会自动生成并让你下载一根压…...
Wi-Fi网络角色及功能详解
在 Wi-Fi 网络中,不同的角色和组件协同工作以实现无线通信。以下是 Wi-Fi 中的主要角色及其功能: 1. 基础设施模式(Infrastructure Mode) 这是最常见的 Wi-Fi 网络架构,包含以下核心角色: 接入点ÿ…...
18.three官方示例+编辑器+AI快速学习webgl_buffergeometry_points_interleaved
本实例主要讲解内容 这个Three.js示例展示了如何使用BufferGeometry和Points对象创建高效的粒子系统。通过共享内存缓冲区和交错存储顶点数据,实现了50万个粒子的流畅渲染,并为每个粒子设置基于位置的颜色。 核心技术包括: 使用ArrayBuffe…...
Oracle 19c 静默安装
文章目录 环境介绍安装包下载准备工作配置 yum 源安装依赖包创建用户和用户组创建必要目录关闭 SELinux配置内核参数配置资源限制配置环境变量 Oracle 19c 安装解压缩编辑相应文件执行静默安装配置监听静默创建数据库 数据库维护连接数据库 环境介绍 操作系统为 CentOS 7.9 O…...
vscode 默认环境路径
1.下面放在项目根目录上: .vscode/settings.json 2.settings.json内容: {"python.analysis.extraPaths": ["${workspaceFolder}"],"python.defaultInterpreterPath": "/shared_disk/users/lbg/envs/py310_see3d/b…...
电力系统静态安全因素与动态安全因素的区别及具体分类
电力系统的安全分析分为静态安全和动态安全两类。静态安全分析关注系统在稳态或小扰动下的安全裕度,动态安全分析则关注系统在大扰动或暂态过程中的稳定能力。 一、静态安全因素 频率静态安全 因素: 发电与负荷的静态平衡:需保证稳态下的发电…...
arduinoIDE核心库更新导致的ESP32开发板神秘接口更换和三方库冲突
ESP32开发遇到的问题的解决记录贴 arduinoIDE核心库更新导致的ESP32开发板神秘接口更换和三方库冲突情况描述其余解决方法(网上查的,未验证): arduinoIDE核心库更新导致的ESP32开发板神秘接口更换和三方库冲突 情况描述 当我将a…...
MCU开启浮点计算FPU
FPU 测试 1. FPU 简介2. 协处理器控制寄存器(CPACR)3. 开启FPU4. 验证FPU(Julia 分形实验) 1. FPU 简介 FPU 即浮点运算单元(Float Point Unit)。浮点运算,对于定点 CPU(没有 FPU 的…...
vue3+three 搭建平面上滚动旋转的几何体
嗨,我是小路。今天主要和大家分享的主题是“vue3three 搭建平面上滚动旋转的几何体”。 在现代前端开发中,结合 Vue 3 的响应式能力和 Three.js 的强大 3D 渲染能力,可以轻松构建出令人惊叹的交互式三维场景。本文将带你一步步实现一…...
《Python星球日记》 第59天:生成对抗网络(GAN)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、引言二、GAN的基本原理1. 天才的创意:生成器与判别器的博弈过程2. 训练流程与目标函数三、常见GAN变体1. DCGAN (深度卷积生成对抗网络)2.…...
用户态到内核态:Linux信号传递的九重门(二)
1. 保存信号 1.1. 信号其他相关常见概念 实际执⾏信号的处理动作称为信号递达(Delivery)。 信号从产⽣到递达之间的状态,称为信号未决(Pending)。 进程可以选择阻塞 (Block )某个信号。 被阻塞的信号产⽣时将保持在未决状态,直到进程解除对此信号的阻塞,才执⾏递达的动作。 1.…...
【深度学习-Day 9】机器学习核心概念入门:监督、无监督与强化学习全解析
Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...
android特许权限调试
新aosp中新应用无权限,但需要正常运行,来排查权限问题 ro.control_privapp_permissionslog这样做可确保设备保持工作状态,同时仍然提供违规行为列表。错误消息格式如下: PackageManager: Privileged permission {PERMISSION_NAM…...
如何避免Java中的ConcurrentModificationException
引言 在Java开发中,操作集合(如List、Set、Map)时,许多开发者都遇到过ConcurrentModificationException。这个异常通常出现在遍历集合的同时尝试修改其结构(如添加或删除元素)。本文将深入探讨这一异常的根…...
5月12日复盘-RNN
5月12日复盘 二、RNN 模型 1.先导 1.1 为什么需要循环神经网络 RNN 上图是一幅全连接神经网络图,我们可以看到输入层-隐藏层-输出层,他们每一层之间是相互独立地,(框框里面代表同一层),每一次输入生成一个节点,同…...
linux小主机搭建自己的nas(二)docker卸载navidrome
测试的时候安装了一个音乐播放器在root下面,现在先给他删掉 停止并删除容器 docker ps -a | grep navidrome# 停止并删除容器(替换 YOUR_CONTAINER_NAME 为实际名称) docker stop YOUR_CONTAINER_NAME && docker rm YOUR_CONTAINER…...
.NET 在鸿蒙系统上的适配现状
目录 .NET 在鸿蒙系统上的适配现状 鸿蒙系统对虚拟机的限制与.NET的适配挑战 NativeAOT 在鸿蒙系统中的适配原理与实现方式 已知问题与解决方案:鸿蒙系统中的 syscall 限制 鸿蒙系统适配中的技术难点与解决方案 跨平台编译的挑战与应对策略 依赖库管理与兼容…...
01-centos离线升级至almalinux
官网链接官方代码调整: 1. vi repositories/system_upgrade/common/actors/targetuserspacecreator/libraries/userspacegen.py with mounting.BindMount(sourceuserspace_dir, targetos.path.join(context.base_dir, install_root_dir.lstrip(/))):_restore_persi…...
Python 处理图像并生成 JSONL 元数据文件 - 固定text版本
Python 处理图像并生成 JSONL 元数据文件 - 固定text版本 flyfish JSONL(JSON Lines)简介 JSONL(JSON Lines,也称为 newline-delimited JSON)是一种轻量级的数据序列化格式,由一系列独立的 JSON 对象组成…...
uniapp使用npm下载
uniapp的项目在使用HBuilder X创建时是不会有node_modules文件夹的,如下图所示: 但是uni-app不管基于哪个框架,它内部一定是有node.js的,否则没有办法去实现框架层面的一些东西,只是说它略微有点差异。具体差异表现在…...
前端面试每日三题 - Day 31
这是我为准备前端/全栈开发工程师面试整理的第30天每日三题练习: ✅ 题目1:WebAssembly前端深度实践指南 核心优势对比 维度JavaScriptWebAssembly解析速度需要解析编译预编译二进制执行性能动态类型较慢静态类型接近原生内存管理自动垃圾回收手动内存…...
通义千问席卷日本!开源界“卷王”阿里通义千问成为日本AI发展新基石
据日本经济新闻(NIKKEI)报道,通义千问已成为日本AI开发的新基础,其影响力正逐步扩大,深刻改变着日本AI产业的格局。 同时,日本经济新闻将通义千问Qwen2.5-Max列为全球AI模型综合评测第六名,不仅…...
01 安装CANoe
文章目录 0、Introduction1、Install CANoe1.1、Unlock Package1.2、Kick autorun1.3、Install CANoe1.4、Wait Download1.5、Restart application1.6、Vector CANoe Installation1.7、Installation Successfully1.8、Open CANoe 2、Install Drivers2.1、Unlock Package2.2、Ki…...
AutoDL租用服务器教程
在跑ai模型的时候,容易遇到算力不够的情况。此时便需要租用服务器。autodl是个较为便宜的服务器租用平台,h20仅需七点几元每小时。下面是简单的介绍。 打开网站AutoDL算力云 | 弹性、好用、省钱。租GPU就上AutoDL,并登录账号 登录后ÿ…...
【人工智能-agent】--Dify中MCP工具存数据到MySQL
本文记录的工作如下: 自定义MCP工具,爬取我的钢铁网数据爬取的数据插值处理自定义MCP工具,把爬取到的数据(str)存入本地excel表格中自定义MCP工具,把爬取到的数据(str)存入本地MySQ…...
ctfshow——web入门351~356
SSRF没有出网的部分 web入门351 $ch curl_init($url); 作用:初始化一个 cURL 会话,并设置目标 URL。解释: curl_init($url) 创建一个新的 cURL 资源,并将其与 $url 关联。这里的 $url 是用户提供的,因此目标地址完全…...
堆复习(C语言版)
目录 1.树的相关概念: 2.堆的实现 3.TopK问题 4.总结 1.树的相关概念: 1.结点的度:一个结点含有的子树(孩子)个数。 A的度为6 2.叶结点or终端结点:度为0的结点。 J、K、L、H、I 都是叶子结点 3.非终端结…...
解决LangChain4j报错HTTP/1.1 header parser received no bytes
问题描述 当使用langchain4j-open-ai调用自己部署的大模型服务时报错: public static void main(String[] args) {OpenAiChatModel model OpenAiChatModel.builder().apiKey("none").modelName("qwen2.5-instruct").baseUrl("http://19…...
深入解析MySQL联合查询(UNION):案例与实战技巧
在数据库操作中,查询是最常用的操作之一。MySQL提供了强大的查询功能,联合查询(UNION)是其中非常有用的一项操作。联合查询可以将多个查询结果合并成一个结果集,使得从不同来源的数据整合变得更加简单高效。本文将详细…...
[计算机科学#14]:数据结构
【核知坊】:释放青春想象,码动全新视野。 我们希望使用精简的信息传达知识的骨架,启发创造者开启创造之路!!! 内容摘要:数据结构是计算机科学中的核心概念,用于…...
【计算机网络】HTTP 协议
HTTP是什么? HTTP 全称是“超文本传输协议”,是互联网上应用最广泛的应用层协议,用于客户端和服务器之间的通信。 HTTP 的实现在 HTTP 3.0之前都是基于传输层的 TCP 实现的, HTTP 3.0 改为了基于 UDP 实现,但是现在市…...
原生的 XMLHttpRequest 和基于 jQuery 的 $.ajax 方法的异同之处以及使用场景
近期参与一个项目的开发,发现项目中的ajax请求有两种不同的写法,查询了下两种写法的异同之处以及使用场景。 下面将从以下两段简单代码进行异同之处的分析及使用场景的介绍: // 写法一: var xhr new XMLHttpRequest(); xhr.open…...
横向移动(上)
横向移动(上) 横向移动指的是攻击者在内网中获得初始访问权限之后,通过相关技术扩大敏感数据和高价值资产权限的行为 常见的横向移动的方式 1.通过web漏洞 2.通过远程桌面 3.通过账号密码 4.通过不安全的配置 5.通过系统漏洞 利用远控…...
关于 js:7. 模块化、构建与工具链
一、模块系统:CommonJS、ESM、UMD 模块系统的目标: 将代码拆分为独立的逻辑单元(模块),实现封装、复用、依赖管理。 在 Web 前端/Node 中,因为 JavaScript 起初没有模块机制,因此出现了多个模…...
一次IPA被破解后的教训(附Ipa Guard等混淆工具实测)
一行代码的疏忽,一个默认的类名,一个未混淆的资源路径,都可能成为攻击者入侵的入口。 背景:一次“不值一提”的上线,成了代价惨重的经验 故事的起点很简单:我们给销售部门做了一款小型内部演示 App&#x…...
麒麟系统安装.net core环境变量
本文主要记录在麒麟系统上安装.net core的运行环境,这里使用的是麒麟V10桌面版,后续测试服务器到了之后再使用服务器版进行安装测试。 环境安装 下载 这里由于是桌面版,我直接使用浏览器下的包,下完之后在终端中安装。 安装 1…...
如何使用 React Hooks 替代类组件的生命周期方法?
文章目录 1. 引言2. useEffect 概述3. 模拟类组件的生命周期方法3.1 模拟 componentDidMount3.2 模拟 componentDidUpdate3.3 模拟 componentWillUnmount 4. 多个 useEffect 的使用5. 注意事项6. 总结 1. 引言 在 React 16.8 版本之前,开发者主要通过类组件&#x…...