suricata
runmode-unittests.c
Go to the documentation of this file.
1/* Copyright (C) 2013-2024 Open Information Security Foundation
2 *
3 * You can copy, redistribute or modify this Program under the terms of
4 * the GNU General Public License version 2 as published by the Free
5 * Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 *
12 * You should have received a copy of the GNU General Public License
13 * version 2 along with this program; if not, write to the Free Software
14 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
15 * 02110-1301, USA.
16 */
17
18/** \file
19 *
20 * \author Eric Leblond <eric@regit.org>
21 */
22
23#include "suricata-common.h"
24#include "runmode-unittests.h"
25#include "util-unittest.h"
26
27#include "util-debug.h"
28#ifdef UNITTESTS
29#include "detect-parse.h"
30#include "detect-engine.h"
31#include "detect-engine-alert.h"
33#include "detect-engine-proto.h"
34#include "detect-engine-port.h"
35#include "detect-engine-mpm.h"
39#include "detect-engine-state.h"
40#include "detect-engine-tag.h"
41#include "detect-fast-pattern.h"
42#include "flow.h"
43#include "flow-timeout.h"
44#include "flow-manager.h"
45#include "flow-var.h"
46#include "flow-bit.h"
47#include "pkt-var.h"
48
49#include "host.h"
50#include "host-bit.h"
51#include "ippair.h"
52#include "ippair-bit.h"
53#include "unix-manager.h"
54
55#include "stream-tcp.h"
56
58#include "app-layer-parser.h"
59#include "app-layer.h"
60#include "app-layer-htp.h"
61#include "app-layer-ftp.h"
62#include "app-layer-ssl.h"
63#include "app-layer-ssh.h"
64#include "app-layer-smtp.h"
65
66#include "util-action.h"
67#include "util-radix4-tree.h"
68#include "util-radix6-tree.h"
69#include "util-host-os-info.h"
70#include "util-cidr.h"
73#include "util-time.h"
74#include "util-rule-vars.h"
78#include "util-profiling.h"
79#include "util-magic.h"
80#include "util-memcmp.h"
81#include "util-misc.h"
82#include "util-signal.h"
83#include "util-affinity.h"
84
85#include "reputation.h"
86#include "util-atomic.h"
87#include "util-spm.h"
88#include "util-hash.h"
89#include "util-hashlist.h"
90#include "util-pool.h"
91#include "util-byte.h"
92#include "util-proto-name.h"
93#include "util-macset.h"
94#include "util-flow-rate.h"
95#include "util-memrchr.h"
96
97#include "util-mpm-ac.h"
98#include "util-mpm-hs.h"
99
100#include "conf.h"
101#include "conf-yaml-loader.h"
102#include "tmqh-flow.h"
103#include "defrag.h"
105
107#include "util-lua.h"
108#include "tm-modules.h"
109#include "tmqh-packetpool.h"
110#include "decode-chdlc.h"
111#include "decode-geneve.h"
112#include "decode-nsh.h"
113#include "decode-pppoe.h"
114#include "decode-raw.h"
115#include "decode-vntag.h"
116#include "decode-vxlan.h"
117#include "decode-pppoe.h"
118
119#include "output-json-stats.h"
120
121#ifdef OS_WIN32
122#include "win32-syscall.h"
123#endif
124
125#ifdef WINDIVERT
126#include "source-windivert.h"
127#endif
128
129#endif /* UNITTESTS */
130
131void TmqhSetup (void);
132
133#ifdef UNITTESTS
134static void RegisterUnittests(void)
135{
193#ifdef PROFILING
195#endif
213#ifdef OS_WIN32
214 Win32SyscallRegisterTests();
215#endif
216#ifdef WINDIVERT
217 SourceWinDivertRegisterTests();
218#endif
223}
224#endif
225
226/**
227 * Run or list unittests
228 *
229 * \param list_unittests If set to 1, list unittests. Run them if set to 0.
230 * \param regex_arg A regular expression to select unittests to run
231 *
232 * This function is terminal and will call exit after being called.
233 */
234
235void RunUnittests(int list_unittests, const char *regex_arg)
236{
237#ifdef UNITTESTS
238 /* Initializations for global vars, queues, etc (memsets, mutex init..) */
241
243 /* load the pattern matchers */
246
247 StorageInit();
249
250 /* hardcoded initialization code */
251 SigTableInit();
252 SigTableSetup(); /* load the rule keywords */
253 TmqhSetup();
254
255 TagInitCtx();
256
257 UtInitialize();
258
260
262
264 /* test and initialize the unit testing subsystem */
265 if (regex_arg == NULL){
266 regex_arg = ".*";
267 UtRunSelftest(regex_arg); /* inits and cleans up again */
268 }
269
272
273 RegisterUnittests();
274
275 if (list_unittests) {
277 } else {
278 /* global packet pool */
279 extern uint32_t max_pending_packets;
282
283 uint32_t failed = UtRunTests(regex_arg);
285 UtCleanup();
286#ifdef BUILD_HYPERSCAN
288#endif
289 if (failed) {
290 exit(EXIT_FAILURE);
291 }
292 }
293
294 exit(EXIT_SUCCESS);
295#else
296 FatalError("Unittests are not build-in");
297#endif /* UNITTESTS */
298}
void AppLayerProtoDetectUnittestsRegister(void)
Register unittests for app layer proto detection module.
void AppLayerParserRegisterUnittests(void)
int AppLayerSetup(void)
Setup the app layer.
Definition app-layer.c:1078
void AppLayerUnittestsRegister(void)
Definition app-layer.c:2891
void SCConfYamlRegisterTests(void)
void SCConfRegisterTests(void)
Definition conf.c:1471
void StatsRegisterTests(void)
Definition counters.c:1569
void DecodeCHDLCRegisterTests(void)
Registers Ethernet unit tests.
void DecodeESPRegisterTests(void)
Definition decode-esp.c:196
void DecodeEthernetRegisterTests(void)
Registers Ethernet unit tests.
void DecodeGeneveRegisterTests(void)
void DecodeGRERegisterTests(void)
this function registers unit tests for GRE decoder
Definition decode-gre.c:395
void DecodeICMPV4RegisterTests(void)
Registers ICMPV4 unit test.
void DecodeICMPV6RegisterTests(void)
Registers ICMPV6 unit tests.
void DecodeIPV4RegisterTests(void)
void DecodeIPV6RegisterTests(void)
this function registers unit tests for IPV6 decoder
void DecodeMPLSRegisterTests(void)
void DecodeNSHRegisterTests(void)
Definition decode-nsh.c:283
void DecodePPPRegisterTests(void)
Definition decode-ppp.c:385
void DecodePPPOERegisterTests(void)
Registers PPPOE unit tests.
void DecodeRawRegisterTests(void)
Registers Raw unit tests.
Definition decode-raw.c:217
void DecodeTCPRegisterTests(void)
Definition decode-tcp.c:532
void DecodeUDPV4RegisterTests(void)
Definition decode-udp.c:221
void DecodeVLANRegisterTests(void)
void DecodeVNTagRegisterTests(void)
void DecodeVXLANRegisterTests(void)
#define DEFAULT_PACKET_SIZE
Definition decode.h:699
void DefragRegisterTests(void)
Definition defrag.c:3111
void DetectAddressTests(void)
void DetectEngineAlertRegisterTests(void)
Registers Detect Engine Alert unit tests.
void DcePayloadRegisterTests(void)
void PayloadRegisterTests(void)
void DetectPortTests(void)
void DetectProtoTests(void)
this function registers unit tests for DetectProto
void SigTableSetup(void)
void SigTableInit(void)
void SigTableRegisterTests(void)
void SigGroupHeadRegisterTests(void)
void SCSigRegisterSignatureOrderingTests(void)
Data structures and function prototypes for keeping state for the detection engine.
void TagInitCtx(void)
void DetectEngineRegisterTests(void)
void SigRegisterTests(void)
Definition detect.c:4960
void FlowBitRegisterTests(void)
Definition flow-bit.c:357
void FlowRegisterTests(void)
Function to register the Flow Unitests.
Definition flow.c:1445
int UtRunSelftest(const char *regex_arg)
Run self tests.
void UtCleanup(void)
Cleanup unit test list.
void UtInitialize(void)
Initialize unit test list.
uint32_t UtRunTests(const char *regex_arg)
Run all registered unittests.
void UtListTests(const char *regex_arg)
List all registered unit tests.
uint32_t default_packet_size
Definition decode.c:77
void AppLayerHtpNeedFileInspection(void)
Sets a flag that informs the HTP app layer that some module in the engine needs the http request file...
void AppLayerHtpEnableRequestBodyCallback(void)
Sets a flag that informs the HTP app layer that some module in the engine needs the http request body...
void DeStateRegisterTests(void)
void PoolRegisterTests(void)
Definition util-pool.c:705
void HostBitRegisterTests(void)
Definition host-bit.c:508
void HostBitInitCtx(void)
Definition host-bit.c:49
void HostRegisterUnittests(void)
Definition host.c:717
void IPPairBitRegisterTests(void)
Definition ippair-bit.c:492
void IPPairRegisterUnittests(void)
Definition ippair.c:752
void OutputJsonStatsRegisterTests(void)
void SCReputationRegisterTests(void)
Definition reputation.c:174
uint32_t max_pending_packets
Definition suricata.c:183
void TmqhSetup(void)
void RunUnittests(int list_unittests, const char *regex_arg)
const char * regex_arg
void StreamTcpRegisterTests(void)
void EngineModeSetIDS(void)
Definition suricata.c:264
void RegisterAllModules(void)
Definition suricata.c:947
void GlobalsInitPreConfig(void)
Definition suricata.c:382
void ThreadMacrosRegisterTests(void)
this function registers unit tests for DetectId
Definition threads.c:145
void TmModuleRegisterTests(void)
register all unittests for the tm modules
Definition tm-modules.c:135
void TmqhFlowRegisterTests(void)
Definition tmqh-flow.c:396
void PacketPoolDestroy(void)
void PacketPoolInit(void)
void UtilActionRegisterTests(void)
void ThreadingAffinityRegisterTests(void)
Register all threading affinity unit tests.
void SCAtomicRegisterTests(void)
Definition util-atomic.c:67
void ByteRegisterTests(void)
Definition util-byte.c:1064
void UtilCIDRTests(void)
Definition util-cidr.c:149
void SCClassConfRegisterTests(void)
This function registers unit tests for Classification Config API.
void CoredumpConfigRegisterTests(void)
void SCLogRegisterTests(void)
#define FatalError(...)
Definition util-debug.h:510
void FlowRateRegisterTests(void)
void HashTableRegisterTests(void)
Definition util-hash.c:432
void HashListTableRegisterTests(void)
void SCHInfoRegisterTests(void)
void MacSetRegisterTests(void)
void MagicRegisterTests(void)
Definition util-magic.c:574
void MemcmpRegisterTests(void)
void MemrchrRegisterTests(void)
void UtilMiscRegisterTests(void)
Definition util-misc.c:809
void MpmHSGlobalCleanup(void)
void MpmRegisterTests(void)
Definition util-mpm.c:570
void MpmTableSetup(void)
Definition util-mpm.c:224
void SCProfilingRegisterTests(void)
void SCProtoNameRegisterTests(void)
void SCRadix4RegisterTests(void)
void SCRadix6RegisterTests(void)
void SCRConfRegisterTests(void)
This function registers unit tests for Reference Config API.
void SCRuleVarsRegisterTests(void)
void UtilSpmSearchRegistertests(void)
Definition util-spm.c:2657
void SpmTableSetup(void)
Definition util-spm.c:122
int StorageFinalize(void)
void StorageInit(void)
void StreamingBufferRegisterTests(void)
void SCThresholdConfRegisterTests(void)
This function registers unit tests for Classification Config API.
void UTHRegisterTests(void)