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 
26 #include "util-debug.h"
27 #ifdef UNITTESTS
28 #include "detect-parse.h"
29 #include "detect-engine.h"
30 #include "detect-engine-alert.h"
31 #include "detect-engine-address.h"
32 #include "detect-engine-proto.h"
33 #include "detect-engine-port.h"
34 #include "detect-engine-mpm.h"
35 #include "detect-engine-sigorder.h"
36 #include "detect-engine-payload.h"
37 #include "detect-engine-state.h"
38 #include "detect-engine-tag.h"
39 #include "detect-fast-pattern.h"
40 #include "flow.h"
41 #include "flow-timeout.h"
42 #include "flow-manager.h"
43 #include "flow-var.h"
44 #include "flow-bit.h"
45 #include "tm-threads.h"
46 #include "pkt-var.h"
47 
48 #include "host.h"
49 #include "host-bit.h"
50 #include "ippair.h"
51 #include "ippair-bit.h"
52 #include "unix-manager.h"
53 
54 #include "stream-tcp.h"
55 
56 #include "app-layer-detect-proto.h"
57 #include "app-layer-parser.h"
58 #include "app-layer.h"
59 #include "app-layer-htp.h"
60 #include "app-layer-ftp.h"
61 #include "app-layer-ssl.h"
62 #include "app-layer-ssh.h"
63 #include "app-layer-smtp.h"
64 
65 #include "util-action.h"
66 #include "util-radix4-tree.h"
67 #include "util-radix6-tree.h"
68 #include "util-host-os-info.h"
69 #include "util-cidr.h"
70 #include "util-coredump-config.h"
71 #include "util-unittest-helper.h"
72 #include "util-rule-vars.h"
74 #include "util-threshold-config.h"
75 #include "util-reference-config.h"
76 #include "util-profiling.h"
77 #include "util-magic.h"
78 #include "util-memcmp.h"
79 #include "util-misc.h"
80 #include "util-signal.h"
81 #include "util-affinity.h"
82 
83 #include "reputation.h"
84 #include "util-spm.h"
85 #include "util-hash.h"
86 #include "util-hashlist.h"
87 #include "util-pool.h"
88 #include "util-byte.h"
89 #include "util-file.h"
90 #include "util-proto-name.h"
91 #include "util-macset.h"
92 #include "util-flow-rate.h"
93 
94 #include "util-mpm-ac.h"
95 #include "util-mpm-hs.h"
96 
97 #include "conf.h"
98 #include "conf-yaml-loader.h"
99 #include "tmqh-flow.h"
100 #include "defrag.h"
101 #include "detect-engine-siggroup.h"
102 
103 #include "util-streaming-buffer.h"
104 #include "util-lua.h"
105 #include "tm-modules.h"
106 #include "tmqh-packetpool.h"
107 #include "decode-chdlc.h"
108 #include "decode-geneve.h"
109 #include "decode-nsh.h"
110 #include "decode-pppoe.h"
111 #include "decode-raw.h"
112 #include "decode-etag.h"
113 #include "decode-vntag.h"
114 #include "decode-vxlan.h"
115 #include "decode-pppoe.h"
116 #include "source-pcap-file-helper.h"
117 
118 #include "output-json-stats.h"
119 
120 #ifdef OS_WIN32
121 #include "win32-syscall.h"
122 #endif
123 
124 #ifdef WINDIVERT
125 #include "source-windivert.h"
126 #endif
127 
128 #endif /* UNITTESTS */
129 
130 void TmqhSetup (void);
131 
132 #ifdef UNITTESTS
133 static void RegisterUnittests(void)
134 {
194 #ifdef PROFILING
196 #endif
207  DetectPortTests();
215 #ifdef OS_WIN32
216  Win32SyscallRegisterTests();
217 #endif
218 #ifdef WINDIVERT
219  SourceWinDivertRegisterTests();
220 #endif
223  UtilCIDRTests();
226 }
227 #endif
228 
229 /**
230  * Run or list unittests
231  *
232  * \param list_unittests If set to 1, list unittests. Run them if set to 0.
233  * \param regex_arg A regular expression to select unittests to run
234  *
235  * This function is terminal and will call exit after being called.
236  */
237 
238 void RunUnittests(int list_unittests, const char *regex_arg)
239 {
240 #ifdef UNITTESTS
241  /* Initializations for global vars, queues, etc (memsets, mutex init..) */
244 
246  /* load the pattern matchers */
247  MpmTableSetup();
248  SpmTableSetup();
249 
250  SCStorageInit();
251  AppLayerSetup();
252 
253  /* hardcoded initialization code */
254  SigTableInit();
255  SigTableSetup(); /* load the rule keywords */
256  TmqhSetup();
257 
258  TagInitCtx();
259 
260  /* test and initialize the unit testing subsystem */
261  if (regex_arg == NULL) {
262  regex_arg = ".*";
263  UtRunSelftest(regex_arg); /* inits and cleans up again */
264  }
265  UtInitialize();
266 
268 
269  HostBitInitCtx();
270 
272 
275 
276  RegisterUnittests();
277 
278  if (list_unittests) {
280  } else {
281  /* global packet pool */
282  extern uint32_t max_pending_packets;
283  max_pending_packets = 128;
284  PacketPoolInit();
285 
286  uint32_t failed = UtRunTests(regex_arg);
288  UtCleanup();
289 #ifdef BUILD_HYPERSCAN
291 #endif
292  if (failed) {
293  exit(EXIT_FAILURE);
294  }
295  }
296 
297  exit(EXIT_SUCCESS);
298 #else
299  FatalError("Unittests are not build-in");
300 #endif /* UNITTESTS */
301 }
util-byte.h
FileRegisterTests
void FileRegisterTests(void)
Definition: util-file.c:1235
host.h
tm-threads.h
decode-raw.h
SCProtoNameRegisterTests
void SCProtoNameRegisterTests(void)
Definition: util-proto-name.c:498
TagInitCtx
void TagInitCtx(void)
Definition: detect-engine-tag.c:49
DecodeETagRegisterTests
void DecodeETagRegisterTests(void)
Definition: decode-etag.c:149
DecodeUDPV4RegisterTests
void DecodeUDPV4RegisterTests(void)
Definition: decode-udp.c:220
FlowRateRegisterTests
void FlowRateRegisterTests(void)
Definition: util-flow-rate.c:701
ippair.h
AppLayerHtpNeedFileInspection
void AppLayerHtpNeedFileInspection(void)
Sets a flag that informs the HTP app layer that some module in the engine needs the http request file...
Definition: app-layer-htp.c:569
detect-engine.h
decode-vxlan.h
detect-engine-proto.h
win32-syscall.h
DetectAddressTests
void DetectAddressTests(void)
SCStorageInit
void SCStorageInit(void)
Definition: util-storage.c:67
DecodeESPRegisterTests
void DecodeESPRegisterTests(void)
Definition: decode-esp.c:195
app-layer-ssh.h
MagicRegisterTests
void MagicRegisterTests(void)
Definition: util-magic.c:378
util-hashlist.h
detect-engine-siggroup.h
decode-pppoe.h
stream-tcp.h
runmode-unittests.h
TmqhSetup
void TmqhSetup(void)
Definition: tm-queuehandlers.c:39
regex_arg
const char * regex_arg
Definition: runmode-unittests.h:27
FlowRegisterTests
void FlowRegisterTests(void)
Function to register the Flow Unitests.
Definition: flow.c:1544
util-coredump-config.h
PoolRegisterTests
void PoolRegisterTests(void)
Definition: util-pool.c:506
SigTableSetup
void SigTableSetup(void)
Definition: detect-engine-register.c:638
DecodePPPRegisterTests
void DecodePPPRegisterTests(void)
Definition: decode-ppp.c:351
util-lua.h
IPPairRegisterUnittests
void IPPairRegisterUnittests(void)
Definition: ippair.c:755
ippair-bit.h
util-macset.h
UtListTests
void UtListTests(const char *regex_arg)
List all registered unit tests.
Definition: util-unittest.c:155
util-hash.h
MpmRegisterTests
void MpmRegisterTests(void)
Definition: util-mpm.c:569
TmqhFlowRegisterTests
void TmqhFlowRegisterTests(void)
Definition: tmqh-flow.c:395
SigTableInit
void SigTableInit(void)
Definition: detect-engine-register.c:626
UtRunSelftest
int UtRunSelftest(const char *regex_arg)
Run self tests.
Definition: util-unittest.c:321
RegisterAllModules
void RegisterAllModules(void)
Definition: suricata.c:998
SCConfRegisterTests
void SCConfRegisterTests(void)
Definition: conf.c:1544
flow-bit.h
tm-modules.h
TmModuleRegisterTests
void TmModuleRegisterTests(void)
register all unittests for the tm modules
Definition: tm-modules.c:135
DecodeNSHRegisterTests
void DecodeNSHRegisterTests(void)
Definition: decode-nsh.c:279
SCSigRegisterSignatureOrderingTests
void SCSigRegisterSignatureOrderingTests(void)
Definition: detect-engine-sigorder.c:2092
AppLayerUnittestsRegister
void AppLayerUnittestsRegister(void)
Definition: app-layer.c:2911
GlobalsInitPreConfig
void GlobalsInitPreConfig(void)
Definition: suricata.c:414
app-layer-ftp.h
detect-engine-payload.h
AppLayerParserRegisterUnittests
void AppLayerParserRegisterUnittests(void)
Definition: app-layer-parser.c:2098
HostBitInitCtx
void HostBitInitCtx(void)
Definition: host-bit.c:48
tmqh-packetpool.h
util-unittest-helper.h
SigGroupHeadRegisterTests
void SigGroupHeadRegisterTests(void)
Definition: detect-engine-siggroup.c:991
PacketPoolInit
void PacketPoolInit(void)
Definition: tmqh-packetpool.c:235
SigRegisterTests
void SigRegisterTests(void)
Definition: detect.c:4808
OutputJsonStatsRegisterTests
void OutputJsonStatsRegisterTests(void)
Definition: output-json-stats.c:131
SigTableRegisterTests
void SigTableRegisterTests(void)
Definition: detect-engine-register.c:885
UtilSpmSearchRegistertests
void UtilSpmSearchRegistertests(void)
Definition: util-spm.c:2490
FlowBitRegisterTests
void FlowBitRegisterTests(void)
Definition: flow-bit.c:341
CoredumpConfigRegisterTests
void CoredumpConfigRegisterTests(void)
Definition: util-coredump-config.c:413
SourcePcapFileHelperRegisterTests
void SourcePcapFileHelperRegisterTests(void)
Register unit tests for pcap file helper.
Definition: source-pcap-file-helper.c:1028
DecodeMPLSRegisterTests
void DecodeMPLSRegisterTests(void)
Definition: decode-mpls.c:335
util-memcmp.h
util-signal.h
DecodeEthernetRegisterTests
void DecodeEthernetRegisterTests(void)
Registers Ethernet unit tests.
Definition: decode-ethernet.c:175
AppLayerSetup
int AppLayerSetup(void)
Setup the app layer.
Definition: app-layer.c:1087
app-layer-detect-proto.h
util-cidr.h
app-layer-htp.h
util-flow-rate.h
ByteRegisterTests
void ByteRegisterTests(void)
Definition: util-byte.c:1025
util-debug.h
DecodeCHDLCRegisterTests
void DecodeCHDLCRegisterTests(void)
Registers Ethernet unit tests.
Definition: decode-chdlc.c:104
EngineModeSetIDS
void EngineModeSetIDS(void)
Definition: suricata.c:277
DecodeVNTagRegisterTests
void DecodeVNTagRegisterTests(void)
Definition: decode-vntag.c:171
SpmTableSetup
void SpmTableSetup(void)
Definition: util-spm.c:130
UtInitialize
void UtInitialize(void)
Initialize unit test list.
Definition: util-unittest.c:258
UTHRegisterTests
void UTHRegisterTests(void)
Definition: util-unittest-helper.c:1149
SCRuleVarsRegisterTests
void SCRuleVarsRegisterTests(void)
Definition: util-rule-vars.c:385
AppLayerHtpEnableRequestBodyCallback
void AppLayerHtpEnableRequestBodyCallback(void)
Sets a flag that informs the HTP app layer that some module in the engine needs the http request body...
Definition: app-layer-htp.c:542
HashTableRegisterTests
void HashTableRegisterTests(void)
Definition: util-hash.c:475
util-reference-config.h
detect-engine-mpm.h
DefragRegisterTests
void DefragRegisterTests(void)
Definition: defrag.c:3259
util-affinity.h
pkt-var.h
SCHInfoRegisterTests
void SCHInfoRegisterTests(void)
Definition: util-host-os-info.c:1443
detect-engine-port.h
app-layer-parser.h
detect-engine-tag.h
util-profiling.h
util-rule-vars.h
DecodeSCTPRegisterTests
void DecodeSCTPRegisterTests(void)
Definition: decode-sctp.c:680
source-pcap-file-helper.h
conf-yaml-loader.h
StreamTcpRegisterTests
void StreamTcpRegisterTests(void)
Definition: stream-tcp.c:3500
DecodeICMPV6RegisterTests
void DecodeICMPV6RegisterTests(void)
Registers ICMPV6 unit tests.
Definition: decode-icmpv6.c:1511
conf.h
detect-engine-alert.h
util-magic.h
source-windivert.h
decode-nsh.h
SCAtomicRegisterTests
void SCAtomicRegisterTests(void)
Definition: util-atomic.c:66
detect-engine-state.h
Data structures and function prototypes for keeping state for the detection engine.
flow-timeout.h
DecodeTCPRegisterTests
void DecodeTCPRegisterTests(void)
Definition: decode-tcp.c:546
reputation.h
SCLogRegisterTests
void SCLogRegisterTests(void)
Definition: util-debug.c:1807
util-action.h
UtRunTests
uint32_t UtRunTests(const char *regex_arg)
Run all registered unittests.
Definition: util-unittest.c:186
util-mpm-ac.h
util-proto-name.h
defrag.h
SCRadix4RegisterTests
void SCRadix4RegisterTests(void)
Definition: util-radix4-tree.c:925
MpmTableSetup
void MpmTableSetup(void)
Definition: util-mpm.c:223
MacSetRegisterTests
void MacSetRegisterTests(void)
Definition: util-macset.c:488
DEFAULT_PACKET_SIZE
#define DEFAULT_PACKET_SIZE
Definition: decode.h:712
DetectEngineRegisterTests
void DetectEngineRegisterTests(void)
Definition: detect-engine.c:5705
util-host-os-info.h
UtilCIDRTests
void UtilCIDRTests(void)
Definition: util-cidr.c:148
max_pending_packets
uint32_t max_pending_packets
Definition: suricata.c:188
HostBitRegisterTests
void HostBitRegisterTests(void)
Definition: host-bit.c:573
default_packet_size
uint32_t default_packet_size
Definition: decode.c:77
DecodeVLANRegisterTests
void DecodeVLANRegisterTests(void)
Definition: decode-vlan.c:227
util-file.h
detect-fast-pattern.h
flow-manager.h
suricata-common.h
output-json-stats.h
util-streaming-buffer.h
SCRadix6RegisterTests
void SCRadix6RegisterTests(void)
Definition: util-radix6-tree.c:949
util-spm.h
SCTimeRegisterTests
void SCTimeRegisterTests(void)
Definition: util-time.c:687
util-radix4-tree.h
DecodePPPOERegisterTests
void DecodePPPOERegisterTests(void)
Registers PPPOE unit tests.
Definition: decode-pppoe.c:572
util-classification-config.h
util-radix6-tree.h
FatalError
#define FatalError(...)
Definition: util-debug.h:517
decode-geneve.h
SCClassConfRegisterTests
void SCClassConfRegisterTests(void)
This function registers unit tests for Classification Config API.
Definition: util-classification-config.c:775
UtCleanup
void UtCleanup(void)
Cleanup unit test list.
Definition: util-unittest.c:267
detect-engine-sigorder.h
AppLayerProtoDetectUnittestsRegister
void AppLayerProtoDetectUnittestsRegister(void)
Register unittests for app layer proto detection module.
Definition: app-layer-detect-proto.c:3562
DecodeVXLANRegisterTests
void DecodeVXLANRegisterTests(void)
Definition: decode-vxlan.c:572
unix-manager.h
SCRConfRegisterTests
void SCRConfRegisterTests(void)
This function registers unit tests for Reference Config API.
Definition: util-reference-config.c:776
HashListTableRegisterTests
void HashListTableRegisterTests(void)
Definition: util-hashlist.c:497
DecodeGRERegisterTests
void DecodeGRERegisterTests(void)
this function registers unit tests for GRE decoder
Definition: decode-gre.c:394
UtilMiscRegisterTests
void UtilMiscRegisterTests(void)
Definition: util-misc.c:857
detect-parse.h
DecodeICMPV4RegisterTests
void DecodeICMPV4RegisterTests(void)
Registers ICMPV4 unit test.
Definition: decode-icmpv4.c:792
TmThreadsRegisterTests
void TmThreadsRegisterTests(void)
Definition: tm-threads.c:2501
RunUnittests
void RunUnittests(int list_unittests, const char *regex_arg)
Definition: runmode-unittests.c:238
SCReputationRegisterTests
void SCReputationRegisterTests(void)
Definition: reputation.c:173
decode-chdlc.h
SCThresholdConfRegisterTests
void SCThresholdConfRegisterTests(void)
This function registers unit tests for Classification Config API.
Definition: util-threshold-config.c:2601
HostRegisterUnittests
void HostRegisterUnittests(void)
Definition: host.c:717
decode-etag.h
tmqh-flow.h
ThreadingAffinityRegisterTests
void ThreadingAffinityRegisterTests(void)
Register all threading affinity unit tests.
Definition: util-affinity.c:2022
DecodeIPV4RegisterTests
void DecodeIPV4RegisterTests(void)
Definition: decode-ipv4.c:1569
DetectEngineAlertRegisterTests
void DetectEngineAlertRegisterTests(void)
Registers Detect Engine Alert unit tests.
Definition: detect-engine-alert.c:71
util-mpm-hs.h
SCProfilingRegisterTests
void SCProfilingRegisterTests(void)
Definition: util-profiling.c:1405
IPPairBitRegisterTests
void IPPairBitRegisterTests(void)
Definition: ippair-bit.c:468
app-layer-smtp.h
DetectPortTests
void DetectPortTests(void)
UtilActionRegisterTests
void UtilActionRegisterTests(void)
Definition: util-action.c:442
util-misc.h
PacketPoolDestroy
void PacketPoolDestroy(void)
Definition: tmqh-packetpool.c:265
flow.h
ThreadMacrosRegisterTests
void ThreadMacrosRegisterTests(void)
this function registers unit tests for DetectId
Definition: threads.c:141
MemcmpRegisterTests
void MemcmpRegisterTests(void)
Definition: util-memcmp.c:349
decode-vntag.h
DeStateRegisterTests
void DeStateRegisterTests(void)
Definition: detect-engine-state.c:1463
util-pool.h
DecodeGeneveRegisterTests
void DecodeGeneveRegisterTests(void)
Definition: decode-geneve.c:489
flow-var.h
app-layer-ssl.h
DecodeIPV6RegisterTests
void DecodeIPV6RegisterTests(void)
this function registers unit tests for IPV6 decoder
Definition: decode-ipv6.c:924
detect-engine-address.h
StatsRegisterTests
void StatsRegisterTests(void)
Definition: counters.c:1652
util-threshold-config.h
SCStorageFinalize
int SCStorageFinalize(void)
Definition: util-storage.c:134
host-bit.h
SCConfYamlRegisterTests
void SCConfYamlRegisterTests(void)
Definition: conf-yaml-loader.c:1068
app-layer.h
StreamingBufferRegisterTests
void StreamingBufferRegisterTests(void)
Definition: util-streaming-buffer.c:2439
PayloadRegisterTests
void PayloadRegisterTests(void)
Definition: detect-engine-payload.c:1138
MpmHSGlobalCleanup
void MpmHSGlobalCleanup(void)
DecodeRawRegisterTests
void DecodeRawRegisterTests(void)
Registers Raw unit tests.
Definition: decode-raw.c:186
DetectProtoTests
void DetectProtoTests(void)
this function registers unit tests for DetectProto
Definition: detect-engine-proto.c:442