diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 17:39:49 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 17:39:49 +0000 |
commit | a0aa2307322cd47bbf416810ac0292925e03be87 (patch) | |
tree | 37076262a026c4b48c8a0e84f44ff9187556ca35 /src/runmode-unittests.c | |
parent | Initial commit. (diff) | |
download | suricata-a0aa2307322cd47bbf416810ac0292925e03be87.tar.xz suricata-a0aa2307322cd47bbf416810ac0292925e03be87.zip |
Adding upstream version 1:7.0.3.upstream/1%7.0.3
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/runmode-unittests.c')
-rw-r--r-- | src/runmode-unittests.c | 302 |
1 files changed, 302 insertions, 0 deletions
diff --git a/src/runmode-unittests.c b/src/runmode-unittests.c new file mode 100644 index 0000000..1150bad --- /dev/null +++ b/src/runmode-unittests.c @@ -0,0 +1,302 @@ +/* Copyright (C) 2013-2022 Open Information Security Foundation + * + * You can copy, redistribute or modify this Program under the terms of + * the GNU General Public License version 2 as published by the Free + * Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * version 2 along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + */ + +/** \file + * + * \author Eric Leblond <eric@regit.org> + */ + +#include "suricata-common.h" +#include "runmode-unittests.h" +#include "util-unittest.h" + +#include "util-debug.h" +#ifdef UNITTESTS +#include "detect-parse.h" +#include "detect-engine.h" +#include "detect-engine-alert.h" +#include "detect-engine-address.h" +#include "detect-engine-proto.h" +#include "detect-engine-port.h" +#include "detect-engine-mpm.h" +#include "detect-engine-sigorder.h" +#include "detect-engine-payload.h" +#include "detect-engine-dcepayload.h" +#include "detect-engine-state.h" +#include "detect-engine-tag.h" +#include "detect-engine-enip.h" +#include "detect-fast-pattern.h" +#include "flow.h" +#include "flow-timeout.h" +#include "flow-manager.h" +#include "flow-var.h" +#include "flow-bit.h" +#include "pkt-var.h" + +#include "host.h" +#include "host-bit.h" +#include "ippair.h" +#include "ippair-bit.h" +#include "unix-manager.h" + +#include "stream-tcp.h" + +#include "app-layer-detect-proto.h" +#include "app-layer-parser.h" +#include "app-layer.h" +#include "app-layer-htp.h" +#include "app-layer-ftp.h" +#include "app-layer-ssl.h" +#include "app-layer-ssh.h" +#include "app-layer-smtp.h" + +#include "util-action.h" +#include "util-radix-tree.h" +#include "util-host-os-info.h" +#include "util-cidr.h" +#include "util-unittest-helper.h" +#include "util-time.h" +#include "util-rule-vars.h" +#include "util-classification-config.h" +#include "util-threshold-config.h" +#include "util-reference-config.h" +#include "util-profiling.h" +#include "util-magic.h" +#include "util-memcmp.h" +#include "util-misc.h" +#include "util-signal.h" + +#include "reputation.h" +#include "util-atomic.h" +#include "util-spm.h" +#include "util-hash.h" +#include "util-hashlist.h" +#include "util-bloomfilter.h" +#include "util-bloomfilter-counting.h" +#include "util-pool.h" +#include "util-byte.h" +#include "util-proto-name.h" +#include "util-macset.h" +#include "util-memrchr.h" + +#include "util-mpm-ac.h" +#include "util-mpm-hs.h" + +#include "conf.h" +#include "conf-yaml-loader.h" +#include "tmqh-flow.h" +#include "defrag.h" +#include "detect-engine-siggroup.h" + +#include "util-streaming-buffer.h" +#include "util-lua.h" +#include "util-luajit.h" +#include "tm-modules.h" +#include "tmqh-packetpool.h" +#include "decode-chdlc.h" +#include "decode-geneve.h" +#include "decode-nsh.h" +#include "decode-raw.h" +#include "decode-vntag.h" +#include "decode-vxlan.h" + +#ifdef OS_WIN32 +#include "win32-syscall.h" +#endif + +#ifdef WINDIVERT +#include "source-windivert.h" +#endif + +#endif /* UNITTESTS */ + +void TmqhSetup (void); + +#ifdef UNITTESTS +static void RegisterUnittests(void) +{ + UTHRegisterTests(); + StreamTcpRegisterTests(); + SigRegisterTests(); + SCReputationRegisterTests(); + TmModuleRegisterTests(); + SigTableRegisterTests(); + HashTableRegisterTests(); + HashListTableRegisterTests(); + BloomFilterRegisterTests(); + BloomFilterCountingRegisterTests(); + PoolRegisterTests(); + ByteRegisterTests(); + MpmRegisterTests(); + FlowBitRegisterTests(); + HostBitRegisterTests(); + IPPairBitRegisterTests(); + StatsRegisterTests(); + DecodeEthernetRegisterTests(); + DecodeCHDLCRegisterTests(); + DecodePPPRegisterTests(); + DecodeVLANRegisterTests(); + DecodeVNTagRegisterTests(); + DecodeGeneveRegisterTests(); + DecodeVXLANRegisterTests(); + DecodeRawRegisterTests(); + DecodePPPOERegisterTests(); + DecodeICMPV4RegisterTests(); + DecodeICMPV6RegisterTests(); + DecodeIPV4RegisterTests(); + DecodeIPV6RegisterTests(); + DecodeTCPRegisterTests(); + DecodeUDPV4RegisterTests(); + DecodeGRERegisterTests(); + DecodeESPRegisterTests(); + DecodeMPLSRegisterTests(); + DecodeNSHRegisterTests(); + AppLayerProtoDetectUnittestsRegister(); + ConfRegisterTests(); + ConfYamlRegisterTests(); + TmqhFlowRegisterTests(); + FlowRegisterTests(); + HostRegisterUnittests(); + IPPairRegisterUnittests(); + SCSigRegisterSignatureOrderingTests(); + SCRadixRegisterTests(); + DefragRegisterTests(); + SigGroupHeadRegisterTests(); + SCHInfoRegisterTests(); + SCRuleVarsRegisterTests(); + AppLayerParserRegisterUnittests(); + ThreadMacrosRegisterTests(); + UtilSpmSearchRegistertests(); + UtilActionRegisterTests(); + Base64RegisterTests(); + SCClassConfRegisterTests(); + SCThresholdConfRegisterTests(); + SCRConfRegisterTests(); + PayloadRegisterTests(); + DcePayloadRegisterTests(); +#ifdef PROFILING + SCProfilingRegisterTests(); +#endif + DeStateRegisterTests(); + MemcmpRegisterTests(); + DetectEngineRegisterTests(); + SCLogRegisterTests(); + MagicRegisterTests(); + UtilMiscRegisterTests(); + DetectAddressTests(); + DetectProtoTests(); + DetectPortTests(); + DetectEngineAlertRegisterTests(); + SCAtomicRegisterTests(); + MemrchrRegisterTests(); + AppLayerUnittestsRegister(); + MimeDecRegisterTests(); + StreamingBufferRegisterTests(); + MacSetRegisterTests(); +#ifdef OS_WIN32 + Win32SyscallRegisterTests(); +#endif +#ifdef WINDIVERT + SourceWinDivertRegisterTests(); +#endif + SCProtoNameRegisterTests(); + UtilCIDRTests(); +} +#endif + +/** + * Run or list unittests + * + * \param list_unittests If set to 1, list unittests. Run them if set to 0. + * \param regex_arg A regular expression to select unittests to run + * + * This function is terminal and will call exit after being called. + */ + +void RunUnittests(int list_unittests, const char *regex_arg) +{ +#ifdef UNITTESTS + /* Initializations for global vars, queues, etc (memsets, mutex init..) */ + GlobalsInitPreConfig(); + EngineModeSetIDS(); + +#ifdef HAVE_LUAJIT + if (LuajitSetupStatesPool() != 0) { + exit(EXIT_FAILURE); + } +#endif + + default_packet_size = DEFAULT_PACKET_SIZE; + /* load the pattern matchers */ + MpmTableSetup(); + SpmTableSetup(); + + StorageInit(); + AppLayerSetup(); + + /* hardcoded initialization code */ + SigTableSetup(); /* load the rule keywords */ + TmqhSetup(); + + TagInitCtx(); + + UtInitialize(); + + RegisterAllModules(); + + HostBitInitCtx(); + + StorageFinalize(); + /* test and initialize the unit testing subsystem */ + if (regex_arg == NULL){ + regex_arg = ".*"; + UtRunSelftest(regex_arg); /* inits and cleans up again */ + } + + AppLayerHtpEnableRequestBodyCallback(); + AppLayerHtpNeedFileInspection(); + + RegisterUnittests(); + + if (list_unittests) { + UtListTests(regex_arg); + } else { + /* global packet pool */ + extern uint16_t max_pending_packets; + max_pending_packets = 128; + PacketPoolInit(); + + uint32_t failed = UtRunTests(regex_arg); + PacketPoolDestroy(); + UtCleanup(); +#ifdef BUILD_HYPERSCAN + MpmHSGlobalCleanup(); +#endif + if (failed) { + exit(EXIT_FAILURE); + } + } + +#ifdef HAVE_LUAJIT + LuajitFreeStatesPool(); +#endif + + exit(EXIT_SUCCESS); +#else + FatalError("Unittests are not build-in"); +#endif /* UNITTESTS */ +} |