diff options
author | Ashlee Young <ashlee@onosfw.com> | 2015-09-09 22:21:41 -0700 |
---|---|---|
committer | Ashlee Young <ashlee@onosfw.com> | 2015-09-09 22:21:41 -0700 |
commit | 8879b125d26e8db1a5633de5a9c692eb2d1c4f83 (patch) | |
tree | c7259d85a991b83dfa85ab2e339360669fc1f58e /framework/src/suricata/src/runmode-unittests.c | |
parent | 13d05bc8458758ee39cb829098241e89616717ee (diff) |
suricata checkin based on commit id a4bce14770beee46a537eda3c3f6e8e8565d5d0a
Change-Id: I9a214fa0ee95e58fc640e50bd604dac7f42db48f
Diffstat (limited to 'framework/src/suricata/src/runmode-unittests.c')
-rw-r--r-- | framework/src/suricata/src/runmode-unittests.c | 311 |
1 files changed, 311 insertions, 0 deletions
diff --git a/framework/src/suricata/src/runmode-unittests.c b/framework/src/suricata/src/runmode-unittests.c new file mode 100644 index 00000000..4f3fc8bf --- /dev/null +++ b/framework/src/suricata/src/runmode-unittests.c @@ -0,0 +1,311 @@ +/* Copyright (C) 2013 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 "config.h" +#include "util-unittest.h" + +#ifdef UNITTESTS + +#include "detect-parse.h" +#include "detect-engine.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-uri.h" +#include "detect-engine-hcbd.h" +#include "detect-engine-hsbd.h" +#include "detect-engine-hhd.h" +#include "detect-engine-hrhd.h" +#include "detect-engine-hmd.h" +#include "detect-engine-hcd.h" +#include "detect-engine-hrud.h" +#include "detect-engine-hsmd.h" +#include "detect-engine-hscd.h" +#include "detect-engine-hua.h" +#include "detect-engine-hhhd.h" +#include "detect-engine-hrhhd.h" +#include "detect-engine-state.h" +#include "detect-engine-tag.h" +#include "detect-engine-modbus.h" +#include "detect-engine-filedata-smtp.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 "app-layer-detect-proto.h" +#include "app-layer-parser.h" +#include "app-layer.h" +#include "app-layer-smb.h" +#include "app-layer-dcerpc.h" +#include "app-layer-dcerpc-udp.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-ringbuffer.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-memrchr.h" + +#include "util-mpm-ac.h" +#include "detect-engine-mpm.h" + +#include "util-decode-asn1.h" + +#include "conf.h" +#include "conf-yaml-loader.h" +#include "tmqh-flow.h" +#include "defrag.h" +#include "detect-engine-siggroup.h" + +#endif /* UNITTESTS */ + +void RegisterAllModules(); +void TmqhSetup (void); + +/** + * 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, char *regex_arg) +{ +#ifdef UNITTESTS + /* Initializations for global vars, queues, etc (memsets, mutex init..) */ + GlobalInits(); + TimeInit(); + SupportFastPatternForSigMatchTypes(); + + default_packet_size = DEFAULT_PACKET_SIZE; +#ifdef __SC_CUDA_SUPPORT__ + /* Init the CUDA environment */ + SCCudaInitCudaEnvironment(); + CudaBufferInit(); +#endif + /* load the pattern matchers */ + MpmTableSetup(); +#ifdef __SC_CUDA_SUPPORT__ + MpmCudaEnvironmentSetup(); +#endif + + AppLayerSetup(); + + /* hardcoded initialization code */ + SigTableSetup(); /* load the rule keywords */ + TmqhSetup(); + + StorageInit(); + CIDRInit(); + SigParsePrepare(); + +#ifdef DBG_MEM_ALLOC + SCLogInfo("Memory used at startup: %"PRIdMAX, (intmax_t)global_mem); +#endif + SCReputationInitCtx(); + SCProtoNameInit(); + + TagInitCtx(); + SCReferenceConfInit(); + SCClassConfInit(); + + RegisterAllModules(); + + DetectEngineRegisterAppInspectionEngines(); + + HostBitInitCtx(); + + StorageFinalize(); + /* test and initialize the unittesting subsystem */ + if(regex_arg == NULL){ + regex_arg = ".*"; + UtRunSelftest(regex_arg); /* inits and cleans up again */ + } + + AppLayerHtpEnableRequestBodyCallback(); + AppLayerHtpNeedFileInspection(); + + UtInitialize(); + UTHRegisterTests(); + SCReputationRegisterTests(); + TmModuleRegisterTests(); + SigTableRegisterTests(); + HashTableRegisterTests(); + HashListTableRegisterTests(); + BloomFilterRegisterTests(); + BloomFilterCountingRegisterTests(); + PoolRegisterTests(); + ByteRegisterTests(); + MpmRegisterTests(); + FlowBitRegisterTests(); + HostBitRegisterTests(); + IPPairBitRegisterTests(); + StatsRegisterTests(); + DecodePPPRegisterTests(); + DecodeVLANRegisterTests(); + HTPParserRegisterTests(); + DecodeRawRegisterTests(); + DecodePPPOERegisterTests(); + DecodeICMPV4RegisterTests(); + DecodeICMPV6RegisterTests(); + DecodeIPV4RegisterTests(); + DecodeIPV6RegisterTests(); + DecodeTCPRegisterTests(); + DecodeUDPV4RegisterTests(); + DecodeGRERegisterTests(); + DecodeAsn1RegisterTests(); + DecodeMPLSRegisterTests(); + AppLayerProtoDetectUnittestsRegister(); + ConfRegisterTests(); + ConfYamlRegisterTests(); + TmqhFlowRegisterTests(); + FlowRegisterTests(); + HostRegisterUnittests(); + IPPairRegisterUnittests(); + SCSigRegisterSignatureOrderingTests(); + SCRadixRegisterTests(); + DefragRegisterTests(); + SigGroupHeadRegisterTests(); + SCHInfoRegisterTests(); + SCRuleVarsRegisterTests(); + AppLayerParserRegisterUnittests(); + ThreadMacrosRegisterTests(); + UtilSpmSearchRegistertests(); + UtilActionRegisterTests(); + SCClassConfRegisterTests(); + SCThresholdConfRegisterTests(); + SCRConfRegisterTests(); +#ifdef __SC_CUDA_SUPPORT__ + SCCudaRegisterTests(); +#endif + PayloadRegisterTests(); + DcePayloadRegisterTests(); + UriRegisterTests(); +#ifdef PROFILING + SCProfilingRegisterTests(); +#endif + DeStateRegisterTests(); + DetectRingBufferRegisterTests(); + MemcmpRegisterTests(); + DetectEngineHttpClientBodyRegisterTests(); + DetectEngineHttpServerBodyRegisterTests(); + DetectEngineHttpHeaderRegisterTests(); + DetectEngineHttpRawHeaderRegisterTests(); + DetectEngineHttpMethodRegisterTests(); + DetectEngineHttpCookieRegisterTests(); + DetectEngineHttpRawUriRegisterTests(); + DetectEngineHttpStatMsgRegisterTests(); + DetectEngineHttpStatCodeRegisterTests(); + DetectEngineHttpUARegisterTests(); + DetectEngineHttpHHRegisterTests(); + DetectEngineHttpHRHRegisterTests(); + DetectEngineInspectModbusRegisterTests(); + DetectEngineRegisterTests(); + DetectEngineSMTPFiledataRegisterTests(); + SCLogRegisterTests(); + MagicRegisterTests(); + UtilMiscRegisterTests(); + DetectAddressTests(); + DetectProtoTests(); + DetectPortTests(); + SCAtomicRegisterTests(); + MemrchrRegisterTests(); +#ifdef __SC_CUDA_SUPPORT__ + CudaBufferRegisterUnittests(); +#endif + AppLayerUnittestsRegister(); + if (list_unittests) { + UtListTests(regex_arg); + } else { + /* global packet pool */ + extern intmax_t max_pending_packets; + max_pending_packets = 128; + PacketPoolInit(); + + uint32_t failed = UtRunTests(regex_arg); + PacketPoolDestroy(); + UtCleanup(); +#ifdef __SC_CUDA_SUPPORT__ + if (PatternMatchDefaultMatcher() == MPM_AC_CUDA) + MpmCudaBufferDeSetup(); + CudaHandlerFreeProfiles(); +#endif + if (failed) { + exit(EXIT_FAILURE); + } + } + +#ifdef DBG_MEM_ALLOC + SCLogInfo("Total memory used (without SCFree()): %"PRIdMAX, (intmax_t)global_mem); +#endif + + exit(EXIT_SUCCESS); +#else + SCLogError(SC_ERR_NOT_SUPPORTED, "Unittests are not build-in"); + exit(EXIT_FAILURE); +#endif /* UNITTESTS */ +} + |