suricata
|
#include "suricata-common.h"
#include "decode.h"
#include "flow-private.h"
#include "flow-util.h"
#include "flow-spare-pool.h"
#include "detect.h"
#include "detect-parse.h"
#include "detect-engine.h"
#include "detect-engine-alert.h"
#include "detect-engine-sigorder.h"
#include "detect-engine-build.h"
#include "stream-tcp.h"
#include "stream-tcp-private.h"
#include "util-debug.h"
#include "util-time.h"
#include "util-error.h"
#include "util-unittest.h"
#include "util-unittest-helper.h"
#include "util-spm-bs.h"
Go to the source code of this file.
Functions | |
Flow * | TestHelperBuildFlow (int family, const char *src, const char *dst, Port sp, Port dp) |
int | TestHelperBufferToFile (const char *name, const uint8_t *data, size_t size) |
writes the contents of a buffer into a file More... | |
uint32_t | UTHSetIPv4Address (const char *str) |
return the uint32_t for a ipv4 address string More... | |
Packet * | UTHBuildPacketIPV6Real (uint8_t *payload, uint16_t payload_len, uint8_t ipproto, const char *src, const char *dst, uint16_t sport, uint16_t dport) |
UTHBuildPacketReal is a function that create tcp/udp packets for unittests specifying ip and port sources and destinations (IPV6) More... | |
Packet * | UTHBuildPacketReal (uint8_t *payload, uint16_t payload_len, uint8_t ipproto, const char *src, const char *dst, uint16_t sport, uint16_t dport) |
UTHBuildPacketReal is a function that create tcp/udp packets for unittests specifying ip and port sources and destinations. More... | |
Packet * | UTHBuildPacket (uint8_t *payload, uint16_t payload_len, uint8_t ipproto) |
UTHBuildPacket is a wrapper that build packets with default ip and port fields. More... | |
Packet ** | UTHBuildPacketArrayFromEth (uint8_t *raw_eth[], int *pktsize, int numpkts) |
UTHBuildPacketArrayFromEth is a wrapper that build a packets from an array of packets in ethernet rawbytes. Hint: It also share the flows. More... | |
Packet * | UTHBuildPacketFromEth (uint8_t *raw_eth, uint16_t pktsize) |
UTHBuildPacketFromEth is a wrapper that build a packet for the rawbytes. More... | |
Packet * | UTHBuildPacketSrcDst (uint8_t *payload, uint16_t payload_len, uint8_t ipproto, const char *src, const char *dst) |
UTHBuildPacketSrcDst is a wrapper that build packets specifying IPs and defaulting ports. More... | |
Packet * | UTHBuildPacketIPV6SrcDst (uint8_t *payload, uint16_t payload_len, uint8_t ipproto, const char *src, const char *dst) |
UTHBuildPacketSrcDst is a wrapper that build packets specifying IPs and defaulting ports (IPV6) More... | |
Packet * | UTHBuildPacketSrcDstPorts (uint8_t *payload, uint16_t payload_len, uint8_t ipproto, uint16_t sport, uint16_t dport) |
UTHBuildPacketSrcDstPorts is a wrapper that build packets specifying src and dst ports and defaulting IPs. More... | |
void | UTHFreePackets (Packet **p, int numpkts) |
UTHFreePackets: function to release the allocated data from UTHBuildPacket and the packet itself. More... | |
void | UTHFreePacket (Packet *p) |
UTHFreePacket: function to release the allocated data from UTHBuildPacket and the packet itself. More... | |
void | UTHAssignFlow (Packet *p, Flow *f) |
Flow * | UTHBuildFlow (int family, const char *src, const char *dst, Port sp, Port dp) |
void | UTHFreeFlow (Flow *flow) |
int | UTHAddStreamToFlow (Flow *f, int direction, uint8_t *data, uint32_t data_len) |
int | UTHAddSessionToFlow (Flow *f, uint32_t ts_isn, uint32_t tc_isn) |
int | UTHRemoveSessionFromFlow (Flow *f) |
int | UTHGenericTest (Packet **pkt, int numpkts, const char *sigs[], uint32_t sids[], uint32_t *results, int numsigs) |
UTHGenericTest: function that perform a generic check taking care of as maximum common unittest elements as possible. It will create a detection engine, append an array of signatures an check the expected results for each of them, it check matches for an array of packets. More... | |
int | UTHCheckPacketMatchResults (Packet *p, uint32_t sids[], uint32_t results[], int numsigs) |
UTHCheckPacketMatches: function to check if a packet match some sids. More... | |
int | UTHAppendSigs (DetectEngineCtx *de_ctx, const char *sigs[], int numsigs) |
UTHAppendSigs: Add sigs to the detection_engine checking for errors. More... | |
int | UTHMatchPacketsWithResults (DetectEngineCtx *de_ctx, Packet **p, int num_packets, uint32_t sids[], uint32_t *results, int numsigs) |
int | UTHMatchPackets (DetectEngineCtx *de_ctx, Packet **p, int num_packets) |
int | UTHPacketMatchSigMpm (Packet *p, char *sig, uint16_t mpm_type) |
int | UTHPacketMatchSig (Packet *p, const char *sig) |
uint32_t | UTHBuildPacketOfFlows (uint32_t start, uint32_t end, uint8_t dir) |
int | UTHParseSignature (const char *str, bool expect) |
parser a sig and see if the expected result is correct More... | |
void * | UTHmemsearch (const void *big, size_t big_len, const void *little, size_t little_len) |
void | UTHRegisterTests (void) |
This file provide a set of helper functions for reducing the complexity when constructing unittests
Definition in file util-unittest-helper.c.
int TestHelperBufferToFile | ( | const char * | name, |
const uint8_t * | data, | ||
size_t | size | ||
) |
writes the contents of a buffer into a file
Definition at line 103 of file util-unittest-helper.c.
Definition at line 52 of file util-unittest-helper.c.
References BUG_ON, dst, FLOW_INITIALIZE, FLOW_IPV4, FLOW_IPV6, SCFree, SCMalloc, src, and unlikely.
Referenced by LLVMFuzzerTestOneInput(), and UTHBuildFlow().
int UTHAddSessionToFlow | ( | Flow * | f, |
uint32_t | ts_isn, | ||
uint32_t | tc_isn | ||
) |
Definition at line 549 of file util-unittest-helper.c.
References TcpSession_::client, FAIL_IF_NULL, TcpStream_::isn, Flow_::protoctx, TcpStream_::sb, SCCalloc, TcpSession_::server, and STREAMING_BUFFER_INITIALIZER.
int UTHAddStreamToFlow | ( | Flow * | f, |
int | direction, | ||
uint8_t * | data, | ||
uint32_t | data_len | ||
) |
Definition at line 533 of file util-unittest-helper.c.
References TcpSession_::client, FAIL_IF_NOT, FAIL_IF_NULL, TcpStream_::last_ack, Flow_::proto, Flow_::protoctx, TcpStream_::sb, TcpStreamCnf_::sbcnf, TcpSession_::server, stream_config, and StreamingBufferAppend().
int UTHAppendSigs | ( | DetectEngineCtx * | de_ctx, |
const char * | sigs[], | ||
int | numsigs | ||
) |
UTHAppendSigs: Add sigs to the detection_engine checking for errors.
de_ctx | pointer to the DetectEngineCtx used |
sigs | array of char* pointing to signatures to load |
numsigs | number of signatures to load from the array (size of the array) |
int | 0 if we have errors; 1 if all the signatures loaded successfully |
Definition at line 677 of file util-unittest-helper.c.
References BUG_ON, de_ctx, DetectEngineAppendSig(), and SCLogError.
Referenced by UTHGenericTest().
Definition at line 513 of file util-unittest-helper.c.
References Packet_::flags, Packet_::flow, and PKT_HAS_FLOW.
Definition at line 521 of file util-unittest-helper.c.
References dst, src, and TestHelperBuildFlow().
Packet* UTHBuildPacket | ( | uint8_t * | payload, |
uint16_t | payload_len, | ||
uint8_t | ipproto | ||
) |
UTHBuildPacket is a wrapper that build packets with default ip and port fields.
payload | pointer to the payload buffer |
payload_len | pointer to the length of the payload |
ipproto | Protocols allowed atm are IPPROTO_TCP and IPPROTO_UDP |
Packet | pointer to the built in packet |
Definition at line 337 of file util-unittest-helper.c.
References payload_len, and UTHBuildPacketReal().
Referenced by UTHBuildPacketOfFlows().
Packet** UTHBuildPacketArrayFromEth | ( | uint8_t * | raw_eth[], |
int * | pktsize, | ||
int | numpkts | ||
) |
UTHBuildPacketArrayFromEth is a wrapper that build a packets from an array of packets in ethernet rawbytes. Hint: It also share the flows.
raw_eth | pointer to the array of ethernet packets in rawbytes |
pktsize | pointer to the array of sizes corresponding to each buffer pointed from pktsize. |
numpkts | number of packets in the array |
Packet | pointer to the array of built in packets; NULL if something fail |
Definition at line 356 of file util-unittest-helper.c.
References DecodeEthernet(), dtv, PacketGetFromAlloc(), SCFree, SCLogError, SCMalloc, and unlikely.
Packet* UTHBuildPacketFromEth | ( | uint8_t * | raw_eth, |
uint16_t | pktsize | ||
) |
UTHBuildPacketFromEth is a wrapper that build a packet for the rawbytes.
raw_eth | pointer to the rawbytes containing an ethernet packet (and any other headers inside) |
pktsize | pointer to the length of the payload |
Packet | pointer to the built in packet; NULL if something fail |
Definition at line 394 of file util-unittest-helper.c.
References DecodeEthernet(), dtv, PacketGetFromAlloc(), and unlikely.
Packet* UTHBuildPacketIPV6Real | ( | uint8_t * | payload, |
uint16_t | payload_len, | ||
uint8_t | ipproto, | ||
const char * | src, | ||
const char * | dst, | ||
uint16_t | sport, | ||
uint16_t | dport | ||
) |
UTHBuildPacketReal is a function that create tcp/udp packets for unittests specifying ip and port sources and destinations (IPV6)
payload | pointer to the payload buffer |
payload_len | pointer to the length of the payload |
ipproto | Protocols allowed atm are IPPROTO_TCP and IPPROTO_UDP |
src | pointer to a string containing the ip source |
dst | pointer to a string containing the ip destination |
sport | pointer to a string containing the port source |
dport | pointer to a string containing the port destination |
Packet | pointer to the built in packet |
Definition at line 158 of file util-unittest-helper.c.
References Packet_::dp, dst, Packet_::dst, Address_::family, Packet_::ip6h, PacketGetFromAlloc(), Packet_::payload, payload_len, Packet_::payload_len, Packet_::proto, SCFree, SCMalloc, SET_PKT_LEN, Packet_::sp, src, Packet_::src, Packet_::tcph, TimeGet(), Packet_::ts, and unlikely.
Referenced by UTHBuildPacketIPV6SrcDst().
Packet* UTHBuildPacketIPV6SrcDst | ( | uint8_t * | payload, |
uint16_t | payload_len, | ||
uint8_t | ipproto, | ||
const char * | src, | ||
const char * | dst | ||
) |
UTHBuildPacketSrcDst is a wrapper that build packets specifying IPs and defaulting ports (IPV6)
payload | pointer to the payload buffer |
payload_len | pointer to the length of the payload |
ipproto | Protocols allowed atm are IPPROTO_TCP and IPPROTO_UDP |
Packet | pointer to the built in packet |
Definition at line 436 of file util-unittest-helper.c.
References dst, payload_len, src, and UTHBuildPacketIPV6Real().
uint32_t UTHBuildPacketOfFlows | ( | uint32_t | start, |
uint32_t | end, | ||
uint8_t | dir | ||
) |
Definition at line 892 of file util-unittest-helper.c.
References Packet_::dst, Packet_::flow, FlowFree(), FlowHandlePacket(), FLOWLOCK_UNLOCK, FlowQueuePrivateGetFromTop(), FlowLookupStruct_::spare_queue, Packet_::src, UTHBuildPacket(), UTHFreePacket(), and FlowLookupStruct_::work_queue.
Packet* UTHBuildPacketReal | ( | uint8_t * | payload, |
uint16_t | payload_len, | ||
uint8_t | ipproto, | ||
const char * | src, | ||
const char * | dst, | ||
uint16_t | sport, | ||
uint16_t | dport | ||
) |
UTHBuildPacketReal is a function that create tcp/udp packets for unittests specifying ip and port sources and destinations.
payload | pointer to the payload buffer |
payload_len | pointer to the length of the payload |
ipproto | Protocols allowed atm are IPPROTO_TCP and IPPROTO_UDP |
src | pointer to a string containing the ip source |
dst | pointer to a string containing the ip destination |
sport | pointer to a string containing the port source |
dport | pointer to a string containing the port destination |
Packet | pointer to the built in packet |
Definition at line 244 of file util-unittest-helper.c.
References dst, GET_PKT_DATA, PacketCopyDataOffset(), PacketGetFromAlloc(), payload_len, SCFree, SET_PKT_LEN, src, TimeGet(), and unlikely.
Referenced by StreamTcpUTAddPayload(), StreamTcpUTAddSegmentWithByte(), StreamTcpUTAddSegmentWithPayload(), UTHBuildPacket(), UTHBuildPacketSrcDst(), and UTHBuildPacketSrcDstPorts().
Packet* UTHBuildPacketSrcDst | ( | uint8_t * | payload, |
uint16_t | payload_len, | ||
uint8_t | ipproto, | ||
const char * | src, | ||
const char * | dst | ||
) |
UTHBuildPacketSrcDst is a wrapper that build packets specifying IPs and defaulting ports.
payload | pointer to the payload buffer |
payload_len | pointer to the length of the payload |
ipproto | Protocols allowed atm are IPPROTO_TCP and IPPROTO_UDP |
Packet | pointer to the built in packet |
Definition at line 418 of file util-unittest-helper.c.
References dst, payload_len, src, and UTHBuildPacketReal().
Packet* UTHBuildPacketSrcDstPorts | ( | uint8_t * | payload, |
uint16_t | payload_len, | ||
uint8_t | ipproto, | ||
uint16_t | sport, | ||
uint16_t | dport | ||
) |
UTHBuildPacketSrcDstPorts is a wrapper that build packets specifying src and dst ports and defaulting IPs.
payload | pointer to the payload buffer |
payload_len | pointer to the length of the payload |
ipproto | Protocols allowed atm are IPPROTO_TCP and IPPROTO_UDP |
Packet | pointer to the built in packet |
Definition at line 454 of file util-unittest-helper.c.
References payload_len, and UTHBuildPacketReal().
int UTHCheckPacketMatchResults | ( | Packet * | p, |
uint32_t | sids[], | ||
uint32_t | results[], | ||
int | numsigs | ||
) |
UTHCheckPacketMatches: function to check if a packet match some sids.
p | pointer to the Packet |
sigs | array of char* pointing to signatures to load |
numsigs | number of signatures to load from the array |
results | pointer to an array of numbers to check if sids matches that number of times or not. |
int | 1 if the match of all the sids is the specified has the specified results; 0 if not |
Definition at line 644 of file util-unittest-helper.c.
References PacketAlertCheck(), results, SCLogError, and SCLogInfo.
Referenced by UTHMatchPacketsWithResults().
void UTHFreeFlow | ( | Flow * | flow | ) |
Definition at line 526 of file util-unittest-helper.c.
References SCFree.
void UTHFreePacket | ( | Packet * | p | ) |
UTHFreePacket: function to release the allocated data from UTHBuildPacket and the packet itself.
p | pointer to the Packet |
Definition at line 485 of file util-unittest-helper.c.
References Packet_::ip4h, Packet_::proto, SCFree, Packet_::tcph, and Packet_::udph.
Referenced by StreamTcpUTAddPayload(), StreamTcpUTAddSegmentWithByte(), StreamTcpUTAddSegmentWithPayload(), UTHBuildPacketOfFlows(), and UTHFreePackets().
void UTHFreePackets | ( | Packet ** | p, |
int | numpkts | ||
) |
UTHFreePackets: function to release the allocated data from UTHBuildPacket and the packet itself.
p | pointer to the Packet |
Definition at line 468 of file util-unittest-helper.c.
References UTHFreePacket().
int UTHGenericTest | ( | Packet ** | pkt, |
int | numpkts, | ||
const char * | sigs[], | ||
uint32_t | sids[], | ||
uint32_t * | results, | ||
int | numsigs | ||
) |
UTHGenericTest: function that perform a generic check taking care of as maximum common unittest elements as possible. It will create a detection engine, append an array of signatures an check the expected results for each of them, it check matches for an array of packets.
pkt | pointer to the array of packets |
numpkts | number of packets to match |
sigs | array of char* pointing to signatures to load |
numsigs | number of signatures to load and check |
results | pointer to arrays of numbers, each of them foreach packet to check if sids matches that packet as expected with that number of times or not. The size of results should be numpkts * numsigs * sizeof(uint16_t *) |
Example: result[1][3] would mean the number of times the pkt[1] match the sid[3]
int | 1 if the match of all the sids is the specified has the specified results; 0 if not |
Definition at line 604 of file util-unittest-helper.c.
References de_ctx, DE_QUIET, DetectEngineCtxFree(), DetectEngineCtxInit(), DetectEngineCtx_::flags, results, SCLogError, UTHAppendSigs(), and UTHMatchPacketsWithResults().
int UTHMatchPackets | ( | DetectEngineCtx * | de_ctx, |
Packet ** | p, | ||
int | num_packets | ||
) |
de_ctx | pointer with the signatures loaded |
p | pointer to the array of packets |
num_packets | number of packets in the array |
return | 1 if all goes well |
return | 0 if something fail |
Definition at line 751 of file util-unittest-helper.c.
References BUG_ON, de_ctx, DetectEngineThreadCtxDeinit(), DetectEngineThreadCtxInit(), dtv, SCSigOrderSignatures(), SCSigRegisterSignatureOrderingFuncs(), SCSigSignatureOrderingModuleCleanup(), SigGroupBuild(), SigGroupCleanup(), and SigMatchSignatures().
int UTHMatchPacketsWithResults | ( | DetectEngineCtx * | de_ctx, |
Packet ** | p, | ||
int | num_packets, | ||
uint32_t | sids[], | ||
uint32_t * | results, | ||
int | numsigs | ||
) |
de_ctx | pointer with the signatures loaded |
p | pointer to the array of packets |
num_packets | number of packets in the array |
return | 1 if all goes well |
return | 0 if something fail |
Definition at line 712 of file util-unittest-helper.c.
References BUG_ON, de_ctx, DetectEngineThreadCtxDeinit(), DetectEngineThreadCtxInit(), dtv, results, SigGroupBuild(), SigMatchSignatures(), and UTHCheckPacketMatchResults().
Referenced by UTHGenericTest().
void* UTHmemsearch | ( | const void * | big, |
size_t | big_len, | ||
const void * | little, | ||
size_t | little_len | ||
) |
Definition at line 1004 of file util-unittest-helper.c.
References BasicSearch().
int UTHPacketMatchSig | ( | Packet * | p, |
const char * | sig | ||
) |
sig | pointer to the string signature to test |
sid | sid number of the signature |
return | 1 if match |
return | 0 if not |
Definition at line 843 of file util-unittest-helper.c.
References de_ctx, DE_QUIET, DetectEngineCtxFree(), DetectEngineCtxInit(), DetectEngineThreadCtxDeinit(), DetectEngineThreadCtxInit(), dtv, DetectEngineCtx_::flags, Signature_::id, PacketAlertCheck(), DetectEngineCtx_::sig_list, SigCleanSignatures(), SigGroupBuild(), SigGroupCleanup(), SigInit(), and SigMatchSignatures().
int UTHPacketMatchSigMpm | ( | Packet * | p, |
char * | sig, | ||
uint16_t | mpm_type | ||
) |
sig | pointer to the string signature to test |
sid | sid number of the signature |
return | 1 if match |
return | 0 if not |
Definition at line 789 of file util-unittest-helper.c.
References de_ctx, DE_QUIET, DetectEngineCtxFree(), DetectEngineCtxInit(), DetectEngineThreadCtxDeinit(), DetectEngineThreadCtxInit(), dtv, DetectEngineCtx_::flags, Signature_::id, DetectEngineCtx_::mpm_matcher, PacketAlertCheck(), SCEnter, SCReturnInt, DetectEngineCtx_::sig_list, SigGroupBuild(), SigInit(), and SigMatchSignatures().
int UTHParseSignature | ( | const char * | str, |
bool | expect | ||
) |
parser a sig and see if the expected result is correct
Definition at line 929 of file util-unittest-helper.c.
References de_ctx, DE_QUIET, DetectEngineAppendSig(), DetectEngineCtxFree(), DetectEngineCtxInit(), FAIL_IF_NOT_NULL, FAIL_IF_NULL, DetectEngineCtx_::flags, PASS, and str.
void UTHRegisterTests | ( | void | ) |
Definition at line 1158 of file util-unittest-helper.c.
References UtRegisterTest().
int UTHRemoveSessionFromFlow | ( | Flow * | f | ) |
Definition at line 569 of file util-unittest-helper.c.
References FAIL_IF_NOT, FAIL_IF_NULL, Flow_::proto, Flow_::protoctx, SCFree, and StreamTcpSessionCleanup().
uint32_t UTHSetIPv4Address | ( | const char * | str | ) |
return the uint32_t for a ipv4 address string
str | Valid ipaddress in string form (e.g. 1.2.3.4) |
uint | the uin32_t representation |
Definition at line 134 of file util-unittest-helper.c.
References str.