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... | |
void | UTHSetIPV4Hdr (Packet *p, IPV4Hdr *ip4h) |
void | UTHSetIPV6Hdr (Packet *p, IPV6Hdr *ip6h) |
void | UTHSetTCPHdr (Packet *p, TCPHdr *tcph) |
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 * | 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 510 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 494 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 638 of file util-unittest-helper.c.
References BUG_ON, de_ctx, DetectEngineAppendSig(), and SCLogError.
Referenced by UTHGenericTest().
Definition at line 474 of file util-unittest-helper.c.
References Packet_::flags, Packet_::flow, and PKT_HAS_FLOW.
Definition at line 482 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 359 of file util-unittest-helper.c.
References payload_len, and UTHBuildPacketReal().
Referenced by UTHBuildPacketOfFlows().
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 376 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 172 of file util-unittest-helper.c.
References Packet_::dp, dst, Packet_::dst, Address_::family, PacketGetFromAlloc(), Packet_::payload, payload_len, Packet_::payload_len, Packet_::proto, SCCalloc, SCFree, SCMalloc, SET_PKT_LEN, Packet_::sp, src, Packet_::src, TCPHdr_::th_dport, TCPHdr_::th_sport, TimeGet(), Packet_::ts, unlikely, UTHSetIPV6Hdr(), and UTHSetTCPHdr().
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 418 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 853 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 260 of file util-unittest-helper.c.
References dst, IPPROTO_SCTP, PacketGetFromAlloc(), payload_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 400 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 436 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 605 of file util-unittest-helper.c.
References PacketAlertCheck(), SCLogError, and SCLogInfo.
Referenced by UTHMatchPacketsWithResults().
void UTHFreeFlow | ( | Flow * | flow | ) |
Definition at line 487 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 467 of file util-unittest-helper.c.
References PacketFree().
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 450 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 565 of file util-unittest-helper.c.
References de_ctx, DE_QUIET, DetectEngineCtxFree(), DetectEngineCtxInit(), DetectEngineCtx_::flags, 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 712 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 673 of file util-unittest-helper.c.
References BUG_ON, de_ctx, DetectEngineThreadCtxDeinit(), DetectEngineThreadCtxInit(), dtv, 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 969 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 804 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 750 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 890 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 1123 of file util-unittest-helper.c.
References UtRegisterTest().
int UTHRemoveSessionFromFlow | ( | Flow * | f | ) |
Definition at line 530 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 148 of file util-unittest-helper.c.
References str.
Definition at line 126 of file util-unittest-helper.c.
Definition at line 131 of file util-unittest-helper.c.
Referenced by UTHBuildPacketIPV6Real().
Definition at line 136 of file util-unittest-helper.c.
Referenced by UTHBuildPacketIPV6Real().