From afa8a6766eab6781bd19e13613818801dba032f2 Mon Sep 17 00:00:00 2001 From: Jamie Date: Sat, 15 Aug 2009 14:38:26 +0100 Subject: [PATCH] test cases for PPPoE, ICMPv4 --- src/decode-icmpv4.c | 82 ++++++++++++++++++++++++++++++++++++++++++++- src/decode-icmpv4.h | 2 ++ src/decode-pppoe.c | 33 ++++++++++++++++-- src/eidps.c | 1 + 4 files changed, 115 insertions(+), 3 deletions(-) diff --git a/src/decode-icmpv4.c b/src/decode-icmpv4.c index fc44daf599..2adebd5ffe 100644 --- a/src/decode-icmpv4.c +++ b/src/decode-icmpv4.c @@ -3,8 +3,9 @@ #include "eidps-common.h" #include "decode.h" #include "decode-icmpv4.h" +#include "util-unittest.h" -void DecodeICMPV4(ThreadVars *t, Packet *p, uint8_t *pkt, uint16_t len ) +void DecodeICMPV4(ThreadVars *t, Packet *p, uint8_t *pkt, uint16_t len) { p->icmpv4h = (ICMPV4Hdr *)pkt; @@ -22,3 +23,82 @@ void DecodeICMPV4(ThreadVars *t, Packet *p, uint8_t *pkt, uint16_t len ) return; } +#ifdef UNITTESTS + +/** DecodeICMPV4test01 + * \brief + * \retval 0 Expected test value + */ +static int DecodeICMPV4test01(void) { + uint8_t raw_icmpv4[] = { 0x08, 0x00, 0x78, 0x47, 0xfc, 0x55, 0x00, 0x04, 0x52, 0xab, 0x86, 0x4a, 0x84, 0x50, 0x0e, 0x00, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xabab, 0xabab, 0xabab, 0xabab, 0xabab, 0xabab, 0xabab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab }; + Packet p; + ThreadVars tv; + + memset(&tv, 0, sizeof(ThreadVars)); + memset(&p, 0, sizeof(Packet)); + + DecodeICMPV4(&tv, &p, raw_icmpv4, sizeof(raw_icmpv4)); + return 0; +} + +/** DecodeICMPV4test02 + * \brief + * \retval 0 Expected test value + */ +static int DecodeICMPV4test02(void) { + uint8_t raw_icmpv4[] = { 0x00, 0x00, 0x57, 0x64, 0xfb, 0x55, 0x00, 0x03, 0x43, 0xab, 0x86, 0x4a, 0xf6, 0x49, 0x02, 0x00, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f }; + Packet p; + ThreadVars tv; + + memset(&tv, 0, sizeof(ThreadVars)); + memset(&p, 0, sizeof(Packet)); + + DecodeICMPV4(&tv, &p, raw_icmpv4, sizeof(raw_icmpv4)); + return 0; +} + +/** DecodeICMPV4test03 + * \brief TTL exceeded + * \retval Expected test value: 0 + */ +static int DecodeICMPV4test03(void) { + uint8_t raw_icmpv4[] = { 0x0b, 0x00, 0x6a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x3c, 0x64, 0x15, 0x00, 0x00, 0x01, 0x11, 0xde, 0xfd, 0xc0, 0xa8, 0x01, 0x0d, 0xd1, 0x55, 0xe3, 0x93, 0x8b, 0x12, 0x82, 0xaa, 0x00, 0x28, 0x7c, 0xdd }; + Packet p; + ThreadVars tv; + + memset(&tv, 0, sizeof(ThreadVars)); + memset(&p, 0, sizeof(Packet)); + + DecodeICMPV4(&tv, &p, raw_icmpv4, sizeof(raw_icmpv4)); + return 0; +} + +/** DecodeICMPV4test04 + * \brief dest. unreachable, administratively prohibited + * \retval 0 Expected test value + */ +static int DecodeICMPV4test04(void) { + uint8_t raw_icmpv4[] = { 0x03, 0x0a, 0x36, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x3c, 0x62, 0xee, 0x40, 0x00, 0x33, 0x06, 0xb4, 0x8f, 0xc0, 0xa8, 0x01, 0x0d, 0x58, 0x60, 0x16, 0x29, 0xb1, 0x0a, 0x00, 0x32, 0x3e, 0x36, 0x38, 0x7c, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x02, 0x16, 0xd0, 0x72, 0x04, 0x00, 0x00, 0x02, 0x04, 0x05, 0x8a, 0x04, 0x02, 0x08, 0x0a }; + Packet p; + ThreadVars tv; + + memset(&tv, 0, sizeof(ThreadVars)); + memset(&p, 0, sizeof(Packet)); + + DecodeICMPV4(&tv, &p, raw_icmpv4, sizeof(raw_icmpv4)); + return 0; +} + +/** + * \brief Registers ICMPV4 unit test + * \todo More ICMPv4 tests + */ +void DecodeICMPV4RegisterTests(void) { + UtRegisterTest("DecodeICMPV4ttest01", DecodeICMPV4test01, 0); + UtRegisterTest("DecodeICMPV4ttest02", DecodeICMPV4test02, 0); + UtRegisterTest("DecodeICMPV4ttest03", DecodeICMPV4test03, 0); + UtRegisterTest("DecodeICMPV4ttest04", DecodeICMPV4test04, 0); +} + +#endif /* UNITTESTS */ + diff --git a/src/decode-icmpv4.h b/src/decode-icmpv4.h index 3fd0461030..411c3ab9cc 100644 --- a/src/decode-icmpv4.h +++ b/src/decode-icmpv4.h @@ -133,5 +133,7 @@ typedef struct ICMPV4Hdr_ /* XXX incomplete */ } ICMPV4Hdr; +void DecodeICMPV4RegisterTests(void); + #endif /* __DECODE_ICMPV4_H__ */ diff --git a/src/decode-pppoe.c b/src/decode-pppoe.c index 90e2d253c3..dd70cec111 100644 --- a/src/decode-pppoe.c +++ b/src/decode-pppoe.c @@ -62,7 +62,35 @@ static int DecodePPPoEtest01 (void) { DecodePPPoE(&tv, &p, raw_pppoe, sizeof(raw_pppoe), NULL); - /* Function my returns here with expected value */ + if(DECODER_ISSET_EVENT(&p,PPPOE_PKT_TOO_SMALL)) { + return 1; + } + + return 0; +} + +/** DecodePPPoEtest02 + * /brief Valid PPPoE packet + * /retval Expected test value: 0 + */ +static int DecodePPPoEtest02 (void) { + + u_int8_t raw_pppoe[] = { 0x11, 0x00, 0x00, 0x01, 0x00, 0x68, 0x00, 0x21, 0x45, 0xc0, 0x00, 0x66, 0x02, 0xa3, 0x00, 0x00 + , 0xff, 0xfd, 0x91, 0x7b, 0x64, 0x00, 0x00, 0x64, 0xc0, 0x55, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00 + , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x56, 0x8b, 0xa4, 0x7c, 0xfa + , 0x38, 0x78, 0xb3, 0x70, 0x3f, 0xda, 0x79, 0x50, 0x2e, 0xd7, 0x7f, 0x4d, 0x7c, 0xd2, 0xdc, 0x80 + , 0xfa, 0x66}; + + Packet p; + ThreadVars tv; + + memset(&tv, 0, sizeof(ThreadVars)); + memset(&p, 0, sizeof(Packet)); + + DecodePPPoE(&tv, &p, raw_pppoe, sizeof(raw_pppoe), NULL); if(DECODER_ISSET_EVENT(&p,PPPOE_PKT_TOO_SMALL)) { return 1; @@ -72,9 +100,10 @@ static int DecodePPPoEtest01 (void) { } /** - * \brief Registers PPPoE unit test + * \brief Registers PPPoE unit tests * \todo More PPPoE tests */ void DecodePPPoERegisterTests(void) { UtRegisterTest("DecodePPPoEtest01", DecodePPPoEtest01, 1); + UtRegisterTest("DecodePPPoEtest02", DecodePPPoEtest02, 0); } diff --git a/src/eidps.c b/src/eidps.c index 73d85e1a76..e1a379c9bf 100644 --- a/src/eidps.c +++ b/src/eidps.c @@ -952,6 +952,7 @@ int main(int argc, char **argv) DecodePPPRegisterTests(); HTTPParserRegisterTests(); DecodePPPoERegisterTests(); + DecodeICMPV4RegisterTests(); UtRunTests(); UtCleanup(); exit(0);