From: Linux Karlsson Date: Tue, 8 Jun 2010 10:53:18 +0000 (+0200) Subject: Added tests for a_md5encrypt. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a53b74ce4636ae842dae58b0b7e62ec36dbfe438;p=thirdparty%2Fntp.git Added tests for a_md5encrypt. bk: 4c0e211e2GF69dL79UKkVtLajsWi2g --- diff --git a/tests/libntp/Makefile.am b/tests/libntp/Makefile.am index 7113f9de5c..d44d910ab3 100644 --- a/tests/libntp/Makefile.am +++ b/tests/libntp/Makefile.am @@ -1,8 +1,9 @@ check_PROGRAMS = tests LDADD = @top_builddir@/libntp/libntp.a @LCRYPTO@ -lgtest_main -lpthread tests_SOURCES = libntptest.cpp \ - hextoint.cpp \ - authkeys.cpp + a_md5encrypt.cpp \ + authkeys.cpp \ + hextoint.cpp INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/lib/isc/include \ -I$(top_srcdir)/lib/isc/nothreads/include \ diff --git a/tests/libntp/a_md5encrypt.cpp b/tests/libntp/a_md5encrypt.cpp new file mode 100644 index 0000000000..f09bca2bcf --- /dev/null +++ b/tests/libntp/a_md5encrypt.cpp @@ -0,0 +1,78 @@ +#include "libntptest.h" + +extern "C" { +#include "ntp.h" +#include "ntp_stdlib.h" +}; + +class a_md5encryptTest : public libntptest { +protected: +}; + +/* + * Example packet with MD5 hash calculated manually. + */ +const int keytype = KEY_TYPE_MD5; +const char *key = "abcdefgh"; +const int keylength = 8; +const char *packet = "ijklmnopqrstuvwx"; +const int packetlength = 16; +const char *expectedPacket = "ijklmnopqrstuvwx0000\x0c\x0e\x84\xcf\x0b\xb7\xa8\x68\x8e\x52\x38\xdb\xbc\x1c\x39\x53"; + +TEST_F(a_md5encryptTest, Encrypt) { + char *packetPtr = new char[16+4+16]; // Data + keyid + digest + memcpy(packetPtr, packet, 16); + memcpy(packetPtr+16, "0000", 4); + + cache_keylen = keylength; + + int length = MD5authencrypt(KEY_TYPE_MD5, (u_char*)key, (u_int32*)packetPtr, packetlength); + + EXPECT_EQ(20, length); + + EXPECT_STREQ(expectedPacket, packetPtr); + + delete[] packetPtr; +} + +TEST_F(a_md5encryptTest, DecryptValid) { + cache_keylen = keylength; + + EXPECT_TRUE(MD5authdecrypt(keytype, (u_char*)key, (u_int32*)expectedPacket, packetlength, 20)); +} + +TEST_F(a_md5encryptTest, DecryptInvalid) { + const char *invalidPacket = "ijklmnopqrstuvwx0000\x0c\x0e\x84\xcf\x0b\xb7\xa8\x68\x8e\x52\x38\xdb\xbc\x1c\x39\x54"; + + EXPECT_FALSE(MD5authdecrypt(keytype, (u_char*)key, (u_int32*)invalidPacket, packetlength, 20)); +} + +TEST_F(a_md5encryptTest, IPv4AddressToRefId) { + sockaddr_u addr; + addr.sa4.sin_family = AF_INET; + addr.sa4.sin_port = htons(80); + + u_int32 address = inet_addr("192.0.2.1"); + addr.sa4.sin_addr.s_addr = address; + + EXPECT_EQ(address, addr2refid(&addr)); +} + +TEST_F(a_md5encryptTest, IPv6AddressToRefId) { + const struct in6_addr address = { + 0x20, 0x01, 0x0d, 0xb8, + 0x85, 0xa3, 0x08, 0xd3, + 0x13, 0x19, 0x8a, 0x2e, + 0x03, 0x70, 0x73, 0x34 + }; + + + sockaddr_u addr; + addr.sa6.sin6_family = AF_INET6; + + addr.sa6.sin6_addr = address; + + const int expected = 0x75cffd52; + + EXPECT_EQ(expected, addr2refid(&addr)); +} diff --git a/tests/libntp/authkeys.cpp b/tests/libntp/authkeys.cpp index c03adf34f6..f18bd20aaf 100644 --- a/tests/libntp/authkeys.cpp +++ b/tests/libntp/authkeys.cpp @@ -9,6 +9,12 @@ class authkeysTest : public libntptest { protected: virtual void SetUp() { init_auth(); + + /* + * init_auth() does not initialize global variables like authnumkeys, + * so let's reset them to zero here. + */ + authnumkeys = 0; } void AddTrustedKey(keyid_t keyno) { @@ -26,12 +32,15 @@ protected: } }; -TEST_F(authkeysTest, AddTrustedKey) { - const keyid_t KEYNO = 5; +TEST_F(authkeysTest, AddTrustedKeys) { + const keyid_t KEYNO1 = 5; + const keyid_t KEYNO2 = 8; - AddTrustedKey(KEYNO); + AddTrustedKey(KEYNO1); + AddTrustedKey(KEYNO2); - EXPECT_TRUE(authistrusted(KEYNO)); + EXPECT_TRUE(authistrusted(KEYNO1)); + EXPECT_TRUE(authistrusted(KEYNO2)); } TEST_F(authkeysTest, AddUntrustedKey) { @@ -71,3 +80,21 @@ TEST_F(authkeysTest, HaveKeyIncorrect) { EXPECT_FALSE(auth_havekey(KEYNO)); EXPECT_FALSE(authhavekey(KEYNO)); } + +/*TEST_F(authkeysTest, DeleteKeys) { + const keyid_t KEYNO1 = 2; + const keyid_t KEYNO2 = 5; + const keyid_t KEYNO3 = 66; + + AddTrustedKey(KEYNO1); + AddTrustedKey(KEYNO2); + AddTrustedKey(KEYNO3); + + EXPECT_EQ(3, authnumkeys); + + auth_delkeys(); + + EXPECT_FALSE(auth_havekey(KEYNO1)); + EXPECT_FALSE(auth_havekey(KEYNO2)); + EXPECT_FALSE(auth_havekey(KEYNO3)); +}*/