]> git.ipfire.org Git - thirdparty/ntp.git/commitdiff
Added tests for a_md5encrypt.
authorLinux Karlsson <karlsson@ntp.org>
Tue, 8 Jun 2010 10:53:18 +0000 (12:53 +0200)
committerLinux Karlsson <karlsson@ntp.org>
Tue, 8 Jun 2010 10:53:18 +0000 (12:53 +0200)
bk: 4c0e211e2GF69dL79UKkVtLajsWi2g

tests/libntp/Makefile.am
tests/libntp/a_md5encrypt.cpp [new file with mode: 0644]
tests/libntp/authkeys.cpp

index 7113f9de5c157fff79bb764c3aaf3947366dabd7..d44d910ab3d2976c29ffc65d1ed7c9ef731abce4 100644 (file)
@@ -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 (file)
index 0000000..f09bca2
--- /dev/null
@@ -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));
+}
index c03adf34f67ce10d6d5f58ba87d1dfce7c4dc819..f18bd20aaf10f945f9a9433621f0edd3e0babeac 100644 (file)
@@ -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));
+}*/