From: Damir Tomic Date: Thu, 25 Jun 2015 10:15:27 +0000 (+0200) Subject: run-packetProcessing.c: X-Git-Tag: NTP_4_2_8P3_RC3~21 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2a053ba82d29a6b9d72a6ab7c29deaedb925a081;p=thirdparty%2Fntp.git run-packetProcessing.c: new file packetHandling.cpp~39b5af94c298eb8c: Delete: sntp/tests/packetHandling.cpp Makefile.am: merged lokesh and tomasz work bk: 558bd4bfmjZtqfEg26qF6mlTFYAmgw --- diff --git a/sntp/tests/Makefile.am b/sntp/tests/Makefile.am index 8e01b63ef..7d8a65bd6 100644 --- a/sntp/tests/Makefile.am +++ b/sntp/tests/Makefile.am @@ -8,7 +8,7 @@ run_unity = cd $(srcdir) && ruby ../../sntp/unity/auto/generate_test_runner.rb # Use EXTRA_PROGRAMS for test files that are under development but # not production-ready -#EXTRA_PROGRAMS += test-keyFile +#EXTRA_PROGRAMS += test-packetHandling test-packetProcessing check_PROGRAMS = \ test-crypto \ @@ -16,9 +16,9 @@ check_PROGRAMS = \ test-kodDatabase \ test-kodFile \ test-networking \ + test-packetHandling \ test-packetProcessing \ test-utilities \ - test-packetHandling \ $(NULL) if GTEST_AVAILABLE @@ -38,7 +38,7 @@ base_SOURCES = \ tests_SOURCES = \ $(base_SOURCES) \ g_networking.cpp \ - nameresolution.cpp \ + g_nameresolution.cpp \ g_packetHandling.cpp \ g_packetProcessing.cpp \ $(NULL) @@ -199,7 +199,7 @@ test_networking_SOURCES = \ $(NULL) test_packetHandling_SOURCES = \ - packetHandling.c \ + packetHandling.c \ run-packetHandling.c \ $(top_builddir)/version.c \ $(NULL) @@ -224,8 +224,8 @@ test_kodFile_SOURCES = \ # ../version.c test_packetProcessing_SOURCES = \ - packetProcessing.c \ - run-packetProcessing.c \ + packetProcessing.c \ + run-packetProcessing.c \ $(NULL) test_utilities_SOURCES = \ diff --git a/sntp/tests/packetHandling.cpp b/sntp/tests/packetHandling.cpp deleted file mode 100644 index bd5b14e0d..000000000 --- a/sntp/tests/packetHandling.cpp +++ /dev/null @@ -1,264 +0,0 @@ -#include "g_sntptest.h" - -extern "C" { -#include "kod_management.h" -#include "main.h" -#include "networking.h" -#include "ntp.h" -}; - -class mainTest : public sntptest { -protected: - ::testing::AssertionResult LfpEquality(const l_fp &expected, const l_fp &actual) { - if (L_ISEQU(&expected, &actual)) { - return ::testing::AssertionSuccess(); - } else { - return ::testing::AssertionFailure() - << " expected: " << lfptoa(&expected, FRACTION_PREC) - << " (" << expected.l_ui << "." << expected.l_uf << ")" - << " but was: " << lfptoa(&actual, FRACTION_PREC) - << " (" << actual.l_ui << "." << actual.l_uf << ")"; - } - } -}; - -TEST_F(mainTest, GenerateUnauthenticatedPacket) { - pkt testpkt; - - timeval xmt; - GETTIMEOFDAY(&xmt, NULL); - xmt.tv_sec += JAN_1970; - - EXPECT_EQ(LEN_PKT_NOMAC, - generate_pkt(&testpkt, &xmt, 0, NULL)); - - EXPECT_EQ(LEAP_NOTINSYNC, PKT_LEAP(testpkt.li_vn_mode)); - EXPECT_EQ(NTP_VERSION, PKT_VERSION(testpkt.li_vn_mode)); - EXPECT_EQ(MODE_CLIENT, PKT_MODE(testpkt.li_vn_mode)); - - EXPECT_EQ(STRATUM_UNSPEC, PKT_TO_STRATUM(testpkt.stratum)); - EXPECT_EQ(8, testpkt.ppoll); - - l_fp expected_xmt, actual_xmt; - TVTOTS(&xmt, &expected_xmt); - NTOHL_FP(&testpkt.xmt, &actual_xmt); - EXPECT_TRUE(LfpEquality(expected_xmt, actual_xmt)); -} - -TEST_F(mainTest, GenerateAuthenticatedPacket) { - key testkey; - testkey.next = NULL; - testkey.key_id = 30; - testkey.key_len = 9; - memcpy(testkey.key_seq, "123456789", testkey.key_len); - memcpy(testkey.type, "MD5", 3); - - pkt testpkt; - - timeval xmt; - GETTIMEOFDAY(&xmt, NULL); - xmt.tv_sec += JAN_1970; - - const int EXPECTED_PKTLEN = LEN_PKT_NOMAC + MAX_MD5_LEN; - - EXPECT_EQ(EXPECTED_PKTLEN, - generate_pkt(&testpkt, &xmt, testkey.key_id, &testkey)); - - EXPECT_EQ(LEAP_NOTINSYNC, PKT_LEAP(testpkt.li_vn_mode)); - EXPECT_EQ(NTP_VERSION, PKT_VERSION(testpkt.li_vn_mode)); - EXPECT_EQ(MODE_CLIENT, PKT_MODE(testpkt.li_vn_mode)); - - EXPECT_EQ(STRATUM_UNSPEC, PKT_TO_STRATUM(testpkt.stratum)); - EXPECT_EQ(8, testpkt.ppoll); - - l_fp expected_xmt, actual_xmt; - TVTOTS(&xmt, &expected_xmt); - NTOHL_FP(&testpkt.xmt, &actual_xmt); - EXPECT_TRUE(LfpEquality(expected_xmt, actual_xmt)); - - EXPECT_EQ(testkey.key_id, ntohl(testpkt.exten[0])); - - char expected_mac[MAX_MD5_LEN]; - ASSERT_EQ(MAX_MD5_LEN - 4, // Remove the key_id, only keep the mac. - make_mac((char*)&testpkt, LEN_PKT_NOMAC, MAX_MD5_LEN, &testkey, expected_mac)); - EXPECT_TRUE(memcmp(expected_mac, (char*)&testpkt.exten[1], MAX_MD5_LEN -4) == 0); -} - -TEST_F(mainTest, OffsetCalculationPositiveOffset) { - pkt rpkt; - - rpkt.precision = -16; // 0,000015259 - rpkt.rootdelay = HTONS_FP(DTOUFP(0.125)); - rpkt.rootdisp = HTONS_FP(DTOUFP(0.25)); - // Synch Distance: (0.125+0.25)/2.0 == 0.1875 - l_fp reftime; - get_systime(&reftime); - HTONL_FP(&reftime, &rpkt.reftime); - - l_fp tmp; - - // T1 - Originate timestamp - tmp.l_ui = 1000000000UL; - tmp.l_uf = 0UL; - HTONL_FP(&tmp, &rpkt.org); - - // T2 - Receive timestamp - tmp.l_ui = 1000000001UL; - tmp.l_uf = 2147483648UL; - HTONL_FP(&tmp, &rpkt.rec); - - // T3 - Transmit timestamp - tmp.l_ui = 1000000002UL; - tmp.l_uf = 0UL; - HTONL_FP(&tmp, &rpkt.xmt); - - // T4 - Destination timestamp as standard timeval - tmp.l_ui = 1000000001UL; - tmp.l_uf = 0UL; - timeval dst; - TSTOTV(&tmp, &dst); - dst.tv_sec -= JAN_1970; - - double offset, precision, synch_distance; - offset_calculation(&rpkt, LEN_PKT_NOMAC, &dst, &offset, &precision, &synch_distance); - - EXPECT_DOUBLE_EQ(1.25, offset); - EXPECT_DOUBLE_EQ(1. / ULOGTOD(16), precision); - // 1.1250150000000001 ? - EXPECT_DOUBLE_EQ(1.125015, synch_distance); -} - -TEST_F(mainTest, OffsetCalculationNegativeOffset) { - pkt rpkt; - - rpkt.precision = -1; - rpkt.rootdelay = HTONS_FP(DTOUFP(0.5)); - rpkt.rootdisp = HTONS_FP(DTOUFP(0.5)); - // Synch Distance is (0.5+0.5)/2.0, or 0.5 - l_fp reftime; - get_systime(&reftime); - HTONL_FP(&reftime, &rpkt.reftime); - - l_fp tmp; - - // T1 - Originate timestamp - tmp.l_ui = 1000000001UL; - tmp.l_uf = 0UL; - HTONL_FP(&tmp, &rpkt.org); - - // T2 - Receive timestamp - tmp.l_ui = 1000000000UL; - tmp.l_uf = 2147483648UL; - HTONL_FP(&tmp, &rpkt.rec); - - // T3 - Transmit timestamp - tmp.l_ui = 1000000001UL; - tmp.l_uf = 2147483648UL; - HTONL_FP(&tmp, &rpkt.xmt); - - // T4 - Destination timestamp as standard timeval - tmp.l_ui = 1000000003UL; - tmp.l_uf = 0UL; - timeval dst; - TSTOTV(&tmp, &dst); - dst.tv_sec -= JAN_1970; - - double offset, precision, synch_distance; - offset_calculation(&rpkt, LEN_PKT_NOMAC, &dst, &offset, &precision, &synch_distance); - - EXPECT_DOUBLE_EQ(-1, offset); - EXPECT_DOUBLE_EQ(1. / ULOGTOD(1), precision); - EXPECT_DOUBLE_EQ(1.3333483333333334, synch_distance); -} - -TEST_F(mainTest, HandleUnusableServer) { - pkt rpkt; - sockaddr_u host; - int rpktl; - - ZERO(rpkt); - ZERO(host); - rpktl = SERVER_UNUSEABLE; - EXPECT_EQ(-1, handle_pkt(rpktl, &rpkt, &host, "")); -} - -TEST_F(mainTest, HandleUnusablePacket) { - pkt rpkt; - sockaddr_u host; - int rpktl; - - ZERO(rpkt); - ZERO(host); - rpktl = PACKET_UNUSEABLE; - EXPECT_EQ(1, handle_pkt(rpktl, &rpkt, &host, "")); -} - -TEST_F(mainTest, HandleServerAuthenticationFailure) { - pkt rpkt; - sockaddr_u host; - int rpktl; - - ZERO(rpkt); - ZERO(host); - rpktl = SERVER_AUTH_FAIL; - EXPECT_EQ(1, handle_pkt(rpktl, &rpkt, &host, "")); -} - -TEST_F(mainTest, HandleKodDemobilize) { - const char * HOSTNAME = "192.0.2.1"; - const char * REASON = "DENY"; - pkt rpkt; - sockaddr_u host; - int rpktl; - kod_entry * entry; - - rpktl = KOD_DEMOBILIZE; - ZERO(rpkt); - memcpy(&rpkt.refid, REASON, 4); - ZERO(host); - host.sa4.sin_family = AF_INET; - host.sa4.sin_addr.s_addr = inet_addr(HOSTNAME); - - // Test that the KOD-entry is added to the database. - kod_init_kod_db("/dev/null", TRUE); - - EXPECT_EQ(1, handle_pkt(rpktl, &rpkt, &host, HOSTNAME)); - - ASSERT_EQ(1, search_entry(HOSTNAME, &entry)); - EXPECT_TRUE(memcmp(REASON, entry->type, 4) == 0); -} - -TEST_F(mainTest, HandleKodRate) { - pkt rpkt; - sockaddr_u host; - int rpktl; - - ZERO(rpkt); - ZERO(host); - rpktl = KOD_RATE; - EXPECT_EQ(1, handle_pkt(rpktl, &rpkt, &host, "")); -} - -TEST_F(mainTest, HandleCorrectPacket) { - pkt rpkt; - sockaddr_u host; - int rpktl; - l_fp now; - - // We don't want our testing code to actually change the system clock. - ASSERT_FALSE(ENABLED_OPT(STEP)); - ASSERT_FALSE(ENABLED_OPT(SLEW)); - - get_systime(&now); - HTONL_FP(&now, &rpkt.reftime); - HTONL_FP(&now, &rpkt.org); - HTONL_FP(&now, &rpkt.rec); - HTONL_FP(&now, &rpkt.xmt); - rpktl = LEN_PKT_NOMAC; - ZERO(host); - AF(&host) = AF_INET; - - EXPECT_EQ(0, handle_pkt(rpktl, &rpkt, &host, "")); -} - -/* packetHandling.cpp */ diff --git a/sntp/tests/run-packetProcessing.c b/sntp/tests/run-packetProcessing.c new file mode 100644 index 000000000..0c35a4232 --- /dev/null +++ b/sntp/tests/run-packetProcessing.c @@ -0,0 +1,86 @@ +/* AUTOGENERATED FILE. DO NOT EDIT. */ + +//=======Test Runner Used To Run Each Test Below===== +#define RUN_TEST(TestFunc, TestLineNum) \ +{ \ + Unity.CurrentTestName = #TestFunc; \ + Unity.CurrentTestLineNumber = TestLineNum; \ + Unity.NumberOfTests++; \ + if (TEST_PROTECT()) \ + { \ + setUp(); \ + TestFunc(); \ + } \ + if (TEST_PROTECT() && !TEST_IS_IGNORED) \ + { \ + tearDown(); \ + } \ + UnityConcludeTest(); \ +} + +//=======Automagically Detected Files To Include===== +#include "unity.h" +#include +#include + +//=======External Functions This Runner Calls===== +extern void setUp(void); +extern void tearDown(void); +void resetTest(void); +extern void test_TooShortLength(void); +extern void test_LengthNotMultipleOfFour(void); +extern void test_TooShortExtensionFieldLength(void); +extern void test_UnauthenticatedPacketReject(void); +extern void test_CryptoNAKPacketReject(void); +extern void test_AuthenticatedPacketInvalid(void); +extern void test_AuthenticatedPacketUnknownKey(void); +extern void test_ServerVersionTooOld(void); +extern void test_ServerVersionTooNew(void); +extern void test_NonWantedMode(void); +extern void test_KoDRate(void); +extern void test_KoDDeny(void); +extern void test_RejectUnsyncedServer(void); +extern void test_RejectWrongResponseServerMode(void); +extern void test_AcceptNoSentPacketBroadcastMode(void); +extern void test_CorrectUnauthenticatedPacket(void); +extern void test_CorrectAuthenticatedPacketMD5(void); +extern void test_CorrectAuthenticatedPacketSHA1(void); + + +//=======Test Reset Option===== +void resetTest() +{ + tearDown(); + setUp(); +} + +char *progname; + + +//=======MAIN===== +int main(int argc, char *argv[]) +{ + progname = argv[0]; + Unity.TestFile = "packetProcessing.c"; + UnityBegin("packetProcessing.c"); + RUN_TEST(test_TooShortLength, 76); + RUN_TEST(test_LengthNotMultipleOfFour, 85); + RUN_TEST(test_TooShortExtensionFieldLength, 94); + RUN_TEST(test_UnauthenticatedPacketReject, 110); + //RUN_TEST(test_CryptoNAKPacketReject, 123); + RUN_TEST(test_AuthenticatedPacketInvalid, 135); + RUN_TEST(test_AuthenticatedPacketUnknownKey, 158); + RUN_TEST(test_ServerVersionTooOld, 178); + RUN_TEST(test_ServerVersionTooNew, 193); + RUN_TEST(test_NonWantedMode, 208); + RUN_TEST(test_KoDRate, 223); + RUN_TEST(test_KoDDeny, 234); + RUN_TEST(test_RejectUnsyncedServer, 245); + RUN_TEST(test_RejectWrongResponseServerMode, 257); + RUN_TEST(test_AcceptNoSentPacketBroadcastMode, 274); + RUN_TEST(test_CorrectUnauthenticatedPacket, 286); + RUN_TEST(test_CorrectAuthenticatedPacketMD5, 294); + RUN_TEST(test_CorrectAuthenticatedPacketSHA1, 314); + + return (UnityEnd()); +}