]> git.ipfire.org Git - thirdparty/ntp.git/commitdiff
Wrote tests for ntpd/ntp_restrict.c
authorTomek Mrugalski <tomasz@isc.org>
Thu, 23 Jul 2015 17:19:08 +0000 (19:19 +0200)
committerTomek Mrugalski <tomasz@isc.org>
Thu, 23 Jul 2015 17:19:08 +0000 (19:19 +0200)
ntp_restrict.c, run-ntp_restrict.c:
  new file
Makefile.am:
  added ntp_restrict.c test
ntp_restrict.c:
  added assertions (I prefer them to a segfault)

bk: 55b1220cZjqnvqfhuXQ_3lJVhwGGMw

ntpd/ntp_restrict.c
tests/ntpd/Makefile.am
tests/ntpd/ntp_restrict.c [new file with mode: 0644]
tests/ntpd/run-ntp_restrict.c [new file with mode: 0644]

index 9cc9248979ac4c5b27cfc5ef6be4eae08524ed9d..82bbaef257418a9c346f4bd18a9aa3f8590e1704 100644 (file)
@@ -435,6 +435,9 @@ restrictions(
 
                match = match_restrict4_addr(SRCADR(srcadr),
                                             SRCPORT(srcadr));
+
+               INSIST(match != NULL);
+
                match->count++;
                /*
                 * res_not_found counts only use of the final default
@@ -461,6 +464,7 @@ restrictions(
                        return (int)RES_IGNORE;
 
                match = match_restrict6_addr(pin6, SRCPORT(srcadr));
+               INSIST(match != NULL);
                match->count++;
                if (&restrict_def6 == match)
                        res_not_found++;
@@ -651,10 +655,12 @@ restrict_source(
         */
        if (IS_IPV4(addr)) {
                res = match_restrict4_addr(SRCADR(addr), SRCPORT(addr));
+               INSIST(res != NULL);
                found_specific = (SRCADR(&onesmask) == res->u.v4.mask);
        } else {
                res = match_restrict6_addr(&SOCK_ADDR6(addr),
                                           SRCPORT(addr));
+               INSIST(res != NULL);
                found_specific = ADDR6_EQ(&res->u.v6.mask,
                                          &SOCK_ADDR6(&onesmask));
        }
index 2ec47f250d8d80dea2f5f0532448e512812c89cd..edfb8fdd03bfca563e4a511a2275daa4523332d3 100644 (file)
@@ -7,6 +7,7 @@ run_unity =     cd $(srcdir) && ruby ../../sntp/unity/auto/generate_test_runner.rb
 check_PROGRAMS =               \
        test-leapsec            \
        test-ntp_prio_q         \
+       test-ntp_restrict       \
        test-rc_cmdlength   \
        $(NULL)
 
@@ -50,6 +51,7 @@ tests_SOURCES = $(top_srcdir)/sntp/tests_main.cpp     \
                g_ntpdtest.cpp          \
                $(top_srcdir)/ntpd/ntp_leapsec.c        \
                $(top_srcdir)/ntpd/ntp_prio_q.c         \
+               $(top_srcdir)/ntpd/ntp_restrict.c       \
                $(top_srcdir)/ntpd/rc_cmdlength.c       \
                g_leapsec.cpp   \
                $(NULL)
@@ -57,6 +59,7 @@ tests_SOURCES = $(top_srcdir)/sntp/tests_main.cpp     \
 BUILT_SOURCES +=                       \
        $(srcdir)/run-leapsec.c         \
        $(srcdir)/run-ntp_prio_q.c      \
+       $(srcdir)/run-ntp_restrict.c    \
        $(srcdir)/run-rc_cmdlength.c            \
        $(NULL)
 
@@ -104,6 +107,25 @@ $(srcdir)/run-ntp_prio_q.c: $(srcdir)/ntp_prio_q.c $(std_unity_list)
        $(run_unity) ntp_prio_q.c run-ntp_prio_q.c
 
 
+###
+test_ntp_restrict_CFLAGS =                     \
+       -I$(top_srcdir)/sntp/unity      \
+       $(NULL)
+
+test_ntp_restrict_LDADD =                      \
+       $(unity_tests_LDADD)            \
+       $(NULL)
+
+test_ntp_restrict_SOURCES =                    \
+       ntp_restrict.c                  \
+       run-ntp_restrict.c                      \
+       $(srcdir)/../libntp/test-libntp.c               \
+       $(NULL)
+
+$(srcdir)/run-ntp_restrict.c: $(srcdir)/ntp_restrict.c $(std_unity_list)
+       $(run_unity) ntp_restrict.c run-ntp_restrict.c
+
+
 ###
 test_rc_cmdlength_CFLAGS =                     \
        -I$(top_srcdir)/sntp/unity      \
@@ -159,5 +181,8 @@ check-libunity: ../../sntp/unity/libunity.a
 $(top_builddir)/ntpd/ntpdsim-ntp_prio_q.o:
        cd ../../ntpd/ && $(MAKE) $(AM_MAKEFLAGS) ntpdsim-ntp_prio_q.o
 
+#$(top_builddir)/ntpd/ntpdsim-ntp_restrict.o:
+#      cd ../../ntpd/ && $(MAKE) $(AM_MAKEFLAGS) ntpdsim-ntp_restrict.o
+
 include $(top_srcdir)/depsver.mf
 include $(top_srcdir)/includes.mf
diff --git a/tests/ntpd/ntp_restrict.c b/tests/ntpd/ntp_restrict.c
new file mode 100644 (file)
index 0000000..285b5b2
--- /dev/null
@@ -0,0 +1,185 @@
+#include "config.h"
+
+#include "ntpd.h"
+#include "ntp_lists.h"
+
+#include "unity.h"
+
+/* Helper functions */
+
+sockaddr_u
+create_sockaddr_u(short sin_family, unsigned short sin_port, char* ip_addr) {
+       sockaddr_u sockaddr;
+
+       sockaddr.sa4.sin_family = AF_INET;
+       sockaddr.sa4.sin_port = htons(sin_port);
+       memset(sockaddr.sa4.sin_zero, 0, 8);
+       sockaddr.sa4.sin_addr.s_addr = inet_addr(ip_addr);
+
+       return sockaddr;
+}
+
+
+void
+setUp(void) {
+       init_restrict();
+}
+
+
+tearDown(void) {
+       restrict_u *empty_restrict = malloc(sizeof(restrict_u));
+       memset(empty_restrict, 0, sizeof(restrict_u));
+
+       restrict_u *current;
+
+       do {
+               UNLINK_HEAD_SLIST(current, restrictlist4, link);
+               if (current != NULL)
+               {
+                       *current = *empty_restrict;
+               }
+       } while (current != NULL);
+
+       do {
+               UNLINK_HEAD_SLIST(current, restrictlist6, link);
+               if (current != NULL)
+               {
+                       *current = *empty_restrict;
+               }
+       } while (current != NULL);
+
+       free(empty_restrict);
+}
+
+
+/* Tests */
+
+
+void
+test_RestrictionsAreEmptyAfterInit(void) {
+
+       restrict_u *rl4 = malloc(sizeof(restrict_u));
+       restrict_u *rl6 = malloc(sizeof(restrict_u));
+
+       memset(rl4, 0, sizeof(restrict_u));
+       memset(rl6, 0, sizeof(restrict_u));
+
+       TEST_ASSERT_EQUAL(rl4->count, restrictlist4->count);
+       TEST_ASSERT_EQUAL(rl4->flags, restrictlist4->flags);
+       TEST_ASSERT_EQUAL(rl4->mflags, restrictlist4->mflags);
+       TEST_ASSERT_EQUAL(rl4->expire, restrictlist4->expire);
+       TEST_ASSERT_EQUAL(rl4->u.v4.addr, restrictlist4->u.v4.addr);
+       TEST_ASSERT_EQUAL(rl4->u.v4.mask, restrictlist4->u.v4.mask);
+
+       TEST_ASSERT_EQUAL(rl6->count, restrictlist6->count);
+       TEST_ASSERT_EQUAL(rl6->flags, restrictlist6->flags);
+       TEST_ASSERT_EQUAL(rl6->mflags, restrictlist6->mflags);
+       TEST_ASSERT_EQUAL(rl6->expire, restrictlist6->expire);
+
+       free(rl4);
+       free(rl6);
+}
+
+
+void
+test_ReturnsCorrectDefaultRestrictions(void) {
+       sockaddr_u sockaddr = create_sockaddr_u(AF_INET,
+               54321, "63.161.169.137");
+
+       u_short retval = restrictions(&sockaddr);
+
+       TEST_ASSERT_EQUAL(0, retval);
+}
+
+
+void
+test_HackingDefaultRestriction(void) {
+       /*
+       *       We change the flag of the default restriction,
+       *       and check if restriction() returns that flag
+       */
+
+       const u_short flags = 42;
+
+       sockaddr_u resaddr = create_sockaddr_u(AF_INET,
+               54321, "0.0.0.0");
+       sockaddr_u resmask = create_sockaddr_u(AF_INET,
+               54321, "0.0.0.0");
+
+       hack_restrict(RESTRICT_FLAGS, &resaddr, &resmask, 0, flags, 0);
+
+       sockaddr_u sockaddr = create_sockaddr_u(AF_INET,
+               54321, "111.123.251.124");
+
+       TEST_ASSERT_EQUAL(flags, restrictions(&sockaddr));
+}
+
+
+void
+test_CantRemoveDefaultEntry(void) {
+       sockaddr_u resaddr = create_sockaddr_u(AF_INET, 54321, "0.0.0.0");
+       sockaddr_u resmask = create_sockaddr_u(AF_INET, 54321, "0.0.0.0");
+
+       hack_restrict(RESTRICT_REMOVE, &resaddr, &resmask, 0, 0, 0);
+
+       TEST_ASSERT_EQUAL(0, restrictions(&resaddr));
+}
+
+
+void
+test_AddingNewRestriction(void) {
+       sockaddr_u resaddr = create_sockaddr_u(AF_INET, 54321, "11.22.33.44");
+       sockaddr_u resmask = create_sockaddr_u(AF_INET, 54321, "128.0.0.0");
+
+       const u_short flags = 42;
+
+       hack_restrict(RESTRICT_FLAGS, &resaddr, &resmask, 0, flags, 0);
+
+       TEST_ASSERT_EQUAL(flags, restrictions(&resaddr));
+}
+
+
+void
+test_TheMostFittingRestrictionIsMatched(void) {
+       sockaddr_u resaddr = create_sockaddr_u(AF_INET, 54321, "11.22.33.44");
+
+       sockaddr_u resaddr_not_matching = create_sockaddr_u(AF_INET, 54321, "11.99.33.44");
+       sockaddr_u resmask_not_matching = create_sockaddr_u(AF_INET, 54321, "255.255.0.0");
+
+       sockaddr_u resaddr_best_match = create_sockaddr_u(AF_INET, 54321, "11.22.30.20");
+       sockaddr_u resmask_best_match = create_sockaddr_u(AF_INET, 54321, "255.255.0.0");
+
+       /* it also matches, but we prefer the one above, as it's more specific */
+       sockaddr_u resaddr_second_match = create_sockaddr_u(AF_INET, 54321, "11.99.33.44");
+       sockaddr_u resmask_second_match = create_sockaddr_u(AF_INET, 54321, "255.0.0.0");
+
+       hack_restrict(RESTRICT_FLAGS, &resaddr_not_matching, &resmask_not_matching, 0, 11, 0);
+       hack_restrict(RESTRICT_FLAGS, &resaddr_best_match, &resmask_best_match, 0, 22, 0);
+       hack_restrict(RESTRICT_FLAGS, &resaddr_second_match, &resmask_second_match, 0, 128, 0);
+
+       TEST_ASSERT_EQUAL(22, restrictions(&resaddr));
+}
+
+
+void
+test_DeletedRestrictionIsNotMatched(void) {
+       sockaddr_u resaddr = create_sockaddr_u(AF_INET, 54321, "11.22.33.44");
+
+       sockaddr_u resaddr_not_matching = create_sockaddr_u(AF_INET, 54321, "11.99.33.44");
+       sockaddr_u resmask_not_matching = create_sockaddr_u(AF_INET, 54321, "255.255.0.0");
+
+       sockaddr_u resaddr_best_match = create_sockaddr_u(AF_INET, 54321, "11.22.30.20");
+       sockaddr_u resmask_best_match = create_sockaddr_u(AF_INET, 54321, "255.255.0.0");
+
+       sockaddr_u resaddr_second_match = create_sockaddr_u(AF_INET, 54321, "11.99.33.44");
+       sockaddr_u resmask_second_match = create_sockaddr_u(AF_INET, 54321, "255.0.0.0");
+
+       hack_restrict(RESTRICT_FLAGS, &resaddr_not_matching, &resmask_not_matching, 0, 11, 0);
+       hack_restrict(RESTRICT_FLAGS, &resaddr_best_match, &resmask_best_match, 0, 22, 0);
+       hack_restrict(RESTRICT_FLAGS, &resaddr_second_match, &resmask_second_match, 0, 128, 0);
+
+       /* deleting the best match*/
+       hack_restrict(RESTRICT_REMOVE, &resaddr_best_match, &resmask_best_match, 0, 22, 0);
+
+       TEST_ASSERT_EQUAL(128, restrictions(&resaddr));
+}
diff --git a/tests/ntpd/run-ntp_restrict.c b/tests/ntpd/run-ntp_restrict.c
new file mode 100644 (file)
index 0000000..26b1ef6
--- /dev/null
@@ -0,0 +1,64 @@
+/* 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 <setjmp.h>
+#include <stdio.h>
+
+//=======External Functions This Runner Calls=====
+extern void setUp(void);
+extern void tearDown(void);
+void resetTest(void);
+extern void test_RestrictionsAreEmptyAfterInit(void);
+extern void test_ReturnsCorrectDefaultRestrictions(void);
+extern void test_HackingDefaultRestriction(void);
+extern void test_CantRemoveDefaultEntry(void);
+extern void test_AddingNewRestriction(void);
+extern void test_TheMostFittingRestrictionIsMatched(void);
+extern void test_DeletedRestrictionIsNotMatched(void);
+
+
+//=======Test Reset Option=====
+void resetTest()
+{
+  tearDown();
+  setUp();
+}
+
+char *progname;
+
+
+//=======MAIN=====
+int main(int argc, char *argv[])
+{
+  progname = argv[0];
+  Unity.TestFile = "ntp_restrict.c";
+  UnityBegin("ntp_restrict.c");
+  RUN_TEST(test_RestrictionsAreEmptyAfterInit, 59);
+  RUN_TEST(test_ReturnsCorrectDefaultRestrictions, 85);
+  RUN_TEST(test_HackingDefaultRestriction, 96);
+  RUN_TEST(test_CantRemoveDefaultEntry, 119);
+  RUN_TEST(test_AddingNewRestriction, 130);
+  RUN_TEST(test_TheMostFittingRestrictionIsMatched, 143);
+  RUN_TEST(test_DeletedRestrictionIsNotMatched, 165);
+
+  return (UnityEnd());
+}