--- /dev/null
+#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));
+}
--- /dev/null
+/* 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());
+}