]> git.ipfire.org Git - thirdparty/ntp.git/commitdiff
wrote tests for ntpd/ntp_prio_q.c
authorTomek Mrugalski <tomasz@isc.org>
Mon, 13 Jul 2015 02:21:50 +0000 (04:21 +0200)
committerTomek Mrugalski <tomasz@isc.org>
Mon, 13 Jul 2015 02:21:50 +0000 (04:21 +0200)
Makefile.am:
  added ntp_prio_q.c
ntp_prio_q.c, run-ntp_prio_q.c:
  new file
ChangeLog:
  added info about the test of ntpd/ntp_prio_q.c

bk: 55a320beuxplE24zIrx2cCaAz8a3qg

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

index f7daafb791ea93d4eadf96281c9409cf1624875f..c05260ba829c2e9ab60920fa6ba77b4fcbfc2b15 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -77,6 +77,7 @@ fixed formatting. Tomasz Flendrich
 * Don't build sntp/libevent/sample/.  Harlan Stenn.
 * tests/libntp/test_caltontp needs -lpthread.  Harlan Stenn.
 * br-flock: --enable-local-libevent.  Harlan Stenn.
+* Wrote tests for ntpd/ntp_prio_q.c. Tomasz Flendrich
 ---
 (4.2.8p3) 2015/06/29 Released by Harlan Stenn <stenn@ntp.org>
 
index e7dfeb5fa2bb220d20612806b0f6e30a92d0af35..2ec47f250d8d80dea2f5f0532448e512812c89cd 100644 (file)
@@ -6,6 +6,7 @@ run_unity =     cd $(srcdir) && ruby ../../sntp/unity/auto/generate_test_runner.rb
 
 check_PROGRAMS =               \
        test-leapsec            \
+       test-ntp_prio_q         \
        test-rc_cmdlength   \
        $(NULL)
 
@@ -48,12 +49,14 @@ AM_LDFLAGS = $(LDFLAGS_NTP)
 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/rc_cmdlength.c       \
                g_leapsec.cpp   \
                $(NULL)
 
 BUILT_SOURCES +=                       \
        $(srcdir)/run-leapsec.c         \
+       $(srcdir)/run-ntp_prio_q.c      \
        $(srcdir)/run-rc_cmdlength.c            \
        $(NULL)
 
@@ -80,6 +83,27 @@ test_leapsec_SOURCES =                       \
 $(srcdir)/run-leapsec.c: $(srcdir)/leapsec.c $(std_unity_list)
        $(run_unity) leapsec.c run-leapsec.c
 
+
+###
+test_ntp_prio_q_CFLAGS =                       \
+       -I$(top_srcdir)/sntp/unity      \
+       $(NULL)
+
+test_ntp_prio_q_LDADD =                        \
+       $(unity_tests_LDADD)            \
+       ../../ntpd/ntpdsim-ntp_prio_q.o         \
+       $(NULL)
+
+test_ntp_prio_q_SOURCES =                      \
+       ntp_prio_q.c                    \
+       run-ntp_prio_q.c                        \
+       $(srcdir)/../libntp/test-libntp.c               \
+       $(NULL)
+
+$(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_rc_cmdlength_CFLAGS =                     \
        -I$(top_srcdir)/sntp/unity      \
@@ -99,6 +123,7 @@ $(srcdir)/run-rc_cmdlength.c: $(srcdir)/rc_cmdlength.c $(std_unity_list)
        $(run_unity) rc_cmdlength.c run-rc_cmdlength.c
 
 
+
 TESTS =
 
 if !NTP_CROSSCOMPILE
@@ -131,5 +156,8 @@ check-libunity: ../../sntp/unity/libunity.a
 ../../sntp/unity/libunity.a:
        cd ../../sntp/unity && $(MAKE) $(AM_MAKEFLAGS) libunity.a
 
+$(top_builddir)/ntpd/ntpdsim-ntp_prio_q.o:
+       cd ../../ntpd/ && $(MAKE) $(AM_MAKEFLAGS) ntpdsim-ntp_prio_q.o
+
 include $(top_srcdir)/depsver.mf
 include $(top_srcdir)/includes.mf
diff --git a/tests/ntpd/ntp_prio_q.c b/tests/ntpd/ntp_prio_q.c
new file mode 100644 (file)
index 0000000..cd07c23
--- /dev/null
@@ -0,0 +1,261 @@
+#include "config.h"
+
+#include "ntp.h"
+#include "ntp_calendar.h"
+#include "ntp_stdlib.h"
+
+#include "ntp_prio_q.h"
+
+#include "unity.h"
+
+
+
+#include <string.h>
+/*
+TODO:
+-fix the includes
+-makefile: ntpdsim-ntp_prio_q.o - make sure it's okay
+*/
+
+
+/* helpers */
+
+typedef struct Element
+{
+       char str[37]; // 37 seems like a nice candidate to break stuff
+       int number;
+
+} element;
+
+int
+compare_elements(const void * e1, const void * e2)
+{
+       return ((element*)e1)->number < ((element*)e2)->number;
+}
+
+/* tests */
+
+void
+test_AllocateDeallocateNode(void) {
+       element* e_ptr = debug_get_node(sizeof(element));
+       free_node(e_ptr);
+}
+
+
+void
+test_EmptyQueue(void) {
+       queue* q = create_queue();
+
+       TEST_ASSERT_NOT_NULL(q);
+       TEST_ASSERT_TRUE(empty(q));
+       TEST_ASSERT_NULL(queue_head(q));
+       TEST_ASSERT_NULL(dequeue(q));
+       TEST_ASSERT_EQUAL(0, get_no_of_elements(q));
+
+       destroy_queue(q);
+}
+
+
+void
+test_OneElementQueue(void) {
+       queue* q = create_queue();
+
+       TEST_ASSERT_NOT_NULL(q);
+
+       element e = {"string", 3};
+       element* e_ptr = debug_get_node(sizeof(element));
+       enqueue(q, e_ptr);
+       *e_ptr = e;
+
+       TEST_ASSERT_FALSE(empty(q));
+       TEST_ASSERT_NOT_NULL(queue_head(q));
+       TEST_ASSERT_EQUAL(1, get_no_of_elements(q));
+
+       element* e_ptr_returned = dequeue(q);
+
+       TEST_ASSERT_NOT_NULL(e_ptr_returned);
+       TEST_ASSERT_EQUAL_STRING(e_ptr_returned->str, "string");
+       TEST_ASSERT_EQUAL_PTR(e_ptr_returned, e_ptr);
+       TEST_ASSERT_EQUAL(0, get_no_of_elements(q));
+       TEST_ASSERT_TRUE(empty(q));
+       TEST_ASSERT_NULL(dequeue(q));
+
+       destroy_queue(q);
+}
+
+
+void
+test_MultipleElementQueue(void) {
+       queue* q = create_queue();
+
+       TEST_ASSERT_NOT_NULL(q);
+
+       element *e1_ptr, *e2_ptr, *e3_ptr;
+
+       e1_ptr = (element*)debug_get_node(sizeof(element));
+       e2_ptr = (element*)debug_get_node(sizeof(element));
+       e3_ptr = (element*)debug_get_node(sizeof(element));
+
+       enqueue(q, e1_ptr);
+       enqueue(q, e2_ptr);
+       enqueue(q, e3_ptr);
+
+       TEST_ASSERT_EQUAL(3, get_no_of_elements(q));
+
+       dequeue(q);
+       enqueue(q, e1_ptr);
+
+       TEST_ASSERT_EQUAL(3, get_no_of_elements(q));
+
+       dequeue(q);
+       dequeue(q);
+       enqueue(q, e3_ptr);
+       enqueue(q, e2_ptr);
+
+       TEST_ASSERT_EQUAL_PTR(dequeue(q), e1_ptr);
+       TEST_ASSERT_EQUAL_PTR(dequeue(q), e3_ptr);
+       TEST_ASSERT_EQUAL_PTR(dequeue(q), e2_ptr);
+       TEST_ASSERT_EQUAL(0, get_no_of_elements(q));
+       TEST_ASSERT_NULL(dequeue(q));
+
+       destroy_queue(q);
+}
+
+
+void
+test_CustomOrderQueue(void) {
+       queue* q = debug_create_priority_queue(compare_elements);
+       element *e1_ptr, *e2_ptr, *e3_ptr, *e4_ptr, *e5_ptr, *e6_ptr;
+
+       e1_ptr = (element*)debug_get_node(sizeof(element));
+       e2_ptr = (element*)debug_get_node(sizeof(element));
+       e3_ptr = (element*)debug_get_node(sizeof(element));
+       e4_ptr = (element*)debug_get_node(sizeof(element));
+       e5_ptr = (element*)debug_get_node(sizeof(element));
+       e6_ptr = (element*)debug_get_node(sizeof(element));
+
+       e1_ptr->number = 1;
+       e2_ptr->number = 1;
+       e3_ptr->number = 10;
+       e4_ptr->number = 10;
+       e5_ptr->number = 100;
+       e6_ptr->number = 100;
+
+       enqueue(q, e3_ptr);
+       enqueue(q, e5_ptr);
+       enqueue(q, e2_ptr);
+       enqueue(q, e1_ptr);
+       enqueue(q, e4_ptr);
+       enqueue(q, e6_ptr);
+
+       TEST_ASSERT_EQUAL(((element*)queue_head(q))->number, 100);
+       TEST_ASSERT_EQUAL(((element*)dequeue(q))->number, 100);
+
+       TEST_ASSERT_EQUAL(((element*)queue_head(q))->number, 100);
+       TEST_ASSERT_EQUAL(((element*)dequeue(q))->number, 100);
+
+       TEST_ASSERT_EQUAL(((element*)queue_head(q))->number, 10);
+       TEST_ASSERT_EQUAL(((element*)dequeue(q))->number, 10);
+
+       TEST_ASSERT_EQUAL(((element*)queue_head(q))->number, 10);
+       TEST_ASSERT_EQUAL(((element*)dequeue(q))->number, 10);
+
+       TEST_ASSERT_EQUAL(((element*)queue_head(q))->number, 1);
+       TEST_ASSERT_EQUAL(((element*)dequeue(q))->number, 1);
+
+       TEST_ASSERT_EQUAL(((element*)queue_head(q))->number, 1);
+       TEST_ASSERT_EQUAL(((element*)dequeue(q))->number, 1);
+
+       TEST_ASSERT_TRUE(empty(q));
+
+       destroy_queue(q);
+
+       free_node(e1_ptr);
+       free_node(e2_ptr);
+       free_node(e3_ptr);
+       free_node(e4_ptr);
+       free_node(e5_ptr);
+       free_node(e6_ptr);
+}
+
+
+void
+test_DestroyNonEmptyQueue(void) {
+       queue* q = create_queue();
+       element *e1_ptr, *e2_ptr, *e3_ptr, *e4_ptr, *e5_ptr, *e6_ptr;
+
+       e1_ptr = (element*)debug_get_node(sizeof(element));
+       e2_ptr = (element*)debug_get_node(sizeof(element));
+       e3_ptr = (element*)debug_get_node(sizeof(element));
+       e4_ptr = (element*)debug_get_node(sizeof(element));
+       e5_ptr = (element*)debug_get_node(sizeof(element));
+       e6_ptr = (element*)debug_get_node(sizeof(element));
+
+       enqueue(q, e3_ptr);
+       enqueue(q, e2_ptr);
+       enqueue(q, e4_ptr);
+       enqueue(q, e1_ptr);
+       enqueue(q, e6_ptr);
+       enqueue(q, e5_ptr);
+
+       destroy_queue(q);
+}
+
+void
+test_AppendQueues(void) {
+       queue* q1 = create_queue();
+       queue* q2 = create_queue();
+       queue* q3 = create_queue();
+       queue* q4 = create_queue();
+       queue* q5 = create_queue();
+
+       // append empty queue to empty queue
+       append_queue(q1, q2);
+
+       element *e1_ptr, *e2_ptr, *e3_ptr, *e4_ptr, *e5_ptr, *e6_ptr;
+       e1_ptr = (element*)debug_get_node(sizeof(element));
+       e2_ptr = (element*)debug_get_node(sizeof(element));
+       e3_ptr = (element*)debug_get_node(sizeof(element));
+       e4_ptr = (element*)debug_get_node(sizeof(element));
+       e5_ptr = (element*)debug_get_node(sizeof(element));
+       e6_ptr = (element*)debug_get_node(sizeof(element));
+
+       enqueue(q1, e1_ptr);
+       enqueue(q1, e2_ptr);
+       enqueue(q1, e3_ptr);
+
+
+       // append empty queue to non empty queue
+       append_queue(q1, q3);
+       TEST_ASSERT_EQUAL(3, get_no_of_elements(q1));
+
+       // append non empty queue to empty queue
+       append_queue(q4, q1);
+       TEST_ASSERT_EQUAL(3, get_no_of_elements(q4));
+
+       enqueue(q5, e4_ptr);
+       enqueue(q5, e5_ptr);
+
+       // append non empty queue to non empty queue
+       append_queue(q4, q5);
+       TEST_ASSERT_EQUAL(5, get_no_of_elements(q4));
+
+       dequeue(q4);
+       dequeue(q4);
+       dequeue(q4);
+       dequeue(q4);
+       dequeue(q4);
+
+       free_node(e1_ptr);
+       free_node(e2_ptr);
+       free_node(e3_ptr);
+       free_node(e4_ptr);
+       free_node(e5_ptr);
+
+       TEST_ASSERT_EQUAL(0, get_no_of_elements(q4));
+
+       destroy_queue(q1);
+       destroy_queue(q2);
+       destroy_queue(q3);
+       destroy_queue(q4);
+}
diff --git a/tests/ntpd/run-ntp_prio_q.c b/tests/ntpd/run-ntp_prio_q.c
new file mode 100644 (file)
index 0000000..dc33e07
--- /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_AllocateDeallocateNode(void);
+extern void test_EmptyQueue(void);
+extern void test_OneElementQueue(void);
+extern void test_MultipleElementQueue(void);
+extern void test_CustomOrderQueue(void);
+extern void test_DestroyNonEmptyQueue(void);
+extern void test_AppendQueues(void);
+
+
+//=======Test Reset Option=====
+void resetTest()
+{
+  tearDown();
+  setUp();
+}
+
+char *progname;
+
+
+//=======MAIN=====
+int main(int argc, char *argv[])
+{
+  progname = argv[0];
+  Unity.TestFile = "ntp_prio_q.c";
+  UnityBegin("ntp_prio_q.c");
+  RUN_TEST(test_AllocateDeallocateNode, 39);
+  RUN_TEST(test_EmptyQueue, 46);
+  RUN_TEST(test_OneElementQueue, 60);
+  RUN_TEST(test_MultipleElementQueue, 88);
+  RUN_TEST(test_CustomOrderQueue, 126);
+  RUN_TEST(test_DestroyNonEmptyQueue, 183);
+  RUN_TEST(test_AppendQueues, 205);
+
+  return (UnityEnd());
+}