From: Tomek Mrugalski Date: Mon, 13 Jul 2015 02:21:50 +0000 (+0200) Subject: wrote tests for ntpd/ntp_prio_q.c X-Git-Tag: NTP_4_3_65~7^2~10 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fe00d033510d56c1eeb53aaca204ccb28e14c64c;p=thirdparty%2Fntp.git wrote tests for ntpd/ntp_prio_q.c 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 --- diff --git a/ChangeLog b/ChangeLog index f7daafb79..c05260ba8 100644 --- 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 diff --git a/tests/ntpd/Makefile.am b/tests/ntpd/Makefile.am index e7dfeb5fa..2ec47f250 100644 --- a/tests/ntpd/Makefile.am +++ b/tests/ntpd/Makefile.am @@ -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 index 000000000..cd07c23e7 --- /dev/null +++ b/tests/ntpd/ntp_prio_q.c @@ -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 +/* +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 index 000000000..dc33e0759 --- /dev/null +++ b/tests/ntpd/run-ntp_prio_q.c @@ -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 +#include + +//=======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()); +}