| diff --git a/src/arping_test.c b/src/arping_test.c |
| index 438670b..0133fe7 100644 |
| --- a/src/arping_test.c |
| +++ b/src/arping_test.c |
| @@ -40,35 +40,10 @@ extern libnet_t* libnet; |
| extern int mock_libnet_lo_ok; |
| extern int mock_libnet_null_ok; |
| |
| -struct registered_test { |
| - void* fn; |
| - const char* name; |
| -}; |
| - |
| -static int numtests = 0; |
| -static struct registered_test test_registry[1024]; |
| - |
| -static int num_exit_tests = 0; |
| -static struct registered_test test_exit_registry[1024]; |
| - |
| int get_mac_addr(const char *in, char *out); |
| void strip_newline(char* s); |
| |
| |
| -#define MYTEST(a) static void a(int);__attribute__((constructor)) \ |
| -static void cons_##a() { \ |
| - test_registry[numtests].fn = a; \ |
| - test_registry[numtests].name = #a; \ |
| - numtests++; \ |
| -} START_TEST(a) |
| - |
| -#define MY_EXIT_TEST(a) static void a(int);__attribute__((constructor)) \ |
| -static void cons_##a() { \ |
| - test_exit_registry[num_exit_tests].fn = a; \ |
| - test_exit_registry[num_exit_tests].name = #a; \ |
| - num_exit_tests++; \ |
| -} START_TEST(a) |
| - |
| /** |
| * |
| */ |
| @@ -236,7 +211,7 @@ dump_packet(uint8_t* packet, int len) |
| fprintf(stderr, "\n"); |
| } |
| |
| -MYTEST(test_mkpacket) |
| +START_TEST(test_mkpacket) |
| { |
| uint8_t correct_packet[] = { |
| 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, |
| @@ -261,7 +236,7 @@ MYTEST(test_mkpacket) |
| |
| |
| // Received uninteresting packet, should not record anything. |
| -MYTEST(pingip_uninteresting_packet) |
| +START_TEST(pingip_uninteresting_packet) |
| { |
| struct pcap_pkthdr pkthdr; |
| uint8_t* packet; |
| @@ -389,7 +364,7 @@ MYTEST(pingip_uninteresting_packet) |
| } END_TEST |
| |
| // Received reply that actually matches. Things should happen. |
| -MYTEST(pingip_interesting_packet) |
| +START_TEST(pingip_interesting_packet) |
| { |
| struct pcap_pkthdr pkthdr; |
| extern uint8_t srcmac[ETH_ALEN]; |
| @@ -449,7 +424,7 @@ MYTEST(pingip_interesting_packet) |
| "numrecvd not incremented second time"); |
| } END_TEST |
| |
| -MYTEST(strip_newline_test) |
| +START_TEST(strip_newline_test) |
| { |
| const char *tests[][2] = { |
| {"", ""}, |
| @@ -469,7 +444,7 @@ MYTEST(strip_newline_test) |
| } |
| } END_TEST |
| |
| -MYTEST(get_mac_addr_success) |
| +START_TEST(get_mac_addr_success) |
| { |
| const char *tests[][2] = { |
| // Null. |
| @@ -501,7 +476,7 @@ MYTEST(get_mac_addr_success) |
| } |
| } END_TEST |
| |
| -MYTEST(get_mac_addr_fail) |
| +START_TEST(get_mac_addr_fail) |
| { |
| const char *tests[] = { |
| "", |
| @@ -517,7 +492,7 @@ MYTEST(get_mac_addr_fail) |
| } |
| } END_TEST |
| |
| -MY_EXIT_TEST(libnet_init_bad_nolo) |
| +START_TEST(libnet_init_bad_nolo) |
| { |
| // It'll only try lo if named interface fails. |
| // So by accepting lo, we make sure it doesn't try lo. |
| @@ -525,27 +500,28 @@ MY_EXIT_TEST(libnet_init_bad_nolo) |
| do_libnet_init("bad", 0); |
| } END_TEST |
| |
| -MY_EXIT_TEST(libnet_init_null_nolo_nonull) |
| +START_TEST(libnet_init_null_nolo_nonull) |
| { |
| mock_libnet_lo_ok = 0; |
| mock_libnet_null_ok = 0; |
| do_libnet_init(NULL, 0); |
| } END_TEST |
| |
| -MYTEST(libnet_init_good) |
| +START_TEST(libnet_init_good) |
| { |
| mock_libnet_lo_ok = 0; // Don't even try falling back to lo. |
| do_libnet_init("good", 0); |
| fail_if(libnet == NULL); |
| } END_TEST |
| |
| -MYTEST(libnet_init_null_nolo) |
| +START_TEST(libnet_init_null_nolo) |
| { |
| mock_libnet_lo_ok = 0; |
| mock_libnet_null_ok = 1; |
| do_libnet_init(NULL, 0); |
| fail_if(libnet == NULL); |
| -} END_TEST |
| +} |
| +END_TEST |
| |
| static Suite* |
| arping_suite(void) |
| @@ -553,17 +529,34 @@ arping_suite(void) |
| int c; |
| Suite* s = suite_create("Arping"); |
| |
| - //tcase_add_checked_fixture (tc_core, setup, teardown); |
| - for (c = 0; c < numtests; c++) { |
| - TCase *tc_core = tcase_create(test_registry[c].name); |
| - tcase_add_test(tc_core, test_registry[c].fn); |
| - suite_add_tcase(s, tc_core); |
| - } |
| - for (c = 0; c < num_exit_tests; c++) { |
| - TCase *tc_core = tcase_create(test_exit_registry[c].name); |
| - tcase_add_exit_test(tc_core, test_exit_registry[c].fn, 1); |
| - suite_add_tcase(s, tc_core); |
| - } |
| + |
| + TCase *tc_core; |
| + |
| + // libcheck broke test registries, so have to resort to code duplication. :-( |
| + // https://github.com/libcheck/check/pull/158/files |
| +#define SIGH_LIBCHECK(tn) \ |
| + tc_core = tcase_create(#tn); \ |
| + tcase_add_test(tc_core, tn); \ |
| + suite_add_tcase(s, tc_core); |
| + |
| + SIGH_LIBCHECK(libnet_init_null_nolo); |
| + SIGH_LIBCHECK(test_mkpacket); |
| + SIGH_LIBCHECK(pingip_uninteresting_packet); |
| + SIGH_LIBCHECK(pingip_interesting_packet); |
| + SIGH_LIBCHECK(strip_newline_test); |
| + SIGH_LIBCHECK(get_mac_addr_success); |
| + SIGH_LIBCHECK(get_mac_addr_fail); |
| + SIGH_LIBCHECK(libnet_init_good); |
| + |
| + |
| +#define SIGH_LIBCHECK_EXIT(tn) \ |
| + tc_core = tcase_create(#tn); \ |
| + tcase_add_exit_test(tc_core, tn, 1); \ |
| + suite_add_tcase(s, tc_core); |
| + |
| + SIGH_LIBCHECK_EXIT(libnet_init_bad_nolo); |
| + SIGH_LIBCHECK_EXIT(libnet_init_null_nolo_nonull); |
| + |
| return s; |
| } |
| |
| @@ -577,6 +570,7 @@ main() |
| number_failed = srunner_ntests_failed (sr); |
| srunner_free (sr); |
| return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE; |
| + return 0; |
| } |
| /* ---- Emacs Variables ---- |
| * Local Variables: |