From 5e3ed6ef9f9d447a4ece18f79a4993c0630047c3 Mon Sep 17 00:00:00 2001 From: TheJackiMonster Date: Tue, 5 Oct 2021 16:30:13 +0200 Subject: Added header with macros to create efficient tests Signed-off-by: TheJackiMonster --- Makefile | 3 +- tests/test_gnunet_chat.h | 99 +++++++++++++++++++++++++++++++++++++++++ tests/test_gnunet_chat_handle.c | 44 +++++------------- 3 files changed, 111 insertions(+), 35 deletions(-) create mode 100644 tests/test_gnunet_chat.h diff --git a/Makefile b/Makefile index b124cbf..60c3c55 100644 --- a/Makefile +++ b/Makefile @@ -81,4 +81,5 @@ uninstall: clean: $(RM) -f $(LIBRARY) - $(RM) -f $(OBJECT_FILES) \ No newline at end of file + $(RM) -f $(OBJECT_FILES) + $(RM) -f $(TEST_CASES) \ No newline at end of file diff --git a/tests/test_gnunet_chat.h b/tests/test_gnunet_chat.h new file mode 100644 index 0000000..ba3c37e --- /dev/null +++ b/tests/test_gnunet_chat.h @@ -0,0 +1,99 @@ +/* + This file is part of GNUnet. + Copyright (C) 2021 GNUnet e.V. + + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later + */ +/* + * @author Tobias Frisch + * @file test_gnunet_chat.h + */ + +#ifndef TEST_GNUNET_CHAT_H_ +#define TEST_GNUNET_CHAT_H_ + +#include +#include + +#include + +#define CREATE_GNUNET_TEST(test_name, test_call) \ +void \ +task_##test_call (__attribute__ ((unused)) void *cls, \ + __attribute__ ((unused)) char *const *args, \ + __attribute__ ((unused)) const char *cfgfile, \ + const struct GNUNET_CONFIGURATION_Handle *cfg) \ +{ \ + test_call (cfg); \ +} \ + \ +START_TEST(test_name) \ +{ \ + enum GNUNET_GenericReturnValue result; \ + struct GNUNET_GETOPT_CommandLineOption options[] = { \ + GNUNET_GETOPT_OPTION_END \ + }; \ + \ + char *binary = #test_call; \ + char *const args [] = { binary }; \ + \ + result = GNUNET_PROGRAM_run( \ + 1, \ + args, \ + binary, \ + "", \ + options, \ + task_##test_call, \ + NULL \ + ); \ + \ + ck_assert(result == GNUNET_OK); \ +} \ +END_TEST + +#define START_SUITE(suite_name, suite_title) \ +Suite* suite_name (void) \ +{ \ + Suite *suite; \ + TCase *tcase; \ + \ + suite = suite_create(suite_title); + +#define ADD_TEST_TO_SUITE(test_name, test_title) \ + tcase = tcase_create(test_title); \ + tcase_add_test(tcase, test_name); \ + suite_add_tcase(suite, tcase); + +#define END_SUITE \ + return suite; \ +} + +#define MAIN_SUITE(suite_name, suite_check) \ +int main (void) \ +{ \ + int tests_failed; \ + SRunner *runner; \ + \ + runner = srunner_create(suite_name ()); \ + srunner_run_all(runner, suite_check); \ + \ + tests_failed = srunner_ntests_failed(runner); \ + srunner_free(runner); \ + \ + return (tests_failed == 0? EXIT_SUCCESS : EXIT_FAILURE); \ +} + +#endif /* TEST_GNUNET_CHAT_H_ */ diff --git a/tests/test_gnunet_chat_handle.c b/tests/test_gnunet_chat_handle.c index 2492590..ab0e44e 100644 --- a/tests/test_gnunet_chat_handle.c +++ b/tests/test_gnunet_chat_handle.c @@ -22,47 +22,23 @@ * @file test_gnunet_chat_handle.c */ -#include -#include +#include "test_gnunet_chat.h" -START_TEST(test_gnunet_chat_handle) +void +call_gnunet_chat_handle(const struct GNUNET_CONFIGURATION_Handle *cfg) { struct GNUNET_CHAT_Handle *handle; - handle = GNUNET_CHAT_start(NULL, "", "Test", NULL, NULL, NULL, NULL); - ck_assert_ptr_eq(handle, NULL); + handle = GNUNET_CHAT_start(cfg, "", "Test", NULL, NULL, NULL, NULL); + ck_assert_ptr_ne(handle, NULL); GNUNET_CHAT_stop(handle); } -END_TEST -Suite* handle_suite(void) -{ - Suite *suite; - TCase *test_case; - - suite = suite_create("Handle"); - - test_case = tcase_create("Start/Stop"); - tcase_add_test(test_case, test_gnunet_chat_handle); - suite_add_tcase(suite, test_case); - - return suite; -} +CREATE_GNUNET_TEST(test_gnunet_chat_handle, call_gnunet_chat_handle) -int main(void) -{ - int tests_failed; - - Suite *suite; - SRunner *suite_runner; - - suite = handle_suite(); - suite_runner = srunner_create(suite); +START_SUITE(handle_suite, "Handle") +ADD_TEST_TO_SUITE(test_gnunet_chat_handle, "Start/Stop") +END_SUITE - srunner_run_all(suite_runner, CK_NORMAL); - tests_failed = srunner_ntests_failed(suite_runner); - srunner_free(suite_runner); - - return (tests_failed == 0? EXIT_SUCCESS : EXIT_FAILURE); -} +MAIN_SUITE(handle_suite, CK_NORMAL) -- cgit v1.2.3