commit 5e3ed6ef9f9d447a4ece18f79a4993c0630047c3
parent c18988ad59fa8a6653e73abd4b420bd21e9bb2fb
Author: TheJackiMonster <thejackimonster@gmail.com>
Date: Tue, 5 Oct 2021 16:30:13 +0200
Added header with macros to create efficient tests
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
Diffstat:
3 files changed, 112 insertions(+), 36 deletions(-)
diff --git 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
@@ -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 <http://www.gnu.org/licenses/>.
+
+ 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 <stdlib.h>
+#include <check.h>
+
+#include <gnunet/gnunet_chat_lib.h>
+
+#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
@@ -22,47 +22,23 @@
* @file test_gnunet_chat_handle.c
*/
-#include <check.h>
-#include <gnunet/gnunet_chat_lib.h>
+#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)