From c0da36c48d9878c7e90a796d97f5670fd686d7aa Mon Sep 17 00:00:00 2001 From: Steffen Jaeckel Date: Fri, 7 Mar 2025 19:03:10 +0100 Subject: [PATCH] Rage-cleanup. While trying to get the unit tests working again I stumbled over all those things that I thought could be better^TM. Now we also know "TODO: why does this make the test fail?" - because the unit tests are brittle AF ... and we have to init the subsystems we use in the test, otherwise the cleanup will fail... BTW. you can now also only run a single test ... or a pattern or so ... you'd have to read how `cmocka_set_test_filter()` works exactly. Signed-off-by: Steffen Jaeckel --- Makefile.am | 3 ++ src/command/cmd_ac.c | 1 + src/command/cmd_defs.c | 2 + src/log.c | 68 ++++++++++++++++++---------- src/plugins/api.c | 10 +--- src/plugins/callbacks.c | 8 +++- src/plugins/python_plugins.c | 13 ++---- src/profanity.c | 5 +- src/tools/autocomplete.c | 7 +-- src/ui/core.c | 5 +- src/ui/inputwin.c | 3 +- src/ui/statusbar.c | 4 +- src/ui/titlebar.c | 1 + src/ui/window_list.c | 3 ++ src/xmpp/avatar.c | 22 ++++++--- src/xmpp/chat_session.c | 8 ++-- src/xmpp/iq.c | 2 - src/xmpp/message.c | 18 +++++--- tests/unittests/helpers.c | 10 ++++ tests/unittests/test_callbacks.c | 11 ++--- tests/unittests/test_cmd_alias.c | 1 - tests/unittests/test_cmd_bookmark.c | 10 ---- tests/unittests/test_cmd_join.c | 8 ---- tests/unittests/test_muc.c | 1 - tests/unittests/test_server_events.c | 9 +--- tests/unittests/unittests.c | 16 +++++-- 26 files changed, 139 insertions(+), 110 deletions(-) diff --git a/Makefile.am b/Makefile.am index 5d5e38fd..99370e82 100644 --- a/Makefile.am +++ b/Makefile.am @@ -357,6 +357,9 @@ check-unit: tests/unittests/unittests format: $(all_c_sources) clang-format -i $(all_c_sources) +format-sources: $(core_sources) $(main_source) + clang-format -i $^ + spell: codespell diff --git a/src/command/cmd_ac.c b/src/command/cmd_ac.c index 3a4a4605..fbb6bb5a 100644 --- a/src/command/cmd_ac.c +++ b/src/command/cmd_ac.c @@ -1648,6 +1648,7 @@ cmd_ac_uninit(void) autocomplete_free(plugins_reload_ac); autocomplete_free(script_show_ac); g_hash_table_destroy(ac_funcs); + ac_funcs = NULL; } static void diff --git a/src/command/cmd_defs.c b/src/command/cmd_defs.c index d432cd0b..2d773c48 100644 --- a/src/command/cmd_defs.c +++ b/src/command/cmd_defs.c @@ -2845,7 +2845,9 @@ _cmd_uninit(void) { cmd_ac_uninit(); g_hash_table_destroy(commands); + commands = NULL; g_hash_table_destroy(search_index); + search_index = NULL; } /* diff --git a/src/log.c b/src/log.c index cacf573b..221db0b8 100644 --- a/src/log.c +++ b/src/log.c @@ -54,6 +54,8 @@ #define PROF "prof" +static void _log_msg(log_level_t level, const char* const area, const char* const msg); + static FILE* logp; static gchar* mainlogfile = NULL; static gboolean user_provided_log = FALSE; @@ -121,14 +123,22 @@ _log_abbreviation_string_from_level(log_level_t level) } } +static gboolean +_should_log(log_level_t level) +{ + return level >= level_filter && logp; +} + void log_debug(const char* const msg, ...) { + if (!_should_log(PROF_LEVEL_DEBUG)) + return; va_list arg; va_start(arg, msg); GString* fmt_msg = g_string_new(NULL); g_string_vprintf(fmt_msg, msg, arg); - log_msg(PROF_LEVEL_DEBUG, PROF, fmt_msg->str); + _log_msg(PROF_LEVEL_DEBUG, PROF, fmt_msg->str); g_string_free(fmt_msg, TRUE); va_end(arg); } @@ -136,11 +146,13 @@ log_debug(const char* const msg, ...) void log_info(const char* const msg, ...) { + if (!_should_log(PROF_LEVEL_INFO)) + return; va_list arg; va_start(arg, msg); GString* fmt_msg = g_string_new(NULL); g_string_vprintf(fmt_msg, msg, arg); - log_msg(PROF_LEVEL_INFO, PROF, fmt_msg->str); + _log_msg(PROF_LEVEL_INFO, PROF, fmt_msg->str); g_string_free(fmt_msg, TRUE); va_end(arg); } @@ -148,11 +160,13 @@ log_info(const char* const msg, ...) void log_warning(const char* const msg, ...) { + if (!_should_log(PROF_LEVEL_WARN)) + return; va_list arg; va_start(arg, msg); GString* fmt_msg = g_string_new(NULL); g_string_vprintf(fmt_msg, msg, arg); - log_msg(PROF_LEVEL_WARN, PROF, fmt_msg->str); + _log_msg(PROF_LEVEL_WARN, PROF, fmt_msg->str); g_string_free(fmt_msg, TRUE); va_end(arg); } @@ -160,11 +174,13 @@ log_warning(const char* const msg, ...) void log_error(const char* const msg, ...) { + if (!_should_log(PROF_LEVEL_ERROR)) + return; va_list arg; va_start(arg, msg); GString* fmt_msg = g_string_new(NULL); g_string_vprintf(fmt_msg, msg, arg); - log_msg(PROF_LEVEL_ERROR, PROF, fmt_msg->str); + _log_msg(PROF_LEVEL_ERROR, PROF, fmt_msg->str); g_string_free(fmt_msg, TRUE); va_end(arg); } @@ -206,28 +222,34 @@ log_close(void) } } +static void +_log_msg(log_level_t level, const char* const area, const char* const msg) +{ + GDateTime* dt = g_date_time_new_now_local(); + + char* level_str = _log_abbreviation_string_from_level(level); + + auto_gchar gchar* date_fmt = g_date_time_format_iso8601(dt); + + fprintf(logp, "%s: %s: %s: %s\n", date_fmt, area, level_str, msg); + g_date_time_unref(dt); + + fflush(logp); + + if (prefs_get_boolean(PREF_LOG_ROTATE) && !user_provided_log) { + long result = ftell(logp); + if (result != -1 && result >= prefs_get_max_log_size()) { + _rotate_log_file(); + } + } +} + void log_msg(log_level_t level, const char* const area, const char* const msg) { - if (level >= level_filter && logp) { - GDateTime* dt = g_date_time_new_now_local(); - - char* level_str = _log_abbreviation_string_from_level(level); - - auto_gchar gchar* date_fmt = g_date_time_format_iso8601(dt); - - fprintf(logp, "%s: %s: %s: %s\n", date_fmt, area, level_str, msg); - g_date_time_unref(dt); - - fflush(logp); - - if (prefs_get_boolean(PREF_LOG_ROTATE) && !user_provided_log) { - long result = ftell(logp); - if (result != -1 && result >= prefs_get_max_log_size()) { - _rotate_log_file(); - } - } - } + if (!_should_log(level)) + return; + _log_msg(level, area, msg); } int diff --git a/src/plugins/api.c b/src/plugins/api.c index 91031a16..97ad72c3 100644 --- a/src/plugins/api.c +++ b/src/plugins/api.c @@ -111,7 +111,7 @@ api_register_command(const char* const plugin_name, const char* command_name, in char** synopsis, const char* description, char* arguments[][2], char** examples, void* callback, void (*callback_exec)(PluginCommand* command, gchar** args), void (*callback_destroy)(void* callback)) { - PluginCommand* command = malloc(sizeof(PluginCommand)); + PluginCommand* command = calloc(1, sizeof(PluginCommand)); command->command_name = strdup(command_name); command->min_args = min_args; command->max_args = max_args; @@ -119,28 +119,22 @@ api_register_command(const char* const plugin_name, const char* command_name, in command->callback_exec = callback_exec; command->callback_destroy = callback_destroy; - CommandHelp* help = malloc(sizeof(CommandHelp)); - - help->tags[0] = NULL; + CommandHelp* help = calloc(1, sizeof(CommandHelp)); int i; for (i = 0; synopsis[i] != NULL; i++) { help->synopsis[i] = strdup(synopsis[i]); } - help->synopsis[i] = NULL; help->desc = strdup(description); for (i = 0; arguments[i][0] != NULL; i++) { help->args[i][0] = strdup(arguments[i][0]); help->args[i][1] = strdup(arguments[i][1]); } - help->args[i][0] = NULL; - help->args[i][1] = NULL; for (i = 0; examples[i] != NULL; i++) { help->examples[i] = strdup(examples[i]); } - help->examples[i] = NULL; command->help = help; diff --git a/src/plugins/callbacks.c b/src/plugins/callbacks.c index 36607066..6852a0ac 100644 --- a/src/plugins/callbacks.c +++ b/src/plugins/callbacks.c @@ -104,7 +104,8 @@ _free_command(PluginCommand* command) } free(command->command_name); - _free_command_help(command->help); + if (command->help) + _free_command_help(command->help); free(command); } @@ -118,6 +119,8 @@ _free_command_hash(GHashTable* command_hash) static void _free_timed_function(PluginTimedFunction* timed_function) { + if (!timed_function) + return; if (timed_function->callback_destroy) { timed_function->callback_destroy(timed_function->callback); } @@ -178,8 +181,11 @@ void callbacks_close(void) { g_hash_table_destroy(p_window_callbacks); + p_window_callbacks = NULL; g_hash_table_destroy(p_timed_functions); + p_timed_functions = NULL; g_hash_table_destroy(p_commands); + p_commands = NULL; } void diff --git a/src/plugins/python_plugins.c b/src/plugins/python_plugins.c index c25bb541..8cd721df 100644 --- a/src/plugins/python_plugins.c +++ b/src/plugins/python_plugins.c @@ -69,12 +69,6 @@ disable_python_threads() PyEval_RestoreThread(thread_state); } -static void -_unref_module(PyObject* module) -{ - Py_XDECREF(module); -} - const char* python_get_version_string(void) { @@ -95,14 +89,15 @@ python_get_version_number(void) void python_env_init(void) { - loaded_modules = g_hash_table_new_full(g_str_hash, g_str_equal, free, (GDestroyNotify)_unref_module); + loaded_modules = g_hash_table_new_full(g_str_hash, g_str_equal, free, (GDestroyNotify)Py_XDECREF); python_init_prof(); auto_gchar gchar* plugins_dir = files_get_data_path(DIR_PLUGINS); auto_gchar gchar* path = g_strdup_printf( - "import sys\n" - "sys.path.append(\"%s/\")\n", plugins_dir); + "import sys\n" + "sys.path.append(\"%s/\")\n", + plugins_dir); PyRun_SimpleString(path); python_check_error(); diff --git a/src/profanity.c b/src/profanity.c index 0b639bb1..24e0b0e6 100644 --- a/src/profanity.c +++ b/src/profanity.c @@ -298,7 +298,10 @@ _call_and_free_shutdown_routine(struct shutdown_routine* r) void prof_shutdown(void) { - g_list_free_full(shutdown_routines, (GDestroyNotify)_call_and_free_shutdown_routine); + if (shutdown_routines) { + g_list_free_full(shutdown_routines, (GDestroyNotify)_call_and_free_shutdown_routine); + shutdown_routines = NULL; + } } static void diff --git a/src/tools/autocomplete.c b/src/tools/autocomplete.c index ebbce5e3..b7fb00b3 100644 --- a/src/tools/autocomplete.c +++ b/src/tools/autocomplete.c @@ -62,12 +62,7 @@ static gchar* _search(Autocomplete ac, GList* curr, gboolean quote, search_direc Autocomplete autocomplete_new(void) { - Autocomplete new = malloc(sizeof(struct autocomplete_t)); - new->items = NULL; - new->last_found = NULL; - new->search_str = NULL; - - return new; + return calloc(1, sizeof(struct autocomplete_t)); } void diff --git a/src/ui/core.c b/src/ui/core.c index 9bd872a0..91249d41 100644 --- a/src/ui/core.c +++ b/src/ui/core.c @@ -99,9 +99,10 @@ _ui_close(void) inp_close(); status_bar_close(); free_title_bar(); - delwin(main_scr); - delscreen(set_term(NULL)); endwin(); + delwin(main_scr); + main_scr = NULL; + delscreen(set_term(NULL)); } void diff --git a/src/ui/inputwin.c b/src/ui/inputwin.c index a7e3a138..0d2113f0 100644 --- a/src/ui/inputwin.c +++ b/src/ui/inputwin.c @@ -164,7 +164,6 @@ create_input_window(void) inp_win = newpad(1, INP_WIN_MAX); wbkgd(inp_win, theme_attrs(THEME_INPUT_TEXT)); - ; keypad(inp_win, TRUE); wmove(inp_win, 0, 0); @@ -274,7 +273,9 @@ inp_close(void) { rl_callback_handler_remove(); delwin(inp_win); + inp_win = NULL; fclose(discard); + discard = NULL; } char* diff --git a/src/ui/statusbar.c b/src/ui/statusbar.c index d60a32e7..917a8ba8 100644 --- a/src/ui/statusbar.c +++ b/src/ui/statusbar.c @@ -120,6 +120,7 @@ void status_bar_close(void) { delwin(statusbar_win); + statusbar_win = NULL; if (statusbar) { if (statusbar->time) { g_free(statusbar->time); @@ -133,10 +134,11 @@ status_bar_close(void) if (statusbar->tabs) { g_hash_table_destroy(statusbar->tabs); } - free(statusbar); + FREE_SET_NULL(statusbar); } if (tz) { g_time_zone_unref(tz); + tz = NULL; } } diff --git a/src/ui/titlebar.c b/src/ui/titlebar.c index 55aacbeb..7ecdc7ff 100644 --- a/src/ui/titlebar.c +++ b/src/ui/titlebar.c @@ -89,6 +89,7 @@ void free_title_bar(void) { delwin(win); + win = NULL; } void diff --git a/src/ui/window_list.c b/src/ui/window_list.c index fbb9273f..6838fbd2 100644 --- a/src/ui/window_list.c +++ b/src/ui/window_list.c @@ -1226,8 +1226,11 @@ void wins_destroy(void) { g_hash_table_destroy(windows); + windows = NULL; autocomplete_free(wins_ac); + wins_ac = NULL; autocomplete_free(wins_close_ac); + wins_close_ac = NULL; } ProfWin* diff --git a/src/xmpp/avatar.c b/src/xmpp/avatar.c index 721cd623..7014698c 100644 --- a/src/xmpp/avatar.c +++ b/src/xmpp/avatar.c @@ -77,22 +77,30 @@ _free_avatar_data(avatar_metadata* data) } } +static void +_avatar_cleanup(void) +{ + if (looking_for) { + g_hash_table_destroy(looking_for); + } + if (shall_open) { + g_hash_table_destroy(shall_open); + } + looking_for = NULL; + shall_open = NULL; +} + void avatar_pep_subscribe(void) { + prof_add_shutdown_routine(_avatar_cleanup); message_pubsub_event_handler_add(STANZA_NS_USER_AVATAR_METADATA, _avatar_metadata_handler, NULL, NULL); message_pubsub_event_handler_add(STANZA_NS_USER_AVATAR_DATA, _avatar_metadata_handler, NULL, NULL); // caps_add_feature(XMPP_FEATURE_USER_AVATAR_METADATA_NOTIFY); - if (looking_for) { - g_hash_table_destroy(looking_for); - } + _avatar_cleanup(); looking_for = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); - - if (shall_open) { - g_hash_table_destroy(shall_open); - } shall_open = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); } diff --git a/src/xmpp/chat_session.c b/src/xmpp/chat_session.c index 1c62c374..65b6b32f 100644 --- a/src/xmpp/chat_session.c +++ b/src/xmpp/chat_session.c @@ -56,7 +56,7 @@ _chat_session_new(const char* const barejid, const char* const resource, gboolea assert(barejid != NULL); assert(resource != NULL); - ChatSession* new_session = malloc(sizeof(struct chat_session_t)); + ChatSession* new_session = calloc(1, sizeof(*new_session)); new_session->barejid = strdup(barejid); new_session->resource = strdup(resource); new_session->resource_override = resource_override; @@ -88,8 +88,10 @@ chat_sessions_init(void) void chat_sessions_clear(void) { - if (sessions) + if (sessions) { g_hash_table_remove_all(sessions); + sessions = NULL; + } } void @@ -101,7 +103,7 @@ chat_session_resource_override(const char* const barejid, const char* const reso ChatSession* chat_session_get(const char* const barejid) { - return g_hash_table_lookup(sessions, barejid); + return sessions ? g_hash_table_lookup(sessions, barejid) : NULL; } char* diff --git a/src/xmpp/iq.c b/src/xmpp/iq.c index efbd5f90..c9f66d39 100644 --- a/src/xmpp/iq.c +++ b/src/xmpp/iq.c @@ -320,7 +320,6 @@ void iq_handlers_clear(void) { if (id_handlers) { - g_hash_table_remove_all(id_handlers); g_hash_table_destroy(id_handlers); id_handlers = NULL; } @@ -410,7 +409,6 @@ void iq_rooms_cache_clear(void) { if (rooms_cache) { - g_hash_table_remove_all(rooms_cache); g_hash_table_destroy(rooms_cache); rooms_cache = NULL; } diff --git a/src/xmpp/message.c b/src/xmpp/message.c index 3bf1dc0d..5c0477b8 100644 --- a/src/xmpp/message.c +++ b/src/xmpp/message.c @@ -320,13 +320,9 @@ _handle_form(xmpp_stanza_t* const stanza) return TRUE; } -void -message_handlers_init(void) +static void +_message_handlers_cleanup(void) { - xmpp_conn_t* const conn = connection_get_conn(); - xmpp_ctx_t* const ctx = connection_get_ctx(); - xmpp_handler_add(conn, _message_handler, NULL, STANZA_NAME_MESSAGE, NULL, ctx); - if (pubsub_event_handlers) { GList* keys = g_hash_table_get_keys(pubsub_event_handlers); GList* curr = keys; @@ -340,7 +336,17 @@ message_handlers_init(void) g_list_free(keys); g_hash_table_destroy(pubsub_event_handlers); } + pubsub_event_handlers = NULL; +} +void +message_handlers_init(void) +{ + prof_add_shutdown_routine(_message_handlers_cleanup); + xmpp_conn_t* const conn = connection_get_conn(); + xmpp_ctx_t* const ctx = connection_get_ctx(); + xmpp_handler_add(conn, _message_handler, NULL, STANZA_NAME_MESSAGE, NULL, ctx); + _message_handlers_cleanup(); pubsub_event_handlers = g_hash_table_new_full(g_str_hash, g_str_equal, free, free); } diff --git a/tests/unittests/helpers.c b/tests/unittests/helpers.c index 3205e460..f567bcd5 100644 --- a/tests/unittests/helpers.c +++ b/tests/unittests/helpers.c @@ -11,6 +11,9 @@ #include "helpers.h" #include "config/preferences.h" #include "xmpp/chat_session.h" +#include "command/cmd_defs.h" + +void prof_shutdown(void); void create_config_dir(void** state) @@ -51,18 +54,24 @@ load_preferences(void** state) FILE* f = fopen("./tests/files/xdg_config_home/profanity/profrc", "ab+"); if (f) { prefs_load(NULL); + } else { + return 1; } fclose(f); + cmd_init(); + chat_sessions_init(); return 0; } int close_preferences(void** state) { + chat_sessions_clear(); prefs_close(); remove("./tests/files/xdg_config_home/profanity/profrc"); remove_config_dir(state); rmdir("./tests/files"); + prof_shutdown(); return 0; } @@ -79,6 +88,7 @@ close_chat_sessions(void** state) { chat_sessions_clear(); close_preferences(NULL); + prof_shutdown(); return 0; } diff --git a/tests/unittests/test_callbacks.c b/tests/unittests/test_callbacks.c index a9b1138b..e545fce1 100644 --- a/tests/unittests/test_callbacks.c +++ b/tests/unittests/test_callbacks.c @@ -16,9 +16,6 @@ returns_no_commands(void** state) GList* commands = plugins_get_command_names(); assert_true(commands == NULL); - - callbacks_close(); - g_list_free(commands); } void @@ -26,15 +23,15 @@ returns_commands(void** state) { callbacks_init(); - PluginCommand* command1 = malloc(sizeof(PluginCommand)); + PluginCommand* command1 = calloc(1, sizeof(PluginCommand)); command1->command_name = strdup("command1"); callbacks_add_command("plugin1", command1); - PluginCommand* command2 = malloc(sizeof(PluginCommand)); + PluginCommand* command2 = calloc(1, sizeof(PluginCommand)); command2->command_name = strdup("command2"); callbacks_add_command("plugin1", command2); - PluginCommand* command3 = malloc(sizeof(PluginCommand)); + PluginCommand* command3 = calloc(1, sizeof(PluginCommand)); command3->command_name = strdup("command3"); callbacks_add_command("plugin2", command3); @@ -61,6 +58,4 @@ returns_commands(void** state) assert_true(foundCommand1 && foundCommand2 && foundCommand3); g_list_free(names); - // TODO: why does this make the test fail? - // callbacks_close(); } diff --git a/tests/unittests/test_cmd_alias.c b/tests/unittests/test_cmd_alias.c index 6d01ee14..d23816bd 100644 --- a/tests/unittests/test_cmd_alias.c +++ b/tests/unittests/test_cmd_alias.c @@ -84,7 +84,6 @@ cmd_alias_add_shows_message_when_exists(void** state) { gchar* args[] = { "add", "hc", "/help commands", NULL }; - cmd_init(); prefs_add_alias("hc", "/help commands"); cmd_ac_add("/hc"); diff --git a/tests/unittests/test_cmd_bookmark.c b/tests/unittests/test_cmd_bookmark.c index 58201ca6..2859f143 100644 --- a/tests/unittests/test_cmd_bookmark.c +++ b/tests/unittests/test_cmd_bookmark.c @@ -216,8 +216,6 @@ cmd_bookmark_uses_roomjid_in_room(void** state) gboolean result = cmd_bookmark(&muc_win.window, CMD_BOOKMARK, args); assert_true(result); - - muc_close(); } void @@ -243,8 +241,6 @@ cmd_bookmark_add_uses_roomjid_in_room(void** state) gboolean result = cmd_bookmark(&muc_win.window, CMD_BOOKMARK, args); assert_true(result); - - muc_close(); } void @@ -271,8 +267,6 @@ cmd_bookmark_add_uses_supplied_jid_in_room(void** state) gboolean result = cmd_bookmark(&muc_win.window, CMD_BOOKMARK, args); assert_true(result); - - muc_close(); } void @@ -401,8 +395,6 @@ cmd_bookmark_remove_uses_roomjid_in_room(void** state) gboolean result = cmd_bookmark(&muc_win.window, CMD_BOOKMARK, args); assert_true(result); - - muc_close(); } void @@ -426,6 +418,4 @@ cmd_bookmark_remove_uses_supplied_jid_in_room(void** state) gboolean result = cmd_bookmark(&muc_win.window, CMD_BOOKMARK, args); assert_true(result); - - muc_close(); } diff --git a/tests/unittests/test_cmd_join.c b/tests/unittests/test_cmd_join.c index 6a77dd4d..8e1ef4a9 100644 --- a/tests/unittests/test_cmd_join.c +++ b/tests/unittests/test_cmd_join.c @@ -87,8 +87,6 @@ cmd_join_uses_account_mucservice_when_no_service_specified(void** state) gboolean result = cmd_join(NULL, CMD_JOIN, args); assert_true(result); - - muc_close(); } void @@ -115,8 +113,6 @@ cmd_join_uses_supplied_nick(void** state) gboolean result = cmd_join(NULL, CMD_JOIN, args); assert_true(result); - - muc_close(); } void @@ -143,8 +139,6 @@ cmd_join_uses_account_nick_when_not_supplied(void** state) gboolean result = cmd_join(NULL, CMD_JOIN, args); assert_true(result); - - muc_close(); } void @@ -174,6 +168,4 @@ cmd_join_uses_password_when_supplied(void** state) gboolean result = cmd_join(NULL, CMD_JOIN, args); assert_true(result); - - muc_close(); } diff --git a/tests/unittests/test_muc.c b/tests/unittests/test_muc.c index 977e2de8..71fecd5d 100644 --- a/tests/unittests/test_muc.c +++ b/tests/unittests/test_muc.c @@ -16,7 +16,6 @@ muc_before_test(void** state) int muc_after_test(void** state) { - muc_close(); return 0; } diff --git a/tests/unittests/test_server_events.c b/tests/unittests/test_server_events.c index feed7709..fbed077a 100644 --- a/tests/unittests/test_server_events.c +++ b/tests/unittests/test_server_events.c @@ -17,9 +17,6 @@ #include "plugins/plugins.h" #include "ui/window_list.h" - -void prof_shutdown(void); - void console_shows_online_presence_when_set_online(void** state) { @@ -38,7 +35,6 @@ console_shows_online_presence_when_set_online(void** state) sv_ev_contact_online(barejid, resource, NULL, NULL); roster_destroy(); - prof_shutdown(); } void @@ -59,7 +55,6 @@ console_shows_online_presence_when_set_all(void** state) sv_ev_contact_online(barejid, resource, NULL, NULL); roster_destroy(); - prof_shutdown(); } void @@ -80,7 +75,6 @@ console_shows_dnd_presence_when_set_all(void** state) sv_ev_contact_online(barejid, resource, NULL, NULL); roster_destroy(); - prof_shutdown(); } void @@ -96,7 +90,7 @@ handle_offline_removes_chat_session(void** state) Resource* resourcep = resource_new(resource, RESOURCE_ONLINE, NULL, 10); roster_update_presence(barejid, resourcep, NULL); chat_session_recipient_active(barejid, resource, FALSE); - ProfConsoleWin* console = malloc(sizeof(ProfConsoleWin)); + ProfConsoleWin* console = calloc(1, sizeof(ProfConsoleWin)); will_return(win_create_console, &console->window); wins_init(); sv_ev_contact_offline(barejid, resource, NULL); @@ -106,7 +100,6 @@ handle_offline_removes_chat_session(void** state) roster_destroy(); chat_sessions_clear(); - prof_shutdown(); } void diff --git a/tests/unittests/unittests.c b/tests/unittests/unittests.c index c28f3f2e..8e6c1b9b 100644 --- a/tests/unittests/unittests.c +++ b/tests/unittests/unittests.c @@ -57,6 +57,9 @@ main(int argc, char* argv[]) printf(" MB_CUR_MAX: %d\n", (int)MB_CUR_MAX); printf(" MB_LEN_MAX: %d\n", (int)MB_LEN_MAX); + if (argc > 1) + cmocka_set_test_filter(argv[1]); + const struct CMUnitTest all_tests[] = { cmocka_unit_test(replace_one_substr), @@ -460,7 +463,9 @@ main(int argc, char* argv[]) cmocka_unit_test_setup_teardown(handle_offline_removes_chat_session, load_preferences, close_preferences), - cmocka_unit_test(lost_connection_clears_chat_sessions), + cmocka_unit_test_setup_teardown(lost_connection_clears_chat_sessions, + load_preferences, + close_preferences), cmocka_unit_test(cmd_alias_add_shows_usage_when_no_args), cmocka_unit_test(cmd_alias_add_shows_usage_when_no_value), @@ -623,8 +628,12 @@ main(int argc, char* argv[]) cmocka_unit_test(prof_whole_occurrences_tests), cmocka_unit_test(prof_occurrences_of_large_message_tests), - cmocka_unit_test(returns_no_commands), - cmocka_unit_test(returns_commands), + cmocka_unit_test_setup_teardown(returns_no_commands, + load_preferences, + close_preferences), + cmocka_unit_test_setup_teardown(returns_commands, + load_preferences, + close_preferences), cmocka_unit_test(returns_empty_list_when_none), cmocka_unit_test(returns_added_feature), @@ -634,6 +643,5 @@ main(int argc, char* argv[]) cmocka_unit_test(removes_plugin_features), cmocka_unit_test(does_not_remove_feature_when_more_than_one_reference), }; - return cmocka_run_group_tests(all_tests, NULL, NULL); }