From 97c5072f56b992d3bf2e4c3550a8010f9638b80a Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 17 May 2015 01:11:03 +0100 Subject: [PATCH 01/44] Added stabber testsuite --- .gitignore | 1 + Makefile.am | 53 +++- stabbertests/proftest.c | 186 +++++++++++++ stabbertests/proftest.h | 2 + stabbertests/test_connect.c | 12 + stabbertests/test_connect.h | 1 + stabbertests/testsuite.c | 24 ++ stabbertests/ui/stub_ui.c | 511 ++++++++++++++++++++++++++++++++++++ stabbertests/ui/stub_ui.h | 6 + 9 files changed, 791 insertions(+), 5 deletions(-) create mode 100644 stabbertests/proftest.c create mode 100644 stabbertests/proftest.h create mode 100644 stabbertests/test_connect.c create mode 100644 stabbertests/test_connect.h create mode 100644 stabbertests/testsuite.c create mode 100644 stabbertests/ui/stub_ui.c create mode 100644 stabbertests/ui/stub_ui.h diff --git a/.gitignore b/.gitignore index ba909849..6be27ed5 100644 --- a/.gitignore +++ b/.gitignore @@ -69,3 +69,4 @@ callgrind.out.* gen_docs.sh main_fragment.html toc_fragment.html +stabbertests/testsuite.trs diff --git a/Makefile.am b/Makefile.am index 372b60f3..e3ffc654 100644 --- a/Makefile.am +++ b/Makefile.am @@ -35,7 +35,7 @@ core_sources = \ src/config/preferences.c src/config/preferences.h \ src/config/theme.c src/config/theme.h -tests_sources = \ +test_sources = \ src/contact.c src/contact.h src/common.c \ src/log.h src/profanity.c src/common.h \ src/profanity.h src/chat_session.c \ @@ -94,6 +94,45 @@ tests_sources = \ tests/test_chat_session.c tests/test_chat_session.h \ tests/testsuite.c +stabbertest_sources = \ + src/contact.c src/contact.h src/log.c src/common.c \ + src/log.h src/profanity.c src/common.h \ + src/profanity.h src/chat_session.c \ + src/chat_session.h src/muc.c src/muc.h src/jid.h src/jid.c \ + src/chat_state.h src/chat_state.c \ + src/resource.c src/resource.h \ + src/roster_list.c src/roster_list.h \ + src/xmpp/xmpp.h src/xmpp/capabilities.c src/xmpp/connection.c \ + src/xmpp/iq.c src/xmpp/message.c src/xmpp/presence.c src/xmpp/stanza.c \ + src/xmpp/stanza.h src/xmpp/message.h src/xmpp/iq.h src/xmpp/presence.h \ + src/xmpp/capabilities.h src/xmpp/connection.h \ + src/xmpp/roster.c src/xmpp/roster.h \ + src/xmpp/bookmark.c src/xmpp/bookmark.h \ + src/xmpp/form.c src/xmpp/form.h \ + src/event/server_events.c src/event/server_events.h \ + src/event/client_events.c src/event/client_events.h \ + src/event/ui_events.c src/event/ui_events.h \ + src/ui/ui.h src/ui/window.c src/ui/window.h \ + src/ui/windows.c src/ui/windows.h \ + src/ui/buffer.c src/ui/buffer.h \ + src/ui/statusbar.c src/ui/statusbar.h \ + src/ui/inputwin.c src/ui/inputwin.h \ + src/command/command.h src/command/command.c \ + src/command/commands.h src/command/commands.c \ + src/tools/parser.c \ + src/tools/parser.h \ + src/tools/p_sha1.h src/tools/p_sha1.c \ + src/tools/autocomplete.c src/tools/autocomplete.h \ + src/tools/tinyurl.c src/tools/tinyurl.h \ + src/config/accounts.c src/config/accounts.h \ + src/config/account.c src/config/account.h \ + src/config/preferences.c src/config/preferences.h \ + src/config/theme.c src/config/theme.h \ + stabbertests/ui/stub_ui.c \ + stabbertests/proftest.c stabbertests/proftest.h \ + stabbertests/test_connect.c stabbertests/test_connect.h \ + stabbertests/testsuite.c + main_source = src/main.c git_include = src/gitversion.h @@ -114,12 +153,14 @@ script_sources = bootstrap.sh configure-debug install-all.sh man_sources = docs/profanity.1 if BUILD_OTR -tests_sources += $(otr_test_sources) +test_sources += $(otr_test_sources) if BUILD_OTR3 core_sources += $(otr3_sources) +stabbertest_sources += $(otr3_sources) endif if BUILD_OTR4 core_sources += $(otr4_sources) +stabbertest_sources += $(otr4_sources) endif endif @@ -133,10 +174,12 @@ if INCLUDE_GIT_VERSION BUILT_SOURCES = $(git_include) endif -TESTS = tests/testsuite -check_PROGRAMS = tests/testsuite -tests_testsuite_SOURCES = $(tests_sources) +TESTS = tests/testsuite stabbertests/testsuite +check_PROGRAMS = tests/testsuite stabbertests/testsuite +tests_testsuite_SOURCES = $(test_sources) tests_testsuite_LDADD = -lcmocka +stabbertests_testsuite_SOURCES = $(stabbertest_sources) +stabbertests_testsuite_LDADD = -lcmocka -lstabber man_MANS = $(man_sources) diff --git a/stabbertests/proftest.c b/stabbertests/proftest.c new file mode 100644 index 00000000..d15b9cbf --- /dev/null +++ b/stabbertests/proftest.c @@ -0,0 +1,186 @@ +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "config.h" + +#include "config/preferences.h" +#include "log.h" +#include "xmpp/xmpp.h" +#include "command/command.h" +#include "roster_list.h" + +#ifdef HAVE_GIT_VERSION +#include "gitversion.h" +#endif + +#ifdef HAVE_LIBOTR +#include "otr/otr.h" +#endif + + +#define XDG_CONFIG_HOME "./stabbertests/files/xdg_config_home" +#define XDG_DATA_HOME "./stabbertests/files/xdg_data_home" + +gboolean +_create_dir(char *name) +{ + struct stat sb; + + if (stat(name, &sb) != 0) { + if (errno != ENOENT || mkdir(name, S_IRWXU) != 0) { + return FALSE; + } + } else { + if ((sb.st_mode & S_IFDIR) != S_IFDIR) { + return FALSE; + } + } + + return TRUE; +} + +gboolean +_mkdir_recursive(const char *dir) +{ + int i; + gboolean result = TRUE; + + for (i = 1; i <= strlen(dir); i++) { + if (dir[i] == '/' || dir[i] == '\0') { + gchar *next_dir = g_strndup(dir, i); + result = create_dir(next_dir); + g_free(next_dir); + if (!result) { + break; + } + } + } + + return result; +} + +void +_create_config_dir(void) +{ + GString *profanity_dir = g_string_new(XDG_CONFIG_HOME); + g_string_append(profanity_dir, "/profanity"); + + if (!_mkdir_recursive(profanity_dir->str)) { + assert_true(FALSE); + } + + g_string_free(profanity_dir, TRUE); +} + +void +_create_data_dir(void) +{ + GString *profanity_dir = g_string_new(XDG_DATA_HOME); + g_string_append(profanity_dir, "/profanity"); + + if (!_mkdir_recursive(profanity_dir->str)) { + assert_true(FALSE); + } + + g_string_free(profanity_dir, TRUE); +} + +void +_create_chatlogs_dir(void) +{ + GString *chatlogs_dir = g_string_new(XDG_DATA_HOME); + g_string_append(chatlogs_dir, "/profanity/chatlogs"); + + if (!_mkdir_recursive(chatlogs_dir->str)) { + assert_true(FALSE); + } + + g_string_free(chatlogs_dir, TRUE); +} + +void +_create_logs_dir(void) +{ + GString *logs_dir = g_string_new(XDG_DATA_HOME); + g_string_append(logs_dir, "/profanity/logs"); + + if (!_mkdir_recursive(logs_dir->str)) { + assert_true(FALSE); + } + + g_string_free(logs_dir, TRUE); +} + +void +_cleanup_dirs(void) +{ + system("rm -rf ./stabbertests/files"); +} + +void +init_prof_test(void **state) +{ + setenv("XDG_CONFIG_HOME", XDG_CONFIG_HOME, 1); + setenv("XDG_DATA_HOME", XDG_DATA_HOME, 1); + + _create_config_dir(); + _create_data_dir(); + _create_chatlogs_dir(); + _create_logs_dir(); + + log_level_t prof_log_level = log_level_from_string("DEBUG"); + prefs_load(); + log_init(prof_log_level); + if (strcmp(PACKAGE_STATUS, "development") == 0) { +#ifdef HAVE_GIT_VERSION + log_info("Starting Profanity (%sdev.%s.%s)...", PACKAGE_VERSION, PROF_GIT_BRANCH, PROF_GIT_REVISION); +#else + log_info("Starting Profanity (%sdev)...", PACKAGE_VERSION); +#endif + } else { + log_info("Starting Profanity (%s)...", PACKAGE_VERSION); + } + chat_log_init(); + groupchat_log_init(); + accounts_load(); + char *theme = prefs_get_string(PREF_THEME); + theme_init(theme); + prefs_free_string(theme); + jabber_init(FALSE); + cmd_init(); + log_info("Initialising contact list"); + roster_init(); + muc_init(); +#ifdef HAVE_LIBOTR + otr_init(); +#endif +} + +void +close_prof_test(void **state) +{ + jabber_disconnect(); + jabber_shutdown(); + roster_free(); + muc_close(); + caps_close(); +#ifdef HAVE_LIBOTR + otr_shutdown(); +#endif + chat_log_close(); + prefs_close(); + theme_close(); + accounts_close(); + cmd_uninit(); + log_close(); + + _cleanup_dirs(); +} diff --git a/stabbertests/proftest.h b/stabbertests/proftest.h new file mode 100644 index 00000000..d35daae4 --- /dev/null +++ b/stabbertests/proftest.h @@ -0,0 +1,2 @@ +void init_prof_test(void **state); +void close_prof_test(void **state); diff --git a/stabbertests/test_connect.c b/stabbertests/test_connect.c new file mode 100644 index 00000000..1ddc9849 --- /dev/null +++ b/stabbertests/test_connect.c @@ -0,0 +1,12 @@ +#include +#include +#include +#include +#include +#include + +void +connect_with_no_jid(void **state) +{ + assert_true(1); +} diff --git a/stabbertests/test_connect.h b/stabbertests/test_connect.h new file mode 100644 index 00000000..887cec73 --- /dev/null +++ b/stabbertests/test_connect.h @@ -0,0 +1 @@ +void connect_with_no_jid(void **state); diff --git a/stabbertests/testsuite.c b/stabbertests/testsuite.c new file mode 100644 index 00000000..e4a220d7 --- /dev/null +++ b/stabbertests/testsuite.c @@ -0,0 +1,24 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "config.h" + +#include "proftest.h" +#include "test_connect.h" + +int main(int argc, char* argv[]) { + + const UnitTest all_tests[] = { + unit_test_setup_teardown(connect_with_no_jid, + init_prof_test, + close_prof_test), + }; + + return run_tests(all_tests); +} diff --git a/stabbertests/ui/stub_ui.c b/stabbertests/ui/stub_ui.c new file mode 100644 index 00000000..b75cbe12 --- /dev/null +++ b/stabbertests/ui/stub_ui.c @@ -0,0 +1,511 @@ +#include +#include + +#include +#include + +#include "ui/window.h" +#include "ui/ui.h" + +#include "tests/ui/stub_ui.h" + +// mock state + +static char output[256]; + +void +expect_cons_show(char *expected) +{ + expect_string(cons_show, output, expected); +} + +void +expect_any_cons_show(void) +{ + expect_any(cons_show, output); +} + +void +expect_cons_show_error(char *expected) +{ + expect_string(cons_show_error, output, expected); +} + +void +expect_any_cons_show_error(void) +{ + expect_any(cons_show_error, output); +} + +void +expect_ui_current_print_line(char *message) +{ + expect_string(ui_current_print_line, output, message); +} + +void +expect_ui_current_print_formatted_line(char show_char, int attrs, char *message) +{ + expect_value(ui_current_print_formatted_line, show_char, show_char); + expect_value(ui_current_print_formatted_line, attrs, attrs); + expect_string(ui_current_print_formatted_line, output, message); +} + +// stubs + +void ui_init(void) {} +void ui_load_colours(void) {} +void ui_update(void) {} +void ui_close(void) {} +void ui_redraw(void) {} +void ui_resize(void) {} +GSList* ui_get_chat_recipients(void) +{ + return NULL; +} + +void ui_switch_win(ProfWin *win) {} + +void ui_gone_secure(const char * const barejid, gboolean trusted) {} +void ui_gone_insecure(const char * const barejid) {} +void ui_trust(const char * const barejid) {} +void ui_untrust(const char * const barejid) {} +void ui_smp_recipient_initiated(const char * const barejid) {} +void ui_smp_recipient_initiated_q(const char * const barejid, const char *question) {} + +void ui_smp_successful(const char * const barejid) {} +void ui_smp_unsuccessful_sender(const char * const barejid) {} +void ui_smp_unsuccessful_receiver(const char * const barejid) {} +void ui_smp_aborted(const char * const barejid) {} + +void ui_smp_answer_success(const char * const barejid) {} +void ui_smp_answer_failure(const char * const barejid) {} + +void ui_otr_authenticating(const char * const barejid) {} +void ui_otr_authetication_waiting(const char * const recipient) {} +void ui_sigwinch_handler(int sig) {} + +unsigned long ui_get_idle_time(void) +{ + return 0; +} + +void ui_reset_idle_time(void) {} +ProfPrivateWin* ui_new_private_win(const char * const fulljid) +{ + return NULL; +} + +ProfChatWin* ui_new_chat_win(const char * const barejid) +{ + return NULL; +} + +void ui_print_system_msg_from_recipient(const char * const barejid, const char *message) {} +gint ui_unread(void) +{ + return 0; +} + +void ui_close_connected_win(int index) {} +int ui_close_all_wins(void) +{ + return 0; +} + +int ui_close_read_wins(void) +{ + return 0; +} + +// current window actions +void ui_clear_current(void) {} + +win_type_t ui_current_win_type(void) +{ + return (win_type_t)mock(); +} + +gboolean ui_current_win_is_otr(void) +{ + return (gboolean)mock(); +} + +ProfChatWin *ui_get_current_chat(void) +{ + return (ProfChatWin*)mock(); +} + +void ui_current_print_line(const char * const msg, ...) +{ + va_list args; + va_start(args, msg); + vsnprintf(output, sizeof(output), msg, args); + check_expected(output); + va_end(args); +} + +void ui_current_print_formatted_line(const char show_char, int attrs, const char * const msg, ...) +{ + check_expected(show_char); + check_expected(attrs); + va_list args; + va_start(args, msg); + vsnprintf(output, sizeof(output), msg, args); + check_expected(output); + va_end(args); +} + +void ui_current_error_line(const char * const msg) {} +void ui_win_error_line(ProfWin *window, const char * const msg) {} + + +win_type_t ui_win_type(int index) +{ + return WIN_CONSOLE; +} + +void ui_close_win(int index) {} + +int ui_win_unread(int index) +{ + return 0; +} + +void ui_page_up(void) {} +void ui_page_down(void) {} +void ui_subwin_page_up(void) {} +void ui_subwin_page_down(void) {} + +char * ui_ask_password(void) +{ + return mock_ptr_type(char *); +} + +void ui_handle_stanza(const char * const msg) {} + +// ui events +void ui_contact_online(char *barejid, Resource *resource, GDateTime *last_activity) +{ + check_expected(barejid); + check_expected(resource); + check_expected(last_activity); +} + +void ui_contact_typing(const char * const barejid, const char * const resource) {} +void ui_incoming_msg(const char * const from, const char * const resource, const char * const message, GTimeVal *tv_stamp) {} +void ui_message_receipt(const char * const barejid, const char * const id) {} + +void ui_incoming_private_msg(const char * const fulljid, const char * const message, GTimeVal *tv_stamp) {} + +void ui_disconnected(void) {} +void ui_recipient_gone(const char * const barejid, const char * const resource) {} + +void ui_outgoing_chat_msg(ProfChatWin *chatwin, const char * const message, char *id) {} +void ui_outgoing_chat_msg_carbon(const char * const barejid, const char * const message) {} +void ui_outgoing_private_msg(ProfPrivateWin *privwin, const char * const message) {} + +void ui_room_join(const char * const roomjid, gboolean focus) {} +void ui_switch_to_room(const char * const roomjid) {} + +void ui_room_role_change(const char * const roomjid, const char * const role, const char * const actor, + const char * const reason) {} +void ui_room_affiliation_change(const char * const roomjid, const char * const affiliation, const char * const actor, + const char * const reason) {} +void ui_room_role_and_affiliation_change(const char * const roomjid, const char * const role, + const char * const affiliation, const char * const actor, const char * const reason) {} +void ui_room_occupant_role_change(const char * const roomjid, const char * const nick, const char * const role, + const char * const actor, const char * const reason) {} +void ui_room_occupant_affiliation_change(const char * const roomjid, const char * const nick, const char * const affiliation, + const char * const actor, const char * const reason) {} +void ui_room_occupant_role_and_affiliation_change(const char * const roomjid, const char * const nick, const char * const role, + const char * const affiliation, const char * const actor, const char * const reason) {} +void ui_room_roster(const char * const roomjid, GList *occupants, const char * const presence) {} +void ui_room_history(const char * const roomjid, const char * const nick, + GTimeVal tv_stamp, const char * const message) {} +void ui_room_message(const char * const roomjid, const char * const nick, + const char * const message) {} +void ui_room_subject(const char * const roomjid, const char * const nick, const char * const subject) {} +void ui_room_requires_config(const char * const roomjid) {} +void ui_room_destroy(const char * const roomjid) {} +void ui_show_room_info(ProfMucWin *mucwin) {} +void ui_show_room_role_list(ProfMucWin *mucwin, muc_role_t role) {} +void ui_show_room_affiliation_list(ProfMucWin *mucwin, muc_affiliation_t affiliation) {} +void ui_handle_room_info_error(const char * const roomjid, const char * const error) {} +void ui_show_room_disco_info(const char * const roomjid, GSList *identities, GSList *features) {} +void ui_room_destroyed(const char * const roomjid, const char * const reason, const char * const new_jid, + const char * const password) {} +void ui_room_kicked(const char * const roomjid, const char * const actor, const char * const reason) {} +void ui_room_member_kicked(const char * const roomjid, const char * const nick, const char * const actor, + const char * const reason) {} +void ui_room_banned(const char * const roomjid, const char * const actor, const char * const reason) {} +void ui_room_member_banned(const char * const roomjid, const char * const nick, const char * const actor, + const char * const reason) {} +void ui_leave_room(const char * const roomjid) {} +void ui_room_broadcast(const char * const roomjid, + const char * const message) {} +void ui_room_member_offline(const char * const roomjid, const char * const nick) {} +void ui_room_member_online(const char * const roomjid, const char * const nick, const char * const roles, + const char * const affiliation, const char * const show, const char * const status) {} +void ui_room_member_nick_change(const char * const roomjid, + const char * const old_nick, const char * const nick) {} +void ui_room_nick_change(const char * const roomjid, const char * const nick) {} +void ui_room_member_presence(const char * const roomjid, + const char * const nick, const char * const show, const char * const status) {} +void ui_room_update_occupants(const char * const roomjid) {} +void ui_room_show_occupants(const char * const roomjid) {} +void ui_room_hide_occupants(const char * const roomjid) {} +void ui_show_roster(void) {} +void ui_hide_roster(void) {} +void ui_roster_add(const char * const barejid, const char * const name) {} +void ui_roster_remove(const char * const barejid) {} +void ui_contact_already_in_group(const char * const contact, const char * const group) {} +void ui_contact_not_in_group(const char * const contact, const char * const group) {} +void ui_group_added(const char * const contact, const char * const group) {} +void ui_group_removed(const char * const contact, const char * const group) {} +void ui_chat_win_contact_online(PContact contact, Resource *resource, GDateTime *last_activity) {} +void ui_chat_win_contact_offline(PContact contact, char *resource, char *status) {} +gboolean ui_chat_win_exists(const char * const barejid) +{ + return TRUE; +} + +void ui_contact_offline(char *barejid, char *resource, char *status) {} + +void ui_handle_recipient_not_found(const char * const recipient, const char * const err_msg) +{ + check_expected(recipient); + check_expected(err_msg); +} + +void ui_handle_recipient_error(const char * const recipient, const char * const err_msg) +{ + check_expected(recipient); + check_expected(err_msg); +} + +void ui_handle_error(const char * const err_msg) +{ + check_expected(err_msg); +} + +void ui_clear_win_title(void) {} +void ui_goodbye_title(void) {} +void ui_handle_room_join_error(const char * const roomjid, const char * const err) {} +void ui_handle_room_configuration(const char * const roomjid, DataForm *form) {} +void ui_handle_room_configuration_form_error(const char * const roomjid, const char * const message) {} +void ui_handle_room_config_submit_result(const char * const roomjid) {} +void ui_handle_room_config_submit_result_error(const char * const roomjid, const char * const message) {} +void ui_handle_room_affiliation_list_error(const char * const roomjid, const char * const affiliation, + const char * const error) {} +void ui_handle_room_affiliation_list(const char * const roomjid, const char * const affiliation, GSList *jids) {} +void ui_handle_room_affiliation_set_error(const char * const roomjid, const char * const jid, + const char * const affiliation, const char * const error) {} +void ui_handle_room_role_set_error(const char * const roomjid, const char * const nick, const char * const role, + const char * const error) {} +void ui_handle_room_role_list_error(const char * const roomjid, const char * const role, const char * const error) {} +void ui_handle_room_role_list(const char * const roomjid, const char * const role, GSList *nicks) {} +void ui_handle_room_kick_error(const char * const roomjid, const char * const nick, const char * const error) {} +void ui_show_form(ProfMucConfWin *confwin) {} +void ui_show_form_field(ProfWin *window, DataForm *form, char *tag) {} +void ui_show_form_help(ProfMucConfWin *confwin) {} +void ui_show_form_field_help(ProfMucConfWin *confwin, char *tag) {} +void ui_show_lines(ProfWin *window, const gchar** lines) {} +void ui_redraw_all_room_rosters(void) {} +void ui_show_all_room_rosters(void) {} +void ui_hide_all_room_rosters(void) {} + +void ui_tidy_wins(void) {} +void ui_prune_wins(void) {} +gboolean ui_swap_wins(int source_win, int target_win) +{ + return FALSE; +} + +void ui_auto_away(void) {} +void ui_end_auto_away(void) {} +void ui_titlebar_presence(contact_presence_t presence) {} +void ui_handle_login_account_success(ProfAccount *account) {} +void ui_update_presence(const resource_presence_t resource_presence, + const char * const message, const char * const show) {} +void ui_about(void) {} +void ui_statusbar_new(const int win) {} + +char* ui_readline(void) +{ + return NULL; +} + +void ui_inp_history_append(char *inp) {} + +void ui_input_clear(void) {} +void ui_input_nonblocking(gboolean reset) {} + +void ui_invalid_command_usage(const char * const usage, void (*setting_func)(void)) {} + +void ui_create_xmlconsole_win(void) {} +gboolean ui_xmlconsole_exists(void) +{ + return FALSE; +} + +void ui_open_xmlconsole_win(void) {} + +gboolean ui_win_has_unsaved_form(int num) +{ + return FALSE; +} + +void ui_handle_otr_error(const char * const barejid, const char * const message) {} + +void +ui_write(char *line, int offset) {} + +// console window actions + +void cons_show(const char * const msg, ...) +{ + va_list args; + va_start(args, msg); + vsnprintf(output, sizeof(output), msg, args); + check_expected(output); + va_end(args); +} + +void cons_about(void) {} +void cons_help(void) {} +void cons_navigation_help(void) {} +void cons_prefs(void) {} +void cons_show_ui_prefs(void) {} +void cons_show_desktop_prefs(void) {} +void cons_show_chat_prefs(void) {} +void cons_show_log_prefs(void) {} +void cons_show_presence_prefs(void) {} +void cons_show_connection_prefs(void) {} +void cons_show_otr_prefs(void) {} + +void cons_show_account(ProfAccount *account) +{ + check_expected(account); +} + +void cons_debug(const char * const msg, ...) {} +void cons_show_time(void) {} +void cons_show_word(const char * const word) {} + +void cons_show_error(const char * const cmd, ...) +{ + va_list args; + va_start(args, cmd); + vsnprintf(output, sizeof(output), cmd, args); + check_expected(output); + va_end(args); +} + +void cons_show_contacts(GSList * list) {} + +void cons_show_roster(GSList * list) +{ + check_expected(list); +} + +void cons_show_roster_group(const char * const group, GSList * list) {} +void cons_show_wins(void) {} +void cons_show_status(const char * const barejid) {} +void cons_show_info(PContact pcontact) {} +void cons_show_caps(const char * const fulljid, resource_presence_t presence) {} +void cons_show_themes(GSList *themes) {} + +void cons_show_aliases(GList *aliases) +{ + check_expected(aliases); +} + +void cons_show_login_success(ProfAccount *account) {} +void cons_show_software_version(const char * const jid, + const char * const presence, const char * const name, + const char * const version, const char * const os) {} + +void cons_show_account_list(gchar **accounts) +{ + check_expected(accounts); +} + +void cons_show_room_list(GSList *room, const char * const conference_node) {} + +void cons_show_bookmarks(const GList *list) +{ + check_expected(list); +} + +void cons_show_disco_items(GSList *items, const char * const jid) {} +void cons_show_disco_info(const char *from, GSList *identities, GSList *features) {} +void cons_show_room_invite(const char * const invitor, const char * const room, + const char * const reason) {} +void cons_check_version(gboolean not_available_msg) {} +void cons_show_typing(const char * const barejid) {} +void cons_show_incoming_message(const char * const short_from, const int win_index) {} +void cons_show_room_invites(GSList *invites) {} +void cons_show_received_subs(void) {} +void cons_show_sent_subs(void) {} +void cons_alert(void) {} +void cons_theme_setting(void) {} +void cons_privileges_setting(void) {} +void cons_beep_setting(void) {} +void cons_flash_setting(void) {} +void cons_splash_setting(void) {} +void cons_vercheck_setting(void) {} +void cons_resource_setting(void) {} +void cons_occupants_setting(void) {} +void cons_roster_setting(void) {} +void cons_presence_setting(void) {} +void cons_wrap_setting(void) {} +void cons_time_setting(void) {} +void cons_mouse_setting(void) {} +void cons_statuses_setting(void) {} +void cons_titlebar_setting(void) {} +void cons_notify_setting(void) {} +void cons_states_setting(void) {} +void cons_outtype_setting(void) {} +void cons_intype_setting(void) {} +void cons_gone_setting(void) {} +void cons_history_setting(void) {} +void cons_carbons_setting(void) {} +void cons_receipts_setting(void) {} +void cons_log_setting(void) {} +void cons_chlog_setting(void) {} +void cons_grlog_setting(void) {} +void cons_autoaway_setting(void) {} +void cons_reconnect_setting(void) {} +void cons_autoping_setting(void) {} +void cons_priority_setting(void) {} +void cons_autoconnect_setting(void) {} +void cons_inpblock_setting(void) {} + +void cons_show_contact_online(PContact contact, Resource *resource, GDateTime *last_activity) +{ + check_expected(contact); + check_expected(resource); + check_expected(last_activity); +} + +void cons_show_contact_offline(PContact contact, char *resource, char *status) {} +void cons_theme_colours(void) {} + +// roster window +void rosterwin_roster(void) {} + +// occupants window +void occupantswin_occupants(const char * const room) {} + +// desktop notifier actions +void notifier_uninit(void) {} + +void notify_typing(const char * const handle) {} +void notify_message(ProfWin *window, const char * const name, const char * const text) {} +void notify_room_message(const char * const handle, const char * const room, + int win, const char * const text) {} +void notify_remind(void) {} +void notify_invite(const char * const from, const char * const room, + const char * const reason) {} +void notify_subscription(const char * const from) {} diff --git a/stabbertests/ui/stub_ui.h b/stabbertests/ui/stub_ui.h new file mode 100644 index 00000000..81357a86 --- /dev/null +++ b/stabbertests/ui/stub_ui.h @@ -0,0 +1,6 @@ +void expect_cons_show(char *expected); +void expect_any_cons_show(void); +void expect_cons_show_error(char *expected); +void expect_any_cons_show_error(void); +void expect_ui_current_print_line(char *message); +void expect_ui_current_print_formatted_line(char show_char, int attrs, char *message); \ No newline at end of file From 2c5b44421e1b3a163ce33249f9d0b1567d411b16 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 17 May 2015 22:05:43 +0100 Subject: [PATCH 02/44] Added initial stabber test --- Makefile.am | 2 +- configure.ac | 3 +++ src/config/preferences.c | 4 ++-- src/config/theme.c | 5 ++++- src/profanity.c | 2 +- src/xmpp/connection.c | 9 +++++---- src/xmpp/xmpp.h | 2 +- stabbertests/proftest.c | 11 ++++++++++- stabbertests/proftest.h | 1 + stabbertests/test_connect.c | 31 +++++++++++++++++++++++++++++-- stabbertests/test_connect.h | 2 +- stabbertests/testsuite.c | 2 +- tests/xmpp/stub_xmpp.c | 2 +- 13 files changed, 60 insertions(+), 16 deletions(-) diff --git a/Makefile.am b/Makefile.am index e3ffc654..d3aed4e9 100644 --- a/Makefile.am +++ b/Makefile.am @@ -179,7 +179,7 @@ check_PROGRAMS = tests/testsuite stabbertests/testsuite tests_testsuite_SOURCES = $(test_sources) tests_testsuite_LDADD = -lcmocka stabbertests_testsuite_SOURCES = $(stabbertest_sources) -stabbertests_testsuite_LDADD = -lcmocka -lstabber +stabbertests_testsuite_LDADD = -lcmocka -lstabber -lpthread man_MANS = $(man_sources) diff --git a/configure.ac b/configure.ac index 1e2c6173..e4558c02 100644 --- a/configure.ac +++ b/configure.ac @@ -235,6 +235,9 @@ AM_CONDITIONAL([THEMES_INSTALL], "$THEMES_INSTALL") PKG_CHECK_MODULES([cmocka], [cmocka], [], [AC_MSG_NOTICE([cmocka is not found, will not be able to run tests])]) +AC_CHECK_LIB([stabber], [stbbr_start], [], + [AC_MSG_ERROR([stabber not found, will not be able to run tests])]) + ### Check for ncursesw/ncurses.h first, Arch linux uses ncurses.h for ncursesw AC_CHECK_HEADERS([ncursesw/ncurses.h], [], []) AC_CHECK_HEADERS([ncurses.h], [], []) diff --git a/src/config/preferences.c b/src/config/preferences.c index 59a6a7ca..36a04a8f 100644 --- a/src/config/preferences.c +++ b/src/config/preferences.c @@ -82,7 +82,7 @@ prefs_load(void) { GError *err; - log_info("Loading preferences"); +// log_info("Loading preferences"); prefs_loc = _get_preferences_file(); if (g_file_test(prefs_loc, G_FILE_TEST_EXISTS)) { @@ -739,4 +739,4 @@ _get_default_string(preference_t pref) default: return NULL; } -} \ No newline at end of file +} diff --git a/src/config/theme.c b/src/config/theme.c index f73dee19..aeee4463 100644 --- a/src/config/theme.c +++ b/src/config/theme.c @@ -207,12 +207,15 @@ theme_close(void) { if (theme) { g_key_file_free(theme); + theme = NULL; } if (theme_loc) { g_string_free(theme_loc, TRUE); + theme_loc = NULL; } if (bold_items) { g_hash_table_destroy(bold_items); + bold_items = NULL; } } @@ -613,4 +616,4 @@ theme_attrs(theme_item_t attrs) return result; } -} \ No newline at end of file +} diff --git a/src/profanity.c b/src/profanity.c index 55a73430..0908c658 100644 --- a/src/profanity.c +++ b/src/profanity.c @@ -100,7 +100,7 @@ prof_run(const int disable_tls, char *log_level, char *account_name) otr_poll(); #endif notify_remind(); - jabber_process_events(); + jabber_process_events(10); ui_update(); } } diff --git a/src/xmpp/connection.c b/src/xmpp/connection.c index 70d49b7c..8fa83144 100644 --- a/src/xmpp/connection.c +++ b/src/xmpp/connection.c @@ -194,7 +194,7 @@ jabber_disconnect(void) xmpp_disconnect(jabber_conn.conn); while (jabber_get_connection_status() == JABBER_DISCONNECTING) { - jabber_process_events(); + jabber_process_events(10); } _connection_free_saved_account(); _connection_free_saved_details(); @@ -222,10 +222,11 @@ jabber_shutdown(void) _connection_free_session_data(); xmpp_shutdown(); free(jabber_conn.log); + jabber_conn.log = NULL; } void -jabber_process_events(void) +jabber_process_events(int millis) { int reconnect_sec; @@ -234,7 +235,7 @@ jabber_process_events(void) case JABBER_CONNECTED: case JABBER_CONNECTING: case JABBER_DISCONNECTING: - xmpp_run_once(jabber_conn.ctx, 10); + xmpp_run_once(jabber_conn.ctx, millis); break; case JABBER_DISCONNECTED: reconnect_sec = prefs_get_reconnect(); @@ -577,4 +578,4 @@ _xmpp_get_file_logger() file_log->userdata = &level; return file_log; -} \ No newline at end of file +} diff --git a/src/xmpp/xmpp.h b/src/xmpp/xmpp.h index 398c9f46..6b985b08 100644 --- a/src/xmpp/xmpp.h +++ b/src/xmpp/xmpp.h @@ -136,7 +136,7 @@ jabber_conn_status_t jabber_connect_with_details(const char * const jid, jabber_conn_status_t jabber_connect_with_account(const ProfAccount * const account); void jabber_disconnect(void); void jabber_shutdown(void); -void jabber_process_events(void); +void jabber_process_events(int millis); const char * jabber_get_fulljid(void); const char * jabber_get_domain(void); jabber_conn_status_t jabber_get_connection_status(void); diff --git a/stabbertests/proftest.c b/stabbertests/proftest.c index d15b9cbf..d5fdeb0a 100644 --- a/stabbertests/proftest.c +++ b/stabbertests/proftest.c @@ -25,10 +25,19 @@ #include "otr/otr.h" #endif - #define XDG_CONFIG_HOME "./stabbertests/files/xdg_config_home" #define XDG_DATA_HOME "./stabbertests/files/xdg_data_home" +void +prof_process_xmpp(void) +{ + int i = 0; + while (i < 20) { + jabber_process_events(10); + i++; + } +} + gboolean _create_dir(char *name) { diff --git a/stabbertests/proftest.h b/stabbertests/proftest.h index d35daae4..e0b6dded 100644 --- a/stabbertests/proftest.h +++ b/stabbertests/proftest.h @@ -1,2 +1,3 @@ void init_prof_test(void **state); void close_prof_test(void **state); +void prof_process_xmpp(void); diff --git a/stabbertests/test_connect.c b/stabbertests/test_connect.c index 1ddc9849..7a5c464a 100644 --- a/stabbertests/test_connect.c +++ b/stabbertests/test_connect.c @@ -4,9 +4,36 @@ #include #include #include +#include + +#include + +#include "proftest.h" +#include "xmpp/xmpp.h" +#include "ui/stub_ui.h" +#include "command/command.h" void -connect_with_no_jid(void **state) +connect_with_jid(void **state) { - assert_true(1); + char *connect = "/connect stabber@localhost port 5230"; + char *password = "password"; + + if (stbbr_start(5230) != 0) { + assert_true(FALSE); + return; + } + + stbbr_auth_passwd(password); + will_return(ui_ask_password, strdup(password)); + + expect_cons_show("Connecting as stabber@localhost"); + + cmd_process_input(strdup(connect)); + prof_process_xmpp(); + + jabber_conn_status_t status = jabber_get_connection_status(); + assert_true(status == JABBER_CONNECTED); + + stbbr_stop(); } diff --git a/stabbertests/test_connect.h b/stabbertests/test_connect.h index 887cec73..9716c6a9 100644 --- a/stabbertests/test_connect.h +++ b/stabbertests/test_connect.h @@ -1 +1 @@ -void connect_with_no_jid(void **state); +void connect_with_jid(void **state); diff --git a/stabbertests/testsuite.c b/stabbertests/testsuite.c index e4a220d7..467884ff 100644 --- a/stabbertests/testsuite.c +++ b/stabbertests/testsuite.c @@ -15,7 +15,7 @@ int main(int argc, char* argv[]) { const UnitTest all_tests[] = { - unit_test_setup_teardown(connect_with_no_jid, + unit_test_setup_teardown(connect_with_jid, init_prof_test, close_prof_test), }; diff --git a/tests/xmpp/stub_xmpp.c b/tests/xmpp/stub_xmpp.c index cc9580bf..d3be1af6 100644 --- a/tests/xmpp/stub_xmpp.c +++ b/tests/xmpp/stub_xmpp.c @@ -26,7 +26,7 @@ jabber_conn_status_t jabber_connect_with_account(const ProfAccount * const accou void jabber_disconnect(void) {} void jabber_shutdown(void) {} -void jabber_process_events(void) {} +void jabber_process_events(int millis) {} const char * jabber_get_fulljid(void) { return (char *)mock(); From cdf239dd78acd4f8598d7c393b42d5cd28e5a6bc Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 17 May 2015 22:12:10 +0100 Subject: [PATCH 03/44] Removed stbbr_stop from test --- stabbertests/test_connect.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/stabbertests/test_connect.c b/stabbertests/test_connect.c index 7a5c464a..5f4027bf 100644 --- a/stabbertests/test_connect.c +++ b/stabbertests/test_connect.c @@ -34,6 +34,4 @@ connect_with_jid(void **state) jabber_conn_status_t status = jabber_get_connection_status(); assert_true(status == JABBER_CONNECTED); - - stbbr_stop(); } From 641eadd02f7f22d5bb16ba249d38b62c0da7b6a1 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 17 May 2015 22:35:17 +0100 Subject: [PATCH 04/44] Updated travis build, make stabber dependency --- .travis.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.travis.yml b/.travis.yml index e546d8b3..22f432d5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,5 +21,13 @@ install: - sudo make install - cd ../.. - rm -rf cmocka-1.0.0 + - git clone git://github.com/boothj5/stabber.git + - cd stabber + - ./bootstrap.sh + - ./configure --prefix=/usr + - make + - sudo make install + - cd .. + - rm -rf stabber - ./bootstrap.sh script: ./configure && make && make check From 9ce25c33b03b7ff8ca8cd1cc52d8b7d24d125703 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 17 May 2015 23:10:30 +0100 Subject: [PATCH 05/44] Fixed compiler warnings --- stabbertests/proftest.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/stabbertests/proftest.c b/stabbertests/proftest.c index d5fdeb0a..6c44a6ee 100644 --- a/stabbertests/proftest.c +++ b/stabbertests/proftest.c @@ -8,6 +8,7 @@ #include #include #include +#include #include "config.h" @@ -131,7 +132,10 @@ _create_logs_dir(void) void _cleanup_dirs(void) { - system("rm -rf ./stabbertests/files"); + int res = system("rm -rf ./stabbertests/files"); + if (res == -1) { + assert_true(FALSE); + } } void From 2241473ee62b7d5d60d20ef0c264e6080cbba8db Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 24 May 2015 00:56:13 +0100 Subject: [PATCH 06/44] Added bad password test --- src/otr/otr.c | 5 ++++- stabbertests/proftest.c | 18 ++++++++++++++++++ stabbertests/test_connect.c | 25 +++++++++++++++++++------ stabbertests/test_connect.h | 3 ++- stabbertests/testsuite.c | 5 ++++- 5 files changed, 47 insertions(+), 9 deletions(-) diff --git a/src/otr/otr.c b/src/otr/otr.c index e568af56..4d97cfb9 100644 --- a/src/otr/otr.c +++ b/src/otr/otr.c @@ -163,6 +163,8 @@ otr_init(void) log_info("Initialising OTR"); OTRL_INIT; + jid = NULL; + ops.policy = cb_policy; ops.is_logged_in = cb_is_logged_in; ops.inject_message = cb_inject_message; @@ -181,6 +183,7 @@ otr_shutdown(void) { if (jid) { free(jid); + jid = NULL; } } @@ -747,4 +750,4 @@ void otr_free_message(char *message) { otrl_message_free(message); -} \ No newline at end of file +} diff --git a/stabbertests/proftest.c b/stabbertests/proftest.c index 6c44a6ee..e8409907 100644 --- a/stabbertests/proftest.c +++ b/stabbertests/proftest.c @@ -10,6 +10,8 @@ #include #include +#include + #include "config.h" #include "config/preferences.h" @@ -29,6 +31,9 @@ #define XDG_CONFIG_HOME "./stabbertests/files/xdg_config_home" #define XDG_DATA_HOME "./stabbertests/files/xdg_data_home" +char *config_orig; +char *data_orig; + void prof_process_xmpp(void) { @@ -141,6 +146,14 @@ _cleanup_dirs(void) void init_prof_test(void **state) { + if (stbbr_start(5230) != 0) { + assert_true(FALSE); + return; + } + + config_orig = getenv("XDG_CONFIG_HOME"); + data_orig = getenv("XDG_DATA_HOME"); + setenv("XDG_CONFIG_HOME", XDG_CONFIG_HOME, 1); setenv("XDG_DATA_HOME", XDG_DATA_HOME, 1); @@ -196,4 +209,9 @@ close_prof_test(void **state) log_close(); _cleanup_dirs(); + + setenv("XDG_CONFIG_HOME", config_orig, 1); + setenv("XDG_DATA_HOME", data_orig, 1); + + stbbr_stop(); } diff --git a/stabbertests/test_connect.c b/stabbertests/test_connect.c index 5f4027bf..bc145da8 100644 --- a/stabbertests/test_connect.c +++ b/stabbertests/test_connect.c @@ -14,16 +14,11 @@ #include "command/command.h" void -connect_with_jid(void **state) +connect_jid(void **state) { char *connect = "/connect stabber@localhost port 5230"; char *password = "password"; - if (stbbr_start(5230) != 0) { - assert_true(FALSE); - return; - } - stbbr_auth_passwd(password); will_return(ui_ask_password, strdup(password)); @@ -35,3 +30,21 @@ connect_with_jid(void **state) jabber_conn_status_t status = jabber_get_connection_status(); assert_true(status == JABBER_CONNECTED); } + +void +connect_bad_password(void **state) +{ + char *connect = "/connect stabber@localhost port 5230"; + + stbbr_auth_passwd("password"); + will_return(ui_ask_password, strdup("badpassword")); + + expect_cons_show("Connecting as stabber@localhost"); + expect_cons_show_error("Login failed."); + + cmd_process_input(strdup(connect)); + prof_process_xmpp(); + + jabber_conn_status_t status = jabber_get_connection_status(); + assert_true(status == JABBER_DISCONNECTED); +} diff --git a/stabbertests/test_connect.h b/stabbertests/test_connect.h index 9716c6a9..999d9d08 100644 --- a/stabbertests/test_connect.h +++ b/stabbertests/test_connect.h @@ -1 +1,2 @@ -void connect_with_jid(void **state); +void connect_jid(void **state); +void connect_bad_password(void **state); diff --git a/stabbertests/testsuite.c b/stabbertests/testsuite.c index 467884ff..bde4eacf 100644 --- a/stabbertests/testsuite.c +++ b/stabbertests/testsuite.c @@ -15,7 +15,10 @@ int main(int argc, char* argv[]) { const UnitTest all_tests[] = { - unit_test_setup_teardown(connect_with_jid, + unit_test_setup_teardown(connect_jid, + init_prof_test, + close_prof_test), + unit_test_setup_teardown(connect_bad_password, init_prof_test, close_prof_test), }; From 80665ea0514a6a9b93af7858a3db1467091f80df Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 24 May 2015 04:13:28 +0100 Subject: [PATCH 07/44] Added rooms iq test --- src/event/client_events.c | 2 +- src/otr/otr.c | 3 ++- src/ui/windows.h | 2 ++ stabbertests/proftest.c | 5 +++++ stabbertests/test_connect.c | 28 ++++++++++++++++++---------- stabbertests/test_connect.h | 2 ++ stabbertests/testsuite.c | 3 +++ 7 files changed, 33 insertions(+), 12 deletions(-) diff --git a/src/event/client_events.c b/src/event/client_events.c index f0f763a6..8f8501e1 100644 --- a/src/event/client_events.c +++ b/src/event/client_events.c @@ -92,4 +92,4 @@ cl_ev_send_priv_msg(ProfPrivateWin *privwin, const char * const msg) { message_send_private(privwin->fulljid, msg); ui_outgoing_private_msg(privwin, msg); -} \ No newline at end of file +} diff --git a/src/otr/otr.c b/src/otr/otr.c index 4d97cfb9..1f63c8f9 100644 --- a/src/otr/otr.c +++ b/src/otr/otr.c @@ -645,7 +645,8 @@ otr_get_their_fingerprint(const char * const recipient) prof_otrpolicy_t otr_get_policy(const char * const recipient) { - ProfAccount *account = accounts_get_account(jabber_get_account_name()); + char *account_name = jabber_get_account_name(); + ProfAccount *account = accounts_get_account(account_name); // check contact specific setting if (g_list_find_custom(account->otr_manual, recipient, (GCompareFunc)g_strcmp0)) { account_free(account); diff --git a/src/ui/windows.h b/src/ui/windows.h index 97183d51..4cc527ca 100644 --- a/src/ui/windows.h +++ b/src/ui/windows.h @@ -35,6 +35,8 @@ #ifndef UI_WINDOWS_H #define UI_WINDOWS_H +#include "ui/window.h" + void wins_init(void); ProfWin * wins_new_xmlconsole(void); diff --git a/stabbertests/proftest.c b/stabbertests/proftest.c index e8409907..96c0cb69 100644 --- a/stabbertests/proftest.c +++ b/stabbertests/proftest.c @@ -19,6 +19,7 @@ #include "xmpp/xmpp.h" #include "command/command.h" #include "roster_list.h" +#include "ui/windows.h" #ifdef HAVE_GIT_VERSION #include "gitversion.h" @@ -157,6 +158,8 @@ init_prof_test(void **state) setenv("XDG_CONFIG_HOME", XDG_CONFIG_HOME, 1); setenv("XDG_DATA_HOME", XDG_DATA_HOME, 1); + _cleanup_dirs(); + _create_config_dir(); _create_data_dir(); _create_chatlogs_dir(); @@ -188,12 +191,14 @@ init_prof_test(void **state) #ifdef HAVE_LIBOTR otr_init(); #endif + wins_init(); } void close_prof_test(void **state) { jabber_disconnect(); + prof_process_xmpp(); jabber_shutdown(); roster_free(); muc_close(); diff --git a/stabbertests/test_connect.c b/stabbertests/test_connect.c index bc145da8..a09b8661 100644 --- a/stabbertests/test_connect.c +++ b/stabbertests/test_connect.c @@ -11,20 +11,17 @@ #include "proftest.h" #include "xmpp/xmpp.h" #include "ui/stub_ui.h" +#include "ui/window.h" #include "command/command.h" void connect_jid(void **state) { - char *connect = "/connect stabber@localhost port 5230"; - char *password = "password"; - - stbbr_auth_passwd(password); - will_return(ui_ask_password, strdup(password)); + will_return(ui_ask_password, strdup("password")); expect_cons_show("Connecting as stabber@localhost"); - cmd_process_input(strdup(connect)); + cmd_process_input(strdup("/connect stabber@localhost port 5230")); prof_process_xmpp(); jabber_conn_status_t status = jabber_get_connection_status(); @@ -34,17 +31,28 @@ connect_jid(void **state) void connect_bad_password(void **state) { - char *connect = "/connect stabber@localhost port 5230"; - - stbbr_auth_passwd("password"); will_return(ui_ask_password, strdup("badpassword")); expect_cons_show("Connecting as stabber@localhost"); expect_cons_show_error("Login failed."); - cmd_process_input(strdup(connect)); + cmd_process_input(strdup("/connect stabber@localhost port 5230")); prof_process_xmpp(); jabber_conn_status_t status = jabber_get_connection_status(); assert_true(status == JABBER_DISCONNECTED); } + +void +sends_rooms_iq(void **state) +{ + will_return(ui_ask_password, strdup("password")); + + expect_any_cons_show(); + + cmd_process_input(strdup("/connect stabber@localhost port 5230")); + prof_process_xmpp(); + + cmd_process_input(strdup("/rooms")); + prof_process_xmpp(); +} diff --git a/stabbertests/test_connect.h b/stabbertests/test_connect.h index 999d9d08..968740c2 100644 --- a/stabbertests/test_connect.h +++ b/stabbertests/test_connect.h @@ -1,2 +1,4 @@ void connect_jid(void **state); void connect_bad_password(void **state); +void sends_rooms_iq(void **state); + diff --git a/stabbertests/testsuite.c b/stabbertests/testsuite.c index bde4eacf..9fb28c31 100644 --- a/stabbertests/testsuite.c +++ b/stabbertests/testsuite.c @@ -21,6 +21,9 @@ int main(int argc, char* argv[]) { unit_test_setup_teardown(connect_bad_password, init_prof_test, close_prof_test), + unit_test_setup_teardown(sends_rooms_iq, + init_prof_test, + close_prof_test), }; return run_tests(all_tests); From 766b4e0e5f9a5a3517dd7f8e2740c32496d17c4d Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 24 May 2015 18:35:06 +0100 Subject: [PATCH 08/44] Added rooms iq verification --- stabbertests/test_connect.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/stabbertests/test_connect.c b/stabbertests/test_connect.c index a09b8661..72f38a36 100644 --- a/stabbertests/test_connect.c +++ b/stabbertests/test_connect.c @@ -55,4 +55,10 @@ sends_rooms_iq(void **state) cmd_process_input(strdup("/rooms")); prof_process_xmpp(); + + assert_true(stbbr_verify_last( + "" + "" + "" + )); } From cddc55b51b2614e5ea74903c622233a329f81d98 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 24 May 2015 18:45:17 +0100 Subject: [PATCH 09/44] Prime rooms query response --- stabbertests/test_connect.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/stabbertests/test_connect.c b/stabbertests/test_connect.c index 72f38a36..1b69a990 100644 --- a/stabbertests/test_connect.c +++ b/stabbertests/test_connect.c @@ -53,6 +53,15 @@ sends_rooms_iq(void **state) cmd_process_input(strdup("/connect stabber@localhost port 5230")); prof_process_xmpp(); + stbbr_for("confreq", + "" + "" + "" + "" + "" + "" + ); + cmd_process_input(strdup("/rooms")); prof_process_xmpp(); From 79ecff1c52dccf93db451635c596dedf49bf8609 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 24 May 2015 19:24:01 +0100 Subject: [PATCH 10/44] Added ping test --- stabbertests/proftest.c | 6 ++--- stabbertests/proftest.h | 2 +- stabbertests/test_connect.c | 47 +++++++++++++++++++++++++++++++++---- stabbertests/test_connect.h | 1 + stabbertests/testsuite.c | 3 +++ 5 files changed, 51 insertions(+), 8 deletions(-) diff --git a/stabbertests/proftest.c b/stabbertests/proftest.c index 96c0cb69..d20e9f3a 100644 --- a/stabbertests/proftest.c +++ b/stabbertests/proftest.c @@ -36,10 +36,10 @@ char *config_orig; char *data_orig; void -prof_process_xmpp(void) +prof_process_xmpp(int loops) { int i = 0; - while (i < 20) { + while (i < loops) { jabber_process_events(10); i++; } @@ -198,7 +198,7 @@ void close_prof_test(void **state) { jabber_disconnect(); - prof_process_xmpp(); + prof_process_xmpp(20); jabber_shutdown(); roster_free(); muc_close(); diff --git a/stabbertests/proftest.h b/stabbertests/proftest.h index e0b6dded..2feb0346 100644 --- a/stabbertests/proftest.h +++ b/stabbertests/proftest.h @@ -1,3 +1,3 @@ void init_prof_test(void **state); void close_prof_test(void **state); -void prof_process_xmpp(void); +void prof_process_xmpp(int loops); diff --git a/stabbertests/test_connect.c b/stabbertests/test_connect.c index 1b69a990..bfc8c69a 100644 --- a/stabbertests/test_connect.c +++ b/stabbertests/test_connect.c @@ -22,7 +22,7 @@ connect_jid(void **state) expect_cons_show("Connecting as stabber@localhost"); cmd_process_input(strdup("/connect stabber@localhost port 5230")); - prof_process_xmpp(); + prof_process_xmpp(20); jabber_conn_status_t status = jabber_get_connection_status(); assert_true(status == JABBER_CONNECTED); @@ -37,7 +37,7 @@ connect_bad_password(void **state) expect_cons_show_error("Login failed."); cmd_process_input(strdup("/connect stabber@localhost port 5230")); - prof_process_xmpp(); + prof_process_xmpp(20); jabber_conn_status_t status = jabber_get_connection_status(); assert_true(status == JABBER_DISCONNECTED); @@ -51,7 +51,7 @@ sends_rooms_iq(void **state) expect_any_cons_show(); cmd_process_input(strdup("/connect stabber@localhost port 5230")); - prof_process_xmpp(); + prof_process_xmpp(20); stbbr_for("confreq", "" @@ -63,7 +63,7 @@ sends_rooms_iq(void **state) ); cmd_process_input(strdup("/rooms")); - prof_process_xmpp(); + prof_process_xmpp(20); assert_true(stbbr_verify_last( "" @@ -71,3 +71,42 @@ sends_rooms_iq(void **state) "" )); } + +void +multiple_pings(void **state) +{ + will_return(ui_ask_password, strdup("password")); + + expect_any_cons_show(); + + cmd_process_input(strdup("/connect stabber@localhost port 5230")); + prof_process_xmpp(20); + + expect_cons_show("Pinged server..."); + expect_any_cons_show(); + expect_cons_show("Pinged server..."); + expect_any_cons_show(); + + stbbr_for("prof_ping_1", + "" + ); + stbbr_for("prof_ping_2", + "" + ); + + cmd_process_input(strdup("/ping")); + prof_process_xmpp(20); + cmd_process_input(strdup("/ping")); + prof_process_xmpp(20); + + assert_true(stbbr_verify( + "" + "" + "" + )); + assert_true(stbbr_verify( + "" + "" + "" + )); +} diff --git a/stabbertests/test_connect.h b/stabbertests/test_connect.h index 968740c2..0bf018cd 100644 --- a/stabbertests/test_connect.h +++ b/stabbertests/test_connect.h @@ -1,4 +1,5 @@ void connect_jid(void **state); void connect_bad_password(void **state); void sends_rooms_iq(void **state); +void multiple_pings(void **state); diff --git a/stabbertests/testsuite.c b/stabbertests/testsuite.c index 9fb28c31..6905aeec 100644 --- a/stabbertests/testsuite.c +++ b/stabbertests/testsuite.c @@ -24,6 +24,9 @@ int main(int argc, char* argv[]) { unit_test_setup_teardown(sends_rooms_iq, init_prof_test, close_prof_test), + unit_test_setup_teardown(multiple_pings, + init_prof_test, + close_prof_test), }; return run_tests(all_tests); From e295a474dcbf1633d3b7e4e8403bbcf3e84adc90 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 24 May 2015 20:31:18 +0100 Subject: [PATCH 11/44] Added more connect tests --- .gitignore | 3 +- Makefile.am | 10 +-- src/common.c | 9 ++- src/common.h | 1 + stabbertests/proftest.c | 1 + .../{testsuite.c => stabbertestsuite.c} | 10 +++ stabbertests/test_connect.c | 78 ++++++++++++++++++- stabbertests/test_connect.h | 4 +- 8 files changed, 107 insertions(+), 9 deletions(-) rename stabbertests/{testsuite.c => stabbertestsuite.c} (66%) diff --git a/.gitignore b/.gitignore index 6be27ed5..c3d9a977 100644 --- a/.gitignore +++ b/.gitignore @@ -69,4 +69,5 @@ callgrind.out.* gen_docs.sh main_fragment.html toc_fragment.html -stabbertests/testsuite.trs +stabbertests/stabbertestsuite +stabbertests/stabbertestsuite.trs diff --git a/Makefile.am b/Makefile.am index d3aed4e9..cae3a268 100644 --- a/Makefile.am +++ b/Makefile.am @@ -131,7 +131,7 @@ stabbertest_sources = \ stabbertests/ui/stub_ui.c \ stabbertests/proftest.c stabbertests/proftest.h \ stabbertests/test_connect.c stabbertests/test_connect.h \ - stabbertests/testsuite.c + stabbertests/stabbertestsuite.c main_source = src/main.c @@ -174,12 +174,12 @@ if INCLUDE_GIT_VERSION BUILT_SOURCES = $(git_include) endif -TESTS = tests/testsuite stabbertests/testsuite -check_PROGRAMS = tests/testsuite stabbertests/testsuite +TESTS = tests/testsuite stabbertests/stabbertestsuite +check_PROGRAMS = tests/testsuite stabbertests/stabbertestsuite tests_testsuite_SOURCES = $(test_sources) tests_testsuite_LDADD = -lcmocka -stabbertests_testsuite_SOURCES = $(stabbertest_sources) -stabbertests_testsuite_LDADD = -lcmocka -lstabber -lpthread +stabbertests_stabbertestsuite_SOURCES = $(stabbertest_sources) +stabbertests_stabbertestsuite_LDADD = -lcmocka -lstabber -lpthread man_MANS = $(man_sources) diff --git a/src/common.c b/src/common.c index 772e24d3..4fa45608 100644 --- a/src/common.c +++ b/src/common.c @@ -57,6 +57,8 @@ struct curl_data_t size_t size; }; +static unsigned long unique_id = 0; + static size_t _data_callback(void *ptr, size_t size, size_t nmemb, void *data); // taken from glib 2.30.3 @@ -469,7 +471,6 @@ xdg_get_data_home(void) char * create_unique_id(char *prefix) { - static unsigned long unique_id; char *result = NULL; GString *result_str = g_string_new(""); @@ -485,6 +486,12 @@ create_unique_id(char *prefix) return result; } +void +reset_unique_id(void) +{ + unique_id = 0; +} + char * p_sha1_hash(char *str) { diff --git a/src/common.h b/src/common.h index 9521a701..c1aa532d 100644 --- a/src/common.h +++ b/src/common.h @@ -127,6 +127,7 @@ contact_presence_t contact_presence_from_resource_presence(resource_presence_t r char * p_sha1_hash(char *str); char * create_unique_id(char *prefix); +void reset_unique_id(void); int cmp_win_num(gconstpointer a, gconstpointer b); int get_next_available_win_num(GList *used); diff --git a/stabbertests/proftest.c b/stabbertests/proftest.c index d20e9f3a..e3f7f6a6 100644 --- a/stabbertests/proftest.c +++ b/stabbertests/proftest.c @@ -212,6 +212,7 @@ close_prof_test(void **state) accounts_close(); cmd_uninit(); log_close(); + reset_unique_id(); _cleanup_dirs(); diff --git a/stabbertests/testsuite.c b/stabbertests/stabbertestsuite.c similarity index 66% rename from stabbertests/testsuite.c rename to stabbertests/stabbertestsuite.c index 6905aeec..03b751ae 100644 --- a/stabbertests/testsuite.c +++ b/stabbertests/stabbertestsuite.c @@ -15,9 +15,19 @@ int main(int argc, char* argv[]) { const UnitTest all_tests[] = { + unit_test_setup_teardown(connect_jid, init_prof_test, close_prof_test), + unit_test_setup_teardown(connect_jid_requests_roster, + init_prof_test, + close_prof_test), + unit_test_setup_teardown(connect_jid_sends_presence_after_receiving_roster, + init_prof_test, + close_prof_test), + unit_test_setup_teardown(connect_jid_requests_bookmarks, + init_prof_test, + close_prof_test), unit_test_setup_teardown(connect_bad_password, init_prof_test, close_prof_test), diff --git a/stabbertests/test_connect.c b/stabbertests/test_connect.c index bfc8c69a..1176a71f 100644 --- a/stabbertests/test_connect.c +++ b/stabbertests/test_connect.c @@ -18,7 +18,6 @@ void connect_jid(void **state) { will_return(ui_ask_password, strdup("password")); - expect_cons_show("Connecting as stabber@localhost"); cmd_process_input(strdup("/connect stabber@localhost port 5230")); @@ -28,6 +27,63 @@ connect_jid(void **state) assert_true(status == JABBER_CONNECTED); } +void +connect_jid_requests_roster(void **state) +{ + will_return(ui_ask_password, strdup("password")); + expect_any_cons_show(); + + cmd_process_input(strdup("/connect stabber@localhost port 5230")); + prof_process_xmpp(20); + + assert_true(stbbr_verify( + "" + )); +} + +void +connect_jid_sends_presence_after_receiving_roster(void **state) +{ + will_return(ui_ask_password, strdup("password")); + expect_any_cons_show(); + + stbbr_for("roster", + "" + "" + "" + "" + "" + "" + ); + + cmd_process_input(strdup("/connect stabber@localhost port 5230")); + prof_process_xmpp(20); + + assert_true(stbbr_verify( + "" + "" + "" + )); +} + +void +connect_jid_requests_bookmarks(void **state) +{ + will_return(ui_ask_password, strdup("password")); + expect_any_cons_show(); + + cmd_process_input(strdup("/connect stabber@localhost port 5230")); + prof_process_xmpp(20); + + assert_true(stbbr_verify( + "" + "" + "" + "" + "" + )); +} + void connect_bad_password(void **state) { @@ -43,6 +99,26 @@ connect_bad_password(void **state) assert_true(status == JABBER_DISCONNECTED); } +//void +//connect_loads_roster(void **state) +//{ +// will_return(ui_ask_password, strdup("password")); +// +// expect_any_cons_show(); +// +// stbbr_for("roster", +// "" +// "" +// "" +// "" +// "" +// "" +// ); +// +// cmd_process_input(strdup("/connect stabber@localhost port 5230")); +// prof_process_xmpp(20); +//} + void sends_rooms_iq(void **state) { diff --git a/stabbertests/test_connect.h b/stabbertests/test_connect.h index 0bf018cd..df66da05 100644 --- a/stabbertests/test_connect.h +++ b/stabbertests/test_connect.h @@ -1,5 +1,7 @@ void connect_jid(void **state); +void connect_jid_requests_roster(void **state); +void connect_jid_sends_presence_after_receiving_roster(void **state); +void connect_jid_requests_bookmarks(void **state); void connect_bad_password(void **state); void sends_rooms_iq(void **state); void multiple_pings(void **state); - From 16b88a6d8f179831c69cb1f5d56ff7c908e6973d Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 24 May 2015 20:56:12 +0100 Subject: [PATCH 12/44] Use wildcards --- stabbertests/test_connect.c | 28 ++++------------------------ 1 file changed, 4 insertions(+), 24 deletions(-) diff --git a/stabbertests/test_connect.c b/stabbertests/test_connect.c index 1176a71f..e8a4a3ce 100644 --- a/stabbertests/test_connect.c +++ b/stabbertests/test_connect.c @@ -37,7 +37,7 @@ connect_jid_requests_roster(void **state) prof_process_xmpp(20); assert_true(stbbr_verify( - "" + "" )); } @@ -60,8 +60,8 @@ connect_jid_sends_presence_after_receiving_roster(void **state) prof_process_xmpp(20); assert_true(stbbr_verify( - "" - "" + "" + "" "" )); } @@ -76,7 +76,7 @@ connect_jid_requests_bookmarks(void **state) prof_process_xmpp(20); assert_true(stbbr_verify( - "" + "" "" "" "" @@ -99,26 +99,6 @@ connect_bad_password(void **state) assert_true(status == JABBER_DISCONNECTED); } -//void -//connect_loads_roster(void **state) -//{ -// will_return(ui_ask_password, strdup("password")); -// -// expect_any_cons_show(); -// -// stbbr_for("roster", -// "" -// "" -// "" -// "" -// "" -// "" -// ); -// -// cmd_process_input(strdup("/connect stabber@localhost port 5230")); -// prof_process_xmpp(20); -//} - void sends_rooms_iq(void **state) { From 7fb00a1e15b192c852e7960708276f5915dc70ab Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 24 May 2015 21:46:44 +0100 Subject: [PATCH 13/44] Added ping response test --- stabbertests/stabbertestsuite.c | 3 +++ stabbertests/test_connect.c | 22 ++++++++++++++++++++++ stabbertests/test_connect.h | 1 + 3 files changed, 26 insertions(+) diff --git a/stabbertests/stabbertestsuite.c b/stabbertests/stabbertestsuite.c index 03b751ae..335ddce5 100644 --- a/stabbertests/stabbertestsuite.c +++ b/stabbertests/stabbertestsuite.c @@ -37,6 +37,9 @@ int main(int argc, char* argv[]) { unit_test_setup_teardown(multiple_pings, init_prof_test, close_prof_test), + unit_test_setup_teardown(responds_to_ping, + init_prof_test, + close_prof_test), }; return run_tests(all_tests); diff --git a/stabbertests/test_connect.c b/stabbertests/test_connect.c index e8a4a3ce..87079b0b 100644 --- a/stabbertests/test_connect.c +++ b/stabbertests/test_connect.c @@ -166,3 +166,25 @@ multiple_pings(void **state) "" )); } + +void +responds_to_ping(void **state) +{ + will_return(ui_ask_password, strdup("password")); + + expect_any_cons_show(); + + cmd_process_input(strdup("/connect stabber@localhost port 5230")); + prof_process_xmpp(20); + + stbbr_send( + "" + "" + ""); + + prof_process_xmpp(20); + + assert_true(stbbr_verify( + "" + )); +} diff --git a/stabbertests/test_connect.h b/stabbertests/test_connect.h index df66da05..8e80b113 100644 --- a/stabbertests/test_connect.h +++ b/stabbertests/test_connect.h @@ -5,3 +5,4 @@ void connect_jid_requests_bookmarks(void **state); void connect_bad_password(void **state); void sends_rooms_iq(void **state); void multiple_pings(void **state); +void responds_to_ping(void **state); From af73cb82e6552314e41b01043e086f9d55b1d8d4 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 24 May 2015 21:50:05 +0100 Subject: [PATCH 14/44] Include resource in ping test --- stabbertests/test_connect.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/stabbertests/test_connect.c b/stabbertests/test_connect.c index 87079b0b..1c833c82 100644 --- a/stabbertests/test_connect.c +++ b/stabbertests/test_connect.c @@ -178,13 +178,14 @@ responds_to_ping(void **state) prof_process_xmpp(20); stbbr_send( - "" + "" "" - ""); + "" + ); prof_process_xmpp(20); assert_true(stbbr_verify( - "" + "" )); } From 06b18be8514eab863f3a65262a36fcbd8a0f2f62 Mon Sep 17 00:00:00 2001 From: James Booth Date: Mon, 25 May 2015 02:18:31 +0100 Subject: [PATCH 15/44] Added custom resource checker --- Makefile.am | 1 + stabbertests/checkers/checkers.c | 26 ++++++++++++++++ stabbertests/checkers/checkers.h | 6 ++++ stabbertests/proftest.h | 5 +++ stabbertests/stabbertestsuite.c | 3 ++ stabbertests/test_connect.c | 53 +++++++++++++++++++++++++++++++- stabbertests/test_connect.h | 1 + 7 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 stabbertests/checkers/checkers.c create mode 100644 stabbertests/checkers/checkers.h diff --git a/Makefile.am b/Makefile.am index cae3a268..8fdb5c54 100644 --- a/Makefile.am +++ b/Makefile.am @@ -130,6 +130,7 @@ stabbertest_sources = \ src/config/theme.c src/config/theme.h \ stabbertests/ui/stub_ui.c \ stabbertests/proftest.c stabbertests/proftest.h \ + stabbertests/checkers/checkers.c stabbertests/checkers/checkers.h \ stabbertests/test_connect.c stabbertests/test_connect.h \ stabbertests/stabbertestsuite.c diff --git a/stabbertests/checkers/checkers.c b/stabbertests/checkers/checkers.c new file mode 100644 index 00000000..6709dc97 --- /dev/null +++ b/stabbertests/checkers/checkers.c @@ -0,0 +1,26 @@ +#include "resource.h" + +int +resource_equal_check(void *param, void *value) +{ + Resource *param_res = (Resource *)param; + Resource *value_res = (Resource *)value; + + if (g_strcmp0(param_res->name, value_res->name) != 0) { + return 0; + } + + if (param_res->presence != value_res->presence) { + return 0; + } + + if (param_res->priority != value_res->priority) { + return 0; + } + + if (g_strcmp0(param_res->status, value_res->status) != 0) { + return 0; + } + + return 1; +} diff --git a/stabbertests/checkers/checkers.h b/stabbertests/checkers/checkers.h new file mode 100644 index 00000000..64654c77 --- /dev/null +++ b/stabbertests/checkers/checkers.h @@ -0,0 +1,6 @@ +#ifndef __H_CHECKERS +#define __H_CHECKERS + +int resource_equal_check(void *param, void *value); + +#endif \ No newline at end of file diff --git a/stabbertests/proftest.h b/stabbertests/proftest.h index 2feb0346..7d95db93 100644 --- a/stabbertests/proftest.h +++ b/stabbertests/proftest.h @@ -1,3 +1,8 @@ +#ifndef __H_PROFTEST +#define __H_PROFTEST + void init_prof_test(void **state); void close_prof_test(void **state); void prof_process_xmpp(int loops); + +#endif \ No newline at end of file diff --git a/stabbertests/stabbertestsuite.c b/stabbertests/stabbertestsuite.c index 335ddce5..a54b94dc 100644 --- a/stabbertests/stabbertestsuite.c +++ b/stabbertests/stabbertestsuite.c @@ -31,6 +31,9 @@ int main(int argc, char* argv[]) { unit_test_setup_teardown(connect_bad_password, init_prof_test, close_prof_test), + unit_test_setup_teardown(show_presence_updates, + init_prof_test, + close_prof_test), unit_test_setup_teardown(sends_rooms_iq, init_prof_test, close_prof_test), diff --git a/stabbertests/test_connect.c b/stabbertests/test_connect.c index 1c833c82..759dc4e5 100644 --- a/stabbertests/test_connect.c +++ b/stabbertests/test_connect.c @@ -9,6 +9,7 @@ #include #include "proftest.h" +#include "checkers/checkers.h" #include "xmpp/xmpp.h" #include "ui/stub_ui.h" #include "ui/window.h" @@ -99,6 +100,57 @@ connect_bad_password(void **state) assert_true(status == JABBER_DISCONNECTED); } +void +show_presence_updates(void **state) +{ + will_return(ui_ask_password, strdup("password")); + expect_any_cons_show(); + + stbbr_for("roster", + "" + "" + "" + "" + "" + "" + ); + + cmd_process_input(strdup("/connect stabber@localhost port 5230")); + prof_process_xmpp(20); + + stbbr_send( + "" + "dnd" + "busy!" + "" + "" + "chat" + "Talk to me!" + "" + "" + "away" + "Out of office" + "" + ); + + Resource *resource1 = resource_new("mobile", RESOURCE_DND, "busy!", 0); + expect_string(ui_contact_online, barejid, "buddy1@localhost"); + expect_check(ui_contact_online, resource, (CheckParameterValue)resource_equal_check, resource1); + expect_value(ui_contact_online, last_activity, NULL); + + Resource *resource2 = resource_new("laptop", RESOURCE_CHAT, "Talk to me!", 0); + expect_string(ui_contact_online, barejid, "buddy1@localhost"); + expect_check(ui_contact_online, resource, (CheckParameterValue)resource_equal_check, resource2); + expect_value(ui_contact_online, last_activity, NULL); + + Resource *resource3 = resource_new("work", RESOURCE_AWAY, "Out of office", 0); + expect_string(ui_contact_online, barejid, "buddy2@localhost"); + expect_check(ui_contact_online, resource, (CheckParameterValue)resource_equal_check, resource3); + expect_value(ui_contact_online, last_activity, NULL); + + prof_process_xmpp(20); +} + void sends_rooms_iq(void **state) { @@ -182,7 +234,6 @@ responds_to_ping(void **state) "" "" ); - prof_process_xmpp(20); assert_true(stbbr_verify( diff --git a/stabbertests/test_connect.h b/stabbertests/test_connect.h index 8e80b113..971652b0 100644 --- a/stabbertests/test_connect.h +++ b/stabbertests/test_connect.h @@ -3,6 +3,7 @@ void connect_jid_requests_roster(void **state); void connect_jid_sends_presence_after_receiving_roster(void **state); void connect_jid_requests_bookmarks(void **state); void connect_bad_password(void **state); +void show_presence_updates(void **state); void sends_rooms_iq(void **state); void multiple_pings(void **state); void responds_to_ping(void **state); From 940f6d5f3cbac82f652bbe74e799800c5c2bd0af Mon Sep 17 00:00:00 2001 From: James Booth Date: Tue, 26 May 2015 01:07:47 +0100 Subject: [PATCH 16/44] Added expect test --- expecttest.c | 40 ++++++++++++++++++++++++++++++++++++++++ makeexpecttest.sh | 1 + 2 files changed, 41 insertions(+) create mode 100644 expecttest.c create mode 100755 makeexpecttest.sh diff --git a/expecttest.c b/expecttest.c new file mode 100644 index 00000000..2159ed02 --- /dev/null +++ b/expecttest.c @@ -0,0 +1,40 @@ +#include +#include +#include +#include + +#define CONNECT_CMD "/connect stabber@localhost port 5230\r" +#define PASSWORD "password\r" +#define QUIT_CMD "/quit\r" + +int main(void) +{ + stbbr_start(5230); + + int res = 0; + int fd = exp_spawnl("./profanity"); + FILE *fp = fdopen(fd, "r+"); + setbuf(fp, (char *)0); + + res = exp_expectl(fd, exp_exact, "Profanity. Type /help for help information.", 10, exp_end); + assert(res == 10); + + write(fd, CONNECT_CMD, strlen(CONNECT_CMD)); + res = exp_expectl(fd, exp_exact, "Enter password:", 11, exp_end); + assert(res == 11); + + write(fd, PASSWORD, strlen(PASSWORD)); + res = exp_expectl(fd, exp_exact, "Connecting with account stabber@localhost", 12, exp_end); + assert(res == 12); + res = exp_expectl(fd, exp_exact, "stabber@localhost logged in successfully", 13, exp_end); + assert(res == 13); + + write(fd, QUIT_CMD, strlen(QUIT_CMD)); + sleep(1); + + printf("\n"); + printf("\n"); + printf("PID: %d\n", exp_pid); + + stbbr_stop(); +} diff --git a/makeexpecttest.sh b/makeexpecttest.sh new file mode 100755 index 00000000..3e690a01 --- /dev/null +++ b/makeexpecttest.sh @@ -0,0 +1 @@ +gcc -I/usr/include/tcl8.6 expecttest.c -o expecttest -lexpect -ltcl -lstabber From c2fde7c2639f318f8d4839955e7b7e17456e0564 Mon Sep 17 00:00:00 2001 From: James Booth Date: Tue, 26 May 2015 21:59:22 +0100 Subject: [PATCH 17/44] Added to stabber/expect test --- expecttest.c | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/expecttest.c b/expecttest.c index 2159ed02..6e54b447 100644 --- a/expecttest.c +++ b/expecttest.c @@ -1,4 +1,6 @@ #include +#include +#include #include #include #include @@ -10,10 +12,24 @@ int main(void) { stbbr_start(5230); + stbbr_for("roster", + "" + "" + "" + "" + "" + "" + ); int res = 0; - int fd = exp_spawnl("./profanity"); + int fd = exp_spawnl("./profanity", NULL); FILE *fp = fdopen(fd, "r+"); + + if (fp == NULL) { + perror(NULL); + return 0; + } + setbuf(fp, (char *)0); res = exp_expectl(fd, exp_exact, "Profanity. Type /help for help information.", 10, exp_end); @@ -28,10 +44,19 @@ int main(void) assert(res == 12); res = exp_expectl(fd, exp_exact, "stabber@localhost logged in successfully", 13, exp_end); assert(res == 13); + + sleep(1); + assert(stbbr_verify( + "" + "" + "" + )); + + stbbr_send(); write(fd, QUIT_CMD, strlen(QUIT_CMD)); sleep(1); - + printf("\n"); printf("\n"); printf("PID: %d\n", exp_pid); From e2fa67faff94bd4cb867837632c59dfa0d633c87 Mon Sep 17 00:00:00 2001 From: James Booth Date: Tue, 26 May 2015 23:22:05 +0100 Subject: [PATCH 18/44] Use libexpect in stabber test --- Makefile.am | 40 +-- expecttest.c | 2 - stabbertests/checkers/checkers.c | 26 -- stabbertests/checkers/checkers.h | 6 - stabbertests/proftest.c | 78 +---- stabbertests/proftest.h | 5 +- stabbertests/stabbertestsuite.c | 48 +-- stabbertests/test_connect.c | 446 ++++++++++++++------------- stabbertests/test_connect.h | 16 +- stabbertests/ui/stub_ui.c | 511 ------------------------------- stabbertests/ui/stub_ui.h | 6 - 11 files changed, 279 insertions(+), 905 deletions(-) delete mode 100644 stabbertests/checkers/checkers.c delete mode 100644 stabbertests/checkers/checkers.h delete mode 100644 stabbertests/ui/stub_ui.c delete mode 100644 stabbertests/ui/stub_ui.h diff --git a/Makefile.am b/Makefile.am index 8fdb5c54..34ec30d2 100644 --- a/Makefile.am +++ b/Makefile.am @@ -95,42 +95,7 @@ test_sources = \ tests/testsuite.c stabbertest_sources = \ - src/contact.c src/contact.h src/log.c src/common.c \ - src/log.h src/profanity.c src/common.h \ - src/profanity.h src/chat_session.c \ - src/chat_session.h src/muc.c src/muc.h src/jid.h src/jid.c \ - src/chat_state.h src/chat_state.c \ - src/resource.c src/resource.h \ - src/roster_list.c src/roster_list.h \ - src/xmpp/xmpp.h src/xmpp/capabilities.c src/xmpp/connection.c \ - src/xmpp/iq.c src/xmpp/message.c src/xmpp/presence.c src/xmpp/stanza.c \ - src/xmpp/stanza.h src/xmpp/message.h src/xmpp/iq.h src/xmpp/presence.h \ - src/xmpp/capabilities.h src/xmpp/connection.h \ - src/xmpp/roster.c src/xmpp/roster.h \ - src/xmpp/bookmark.c src/xmpp/bookmark.h \ - src/xmpp/form.c src/xmpp/form.h \ - src/event/server_events.c src/event/server_events.h \ - src/event/client_events.c src/event/client_events.h \ - src/event/ui_events.c src/event/ui_events.h \ - src/ui/ui.h src/ui/window.c src/ui/window.h \ - src/ui/windows.c src/ui/windows.h \ - src/ui/buffer.c src/ui/buffer.h \ - src/ui/statusbar.c src/ui/statusbar.h \ - src/ui/inputwin.c src/ui/inputwin.h \ - src/command/command.h src/command/command.c \ - src/command/commands.h src/command/commands.c \ - src/tools/parser.c \ - src/tools/parser.h \ - src/tools/p_sha1.h src/tools/p_sha1.c \ - src/tools/autocomplete.c src/tools/autocomplete.h \ - src/tools/tinyurl.c src/tools/tinyurl.h \ - src/config/accounts.c src/config/accounts.h \ - src/config/account.c src/config/account.h \ - src/config/preferences.c src/config/preferences.h \ - src/config/theme.c src/config/theme.h \ - stabbertests/ui/stub_ui.c \ stabbertests/proftest.c stabbertests/proftest.h \ - stabbertests/checkers/checkers.c stabbertests/checkers/checkers.h \ stabbertests/test_connect.c stabbertests/test_connect.h \ stabbertests/stabbertestsuite.c @@ -157,11 +122,9 @@ if BUILD_OTR test_sources += $(otr_test_sources) if BUILD_OTR3 core_sources += $(otr3_sources) -stabbertest_sources += $(otr3_sources) endif if BUILD_OTR4 core_sources += $(otr4_sources) -stabbertest_sources += $(otr4_sources) endif endif @@ -180,7 +143,8 @@ check_PROGRAMS = tests/testsuite stabbertests/stabbertestsuite tests_testsuite_SOURCES = $(test_sources) tests_testsuite_LDADD = -lcmocka stabbertests_stabbertestsuite_SOURCES = $(stabbertest_sources) -stabbertests_stabbertestsuite_LDADD = -lcmocka -lstabber -lpthread +stabbertests_stabbertestsuite_CFLAGS = -I/usr/include/tcl8.6 +stabbertests_stabbertestsuite_LDADD = -lcmocka -lstabber -lexpect -ltcl man_MANS = $(man_sources) diff --git a/expecttest.c b/expecttest.c index 6e54b447..5038b7a7 100644 --- a/expecttest.c +++ b/expecttest.c @@ -52,8 +52,6 @@ int main(void) "" )); - stbbr_send(); - write(fd, QUIT_CMD, strlen(QUIT_CMD)); sleep(1); diff --git a/stabbertests/checkers/checkers.c b/stabbertests/checkers/checkers.c deleted file mode 100644 index 6709dc97..00000000 --- a/stabbertests/checkers/checkers.c +++ /dev/null @@ -1,26 +0,0 @@ -#include "resource.h" - -int -resource_equal_check(void *param, void *value) -{ - Resource *param_res = (Resource *)param; - Resource *value_res = (Resource *)value; - - if (g_strcmp0(param_res->name, value_res->name) != 0) { - return 0; - } - - if (param_res->presence != value_res->presence) { - return 0; - } - - if (param_res->priority != value_res->priority) { - return 0; - } - - if (g_strcmp0(param_res->status, value_res->status) != 0) { - return 0; - } - - return 1; -} diff --git a/stabbertests/checkers/checkers.h b/stabbertests/checkers/checkers.h deleted file mode 100644 index 64654c77..00000000 --- a/stabbertests/checkers/checkers.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef __H_CHECKERS -#define __H_CHECKERS - -int resource_equal_check(void *param, void *value); - -#endif \ No newline at end of file diff --git a/stabbertests/proftest.c b/stabbertests/proftest.c index e3f7f6a6..65cee269 100644 --- a/stabbertests/proftest.c +++ b/stabbertests/proftest.c @@ -9,25 +9,10 @@ #include #include #include +#include #include - -#include "config.h" - -#include "config/preferences.h" -#include "log.h" -#include "xmpp/xmpp.h" -#include "command/command.h" -#include "roster_list.h" -#include "ui/windows.h" - -#ifdef HAVE_GIT_VERSION -#include "gitversion.h" -#endif - -#ifdef HAVE_LIBOTR -#include "otr/otr.h" -#endif +#include #define XDG_CONFIG_HOME "./stabbertests/files/xdg_config_home" #define XDG_DATA_HOME "./stabbertests/files/xdg_data_home" @@ -35,16 +20,6 @@ char *config_orig; char *data_orig; -void -prof_process_xmpp(int loops) -{ - int i = 0; - while (i < loops) { - jabber_process_events(10); - i++; - } -} - gboolean _create_dir(char *name) { @@ -72,7 +47,7 @@ _mkdir_recursive(const char *dir) for (i = 1; i <= strlen(dir); i++) { if (dir[i] == '/' || dir[i] == '\0') { gchar *next_dir = g_strndup(dir, i); - result = create_dir(next_dir); + result = _create_dir(next_dir); g_free(next_dir); if (!result) { break; @@ -147,6 +122,8 @@ _cleanup_dirs(void) void init_prof_test(void **state) { + exp_timeout = 2; + if (stbbr_start(5230) != 0) { assert_true(FALSE); return; @@ -164,56 +141,11 @@ init_prof_test(void **state) _create_data_dir(); _create_chatlogs_dir(); _create_logs_dir(); - - log_level_t prof_log_level = log_level_from_string("DEBUG"); - prefs_load(); - log_init(prof_log_level); - if (strcmp(PACKAGE_STATUS, "development") == 0) { -#ifdef HAVE_GIT_VERSION - log_info("Starting Profanity (%sdev.%s.%s)...", PACKAGE_VERSION, PROF_GIT_BRANCH, PROF_GIT_REVISION); -#else - log_info("Starting Profanity (%sdev)...", PACKAGE_VERSION); -#endif - } else { - log_info("Starting Profanity (%s)...", PACKAGE_VERSION); - } - chat_log_init(); - groupchat_log_init(); - accounts_load(); - char *theme = prefs_get_string(PREF_THEME); - theme_init(theme); - prefs_free_string(theme); - jabber_init(FALSE); - cmd_init(); - log_info("Initialising contact list"); - roster_init(); - muc_init(); -#ifdef HAVE_LIBOTR - otr_init(); -#endif - wins_init(); } void close_prof_test(void **state) { - jabber_disconnect(); - prof_process_xmpp(20); - jabber_shutdown(); - roster_free(); - muc_close(); - caps_close(); -#ifdef HAVE_LIBOTR - otr_shutdown(); -#endif - chat_log_close(); - prefs_close(); - theme_close(); - accounts_close(); - cmd_uninit(); - log_close(); - reset_unique_id(); - _cleanup_dirs(); setenv("XDG_CONFIG_HOME", config_orig, 1); diff --git a/stabbertests/proftest.h b/stabbertests/proftest.h index 7d95db93..da573821 100644 --- a/stabbertests/proftest.h +++ b/stabbertests/proftest.h @@ -1,8 +1,11 @@ #ifndef __H_PROFTEST #define __H_PROFTEST +#define XDG_CONFIG_HOME "./stabbertests/files/xdg_config_home" +#define XDG_DATA_HOME "./stabbertests/files/xdg_data_home" + void init_prof_test(void **state); void close_prof_test(void **state); void prof_process_xmpp(int loops); -#endif \ No newline at end of file +#endif diff --git a/stabbertests/stabbertestsuite.c b/stabbertests/stabbertestsuite.c index a54b94dc..86d5b192 100644 --- a/stabbertests/stabbertestsuite.c +++ b/stabbertests/stabbertestsuite.c @@ -19,30 +19,30 @@ int main(int argc, char* argv[]) { unit_test_setup_teardown(connect_jid, init_prof_test, close_prof_test), - unit_test_setup_teardown(connect_jid_requests_roster, - init_prof_test, - close_prof_test), - unit_test_setup_teardown(connect_jid_sends_presence_after_receiving_roster, - init_prof_test, - close_prof_test), - unit_test_setup_teardown(connect_jid_requests_bookmarks, - init_prof_test, - close_prof_test), - unit_test_setup_teardown(connect_bad_password, - init_prof_test, - close_prof_test), - unit_test_setup_teardown(show_presence_updates, - init_prof_test, - close_prof_test), - unit_test_setup_teardown(sends_rooms_iq, - init_prof_test, - close_prof_test), - unit_test_setup_teardown(multiple_pings, - init_prof_test, - close_prof_test), - unit_test_setup_teardown(responds_to_ping, - init_prof_test, - close_prof_test), +// unit_test_setup_teardown(connect_jid_requests_roster, +// init_prof_test, +// close_prof_test), +// unit_test_setup_teardown(connect_jid_sends_presence_after_receiving_roster, +// init_prof_test, +// close_prof_test), +// unit_test_setup_teardown(connect_jid_requests_bookmarks, +// init_prof_test, +// close_prof_test), +// unit_test_setup_teardown(connect_bad_password, +// init_prof_test, +// close_prof_test), +// unit_test_setup_teardown(show_presence_updates, +// init_prof_test, +// close_prof_test), +// unit_test_setup_teardown(sends_rooms_iq, +// init_prof_test, +// close_prof_test), +// unit_test_setup_teardown(multiple_pings, +// init_prof_test, +// close_prof_test), +// unit_test_setup_teardown(responds_to_ping, +// init_prof_test, +// close_prof_test), }; return run_tests(all_tests); diff --git a/stabbertests/test_connect.c b/stabbertests/test_connect.c index 759dc4e5..c24e20eb 100644 --- a/stabbertests/test_connect.c +++ b/stabbertests/test_connect.c @@ -7,47 +7,16 @@ #include #include +#include #include "proftest.h" -#include "checkers/checkers.h" -#include "xmpp/xmpp.h" -#include "ui/stub_ui.h" -#include "ui/window.h" -#include "command/command.h" + +#define CONNECT_CMD "/connect stabber@localhost port 5230\r" +#define PASSWORD "password\r" void connect_jid(void **state) { - will_return(ui_ask_password, strdup("password")); - expect_cons_show("Connecting as stabber@localhost"); - - cmd_process_input(strdup("/connect stabber@localhost port 5230")); - prof_process_xmpp(20); - - jabber_conn_status_t status = jabber_get_connection_status(); - assert_true(status == JABBER_CONNECTED); -} - -void -connect_jid_requests_roster(void **state) -{ - will_return(ui_ask_password, strdup("password")); - expect_any_cons_show(); - - cmd_process_input(strdup("/connect stabber@localhost port 5230")); - prof_process_xmpp(20); - - assert_true(stbbr_verify( - "" - )); -} - -void -connect_jid_sends_presence_after_receiving_roster(void **state) -{ - will_return(ui_ask_password, strdup("password")); - expect_any_cons_show(); - stbbr_for("roster", "" "" @@ -57,9 +26,27 @@ connect_jid_sends_presence_after_receiving_roster(void **state) "" ); - cmd_process_input(strdup("/connect stabber@localhost port 5230")); - prof_process_xmpp(20); + int res = 0; + int fd = exp_spawnl("./profanity", NULL); + FILE *fp = fdopen(fd, "r+"); + if (fp == NULL) { + assert_true(FALSE); + } + + setbuf(fp, (char *)0); + + write(fd, CONNECT_CMD, strlen(CONNECT_CMD)); + res = exp_expectl(fd, exp_exact, "Enter password:", 11, exp_end); + assert_true(res == 11); + + write(fd, PASSWORD, strlen(PASSWORD)); + res = exp_expectl(fd, exp_exact, "Connecting as stabber@localhost", 12, exp_end); + assert_true(res == 12); + res = exp_expectl(fd, exp_exact, "stabber@localhost logged in successfully", 13, exp_end); + assert_true(res == 13); + + sleep(1); assert_true(stbbr_verify( "" "" @@ -67,176 +54,215 @@ connect_jid_sends_presence_after_receiving_roster(void **state) )); } -void -connect_jid_requests_bookmarks(void **state) -{ - will_return(ui_ask_password, strdup("password")); - expect_any_cons_show(); - - cmd_process_input(strdup("/connect stabber@localhost port 5230")); - prof_process_xmpp(20); - - assert_true(stbbr_verify( - "" - "" - "" - "" - "" - )); -} - -void -connect_bad_password(void **state) -{ - will_return(ui_ask_password, strdup("badpassword")); - - expect_cons_show("Connecting as stabber@localhost"); - expect_cons_show_error("Login failed."); - - cmd_process_input(strdup("/connect stabber@localhost port 5230")); - prof_process_xmpp(20); - - jabber_conn_status_t status = jabber_get_connection_status(); - assert_true(status == JABBER_DISCONNECTED); -} - -void -show_presence_updates(void **state) -{ - will_return(ui_ask_password, strdup("password")); - expect_any_cons_show(); - - stbbr_for("roster", - "" - "" - "" - "" - "" - "" - ); - - cmd_process_input(strdup("/connect stabber@localhost port 5230")); - prof_process_xmpp(20); - - stbbr_send( - "" - "dnd" - "busy!" - "" - "" - "chat" - "Talk to me!" - "" - "" - "away" - "Out of office" - "" - ); - - Resource *resource1 = resource_new("mobile", RESOURCE_DND, "busy!", 0); - expect_string(ui_contact_online, barejid, "buddy1@localhost"); - expect_check(ui_contact_online, resource, (CheckParameterValue)resource_equal_check, resource1); - expect_value(ui_contact_online, last_activity, NULL); - - Resource *resource2 = resource_new("laptop", RESOURCE_CHAT, "Talk to me!", 0); - expect_string(ui_contact_online, barejid, "buddy1@localhost"); - expect_check(ui_contact_online, resource, (CheckParameterValue)resource_equal_check, resource2); - expect_value(ui_contact_online, last_activity, NULL); - - Resource *resource3 = resource_new("work", RESOURCE_AWAY, "Out of office", 0); - expect_string(ui_contact_online, barejid, "buddy2@localhost"); - expect_check(ui_contact_online, resource, (CheckParameterValue)resource_equal_check, resource3); - expect_value(ui_contact_online, last_activity, NULL); - - prof_process_xmpp(20); -} - -void -sends_rooms_iq(void **state) -{ - will_return(ui_ask_password, strdup("password")); - - expect_any_cons_show(); - - cmd_process_input(strdup("/connect stabber@localhost port 5230")); - prof_process_xmpp(20); - - stbbr_for("confreq", - "" - "" - "" - "" - "" - "" - ); - - cmd_process_input(strdup("/rooms")); - prof_process_xmpp(20); - - assert_true(stbbr_verify_last( - "" - "" - "" - )); -} - -void -multiple_pings(void **state) -{ - will_return(ui_ask_password, strdup("password")); - - expect_any_cons_show(); - - cmd_process_input(strdup("/connect stabber@localhost port 5230")); - prof_process_xmpp(20); - - expect_cons_show("Pinged server..."); - expect_any_cons_show(); - expect_cons_show("Pinged server..."); - expect_any_cons_show(); - - stbbr_for("prof_ping_1", - "" - ); - stbbr_for("prof_ping_2", - "" - ); - - cmd_process_input(strdup("/ping")); - prof_process_xmpp(20); - cmd_process_input(strdup("/ping")); - prof_process_xmpp(20); - - assert_true(stbbr_verify( - "" - "" - "" - )); - assert_true(stbbr_verify( - "" - "" - "" - )); -} - -void -responds_to_ping(void **state) -{ - will_return(ui_ask_password, strdup("password")); - - expect_any_cons_show(); - - cmd_process_input(strdup("/connect stabber@localhost port 5230")); - prof_process_xmpp(20); - - stbbr_send( - "" - "" - "" - ); - prof_process_xmpp(20); - - assert_true(stbbr_verify( - "" - )); -} +//void +//connect_jid_requests_roster(void **state) +//{ +// will_return(ui_ask_password, strdup("password")); +// expect_any_cons_show(); +// +// cmd_process_input(strdup("/connect stabber@localhost port 5230")); +// prof_process_xmpp(20); +// +// assert_true(stbbr_verify( +// "" +// )); +//} +// +//void +//connect_jid_sends_presence_after_receiving_roster(void **state) +//{ +// will_return(ui_ask_password, strdup("password")); +// expect_any_cons_show(); +// +// stbbr_for("roster", +// "" +// "" +// "" +// "" +// "" +// "" +// ); +// +// cmd_process_input(strdup("/connect stabber@localhost port 5230")); +// prof_process_xmpp(20); +// +// assert_true(stbbr_verify( +// "" +// "" +// "" +// )); +//} +// +//void +//connect_jid_requests_bookmarks(void **state) +//{ +// will_return(ui_ask_password, strdup("password")); +// expect_any_cons_show(); +// +// cmd_process_input(strdup("/connect stabber@localhost port 5230")); +// prof_process_xmpp(20); +// +// assert_true(stbbr_verify( +// "" +// "" +// "" +// "" +// "" +// )); +//} +// +//void +//connect_bad_password(void **state) +//{ +// will_return(ui_ask_password, strdup("badpassword")); +// +// expect_cons_show("Connecting as stabber@localhost"); +// expect_cons_show_error("Login failed."); +// +// cmd_process_input(strdup("/connect stabber@localhost port 5230")); +// prof_process_xmpp(20); +// +// jabber_conn_status_t status = jabber_get_connection_status(); +// assert_true(status == JABBER_DISCONNECTED); +//} +// +//void +//show_presence_updates(void **state) +//{ +// will_return(ui_ask_password, strdup("password")); +// expect_any_cons_show(); +// +// stbbr_for("roster", +// "" +// "" +// "" +// "" +// "" +// "" +// ); +// +// cmd_process_input(strdup("/connect stabber@localhost port 5230")); +// prof_process_xmpp(20); +// +// stbbr_send( +// "" +// "dnd" +// "busy!" +// "" +// "" +// "chat" +// "Talk to me!" +// "" +// "" +// "away" +// "Out of office" +// "" +// ); +// +// Resource *resource1 = resource_new("mobile", RESOURCE_DND, "busy!", 0); +// expect_string(ui_contact_online, barejid, "buddy1@localhost"); +// expect_check(ui_contact_online, resource, (CheckParameterValue)resource_equal_check, resource1); +// expect_value(ui_contact_online, last_activity, NULL); +// +// Resource *resource2 = resource_new("laptop", RESOURCE_CHAT, "Talk to me!", 0); +// expect_string(ui_contact_online, barejid, "buddy1@localhost"); +// expect_check(ui_contact_online, resource, (CheckParameterValue)resource_equal_check, resource2); +// expect_value(ui_contact_online, last_activity, NULL); +// +// Resource *resource3 = resource_new("work", RESOURCE_AWAY, "Out of office", 0); +// expect_string(ui_contact_online, barejid, "buddy2@localhost"); +// expect_check(ui_contact_online, resource, (CheckParameterValue)resource_equal_check, resource3); +// expect_value(ui_contact_online, last_activity, NULL); +// +// prof_process_xmpp(20); +//} +// +//void +//sends_rooms_iq(void **state) +//{ +// will_return(ui_ask_password, strdup("password")); +// +// expect_any_cons_show(); +// +// cmd_process_input(strdup("/connect stabber@localhost port 5230")); +// prof_process_xmpp(20); +// +// stbbr_for("confreq", +// "" +// "" +// "" +// "" +// "" +// "" +// ); +// +// cmd_process_input(strdup("/rooms")); +// prof_process_xmpp(20); +// +// assert_true(stbbr_verify_last( +// "" +// "" +// "" +// )); +//} +// +//void +//multiple_pings(void **state) +//{ +// will_return(ui_ask_password, strdup("password")); +// +// expect_any_cons_show(); +// +// cmd_process_input(strdup("/connect stabber@localhost port 5230")); +// prof_process_xmpp(20); +// +// expect_cons_show("Pinged server..."); +// expect_any_cons_show(); +// expect_cons_show("Pinged server..."); +// expect_any_cons_show(); +// +// stbbr_for("prof_ping_1", +// "" +// ); +// stbbr_for("prof_ping_2", +// "" +// ); +// +// cmd_process_input(strdup("/ping")); +// prof_process_xmpp(20); +// cmd_process_input(strdup("/ping")); +// prof_process_xmpp(20); +// +// assert_true(stbbr_verify( +// "" +// "" +// "" +// )); +// assert_true(stbbr_verify( +// "" +// "" +// "" +// )); +//} +// +//void +//responds_to_ping(void **state) +//{ +// will_return(ui_ask_password, strdup("password")); +// +// expect_any_cons_show(); +// +// cmd_process_input(strdup("/connect stabber@localhost port 5230")); +// prof_process_xmpp(20); +// +// stbbr_send( +// "" +// "" +// "" +// ); +// prof_process_xmpp(20); +// +// assert_true(stbbr_verify( +// "" +// )); +//} diff --git a/stabbertests/test_connect.h b/stabbertests/test_connect.h index 971652b0..d2d4dbee 100644 --- a/stabbertests/test_connect.h +++ b/stabbertests/test_connect.h @@ -1,9 +1,9 @@ void connect_jid(void **state); -void connect_jid_requests_roster(void **state); -void connect_jid_sends_presence_after_receiving_roster(void **state); -void connect_jid_requests_bookmarks(void **state); -void connect_bad_password(void **state); -void show_presence_updates(void **state); -void sends_rooms_iq(void **state); -void multiple_pings(void **state); -void responds_to_ping(void **state); +//void connect_jid_requests_roster(void **state); +//void connect_jid_sends_presence_after_receiving_roster(void **state); +//void connect_jid_requests_bookmarks(void **state); +//void connect_bad_password(void **state); +//void show_presence_updates(void **state); +//void sends_rooms_iq(void **state); +//void multiple_pings(void **state); +//void responds_to_ping(void **state); diff --git a/stabbertests/ui/stub_ui.c b/stabbertests/ui/stub_ui.c deleted file mode 100644 index b75cbe12..00000000 --- a/stabbertests/ui/stub_ui.c +++ /dev/null @@ -1,511 +0,0 @@ -#include -#include - -#include -#include - -#include "ui/window.h" -#include "ui/ui.h" - -#include "tests/ui/stub_ui.h" - -// mock state - -static char output[256]; - -void -expect_cons_show(char *expected) -{ - expect_string(cons_show, output, expected); -} - -void -expect_any_cons_show(void) -{ - expect_any(cons_show, output); -} - -void -expect_cons_show_error(char *expected) -{ - expect_string(cons_show_error, output, expected); -} - -void -expect_any_cons_show_error(void) -{ - expect_any(cons_show_error, output); -} - -void -expect_ui_current_print_line(char *message) -{ - expect_string(ui_current_print_line, output, message); -} - -void -expect_ui_current_print_formatted_line(char show_char, int attrs, char *message) -{ - expect_value(ui_current_print_formatted_line, show_char, show_char); - expect_value(ui_current_print_formatted_line, attrs, attrs); - expect_string(ui_current_print_formatted_line, output, message); -} - -// stubs - -void ui_init(void) {} -void ui_load_colours(void) {} -void ui_update(void) {} -void ui_close(void) {} -void ui_redraw(void) {} -void ui_resize(void) {} -GSList* ui_get_chat_recipients(void) -{ - return NULL; -} - -void ui_switch_win(ProfWin *win) {} - -void ui_gone_secure(const char * const barejid, gboolean trusted) {} -void ui_gone_insecure(const char * const barejid) {} -void ui_trust(const char * const barejid) {} -void ui_untrust(const char * const barejid) {} -void ui_smp_recipient_initiated(const char * const barejid) {} -void ui_smp_recipient_initiated_q(const char * const barejid, const char *question) {} - -void ui_smp_successful(const char * const barejid) {} -void ui_smp_unsuccessful_sender(const char * const barejid) {} -void ui_smp_unsuccessful_receiver(const char * const barejid) {} -void ui_smp_aborted(const char * const barejid) {} - -void ui_smp_answer_success(const char * const barejid) {} -void ui_smp_answer_failure(const char * const barejid) {} - -void ui_otr_authenticating(const char * const barejid) {} -void ui_otr_authetication_waiting(const char * const recipient) {} -void ui_sigwinch_handler(int sig) {} - -unsigned long ui_get_idle_time(void) -{ - return 0; -} - -void ui_reset_idle_time(void) {} -ProfPrivateWin* ui_new_private_win(const char * const fulljid) -{ - return NULL; -} - -ProfChatWin* ui_new_chat_win(const char * const barejid) -{ - return NULL; -} - -void ui_print_system_msg_from_recipient(const char * const barejid, const char *message) {} -gint ui_unread(void) -{ - return 0; -} - -void ui_close_connected_win(int index) {} -int ui_close_all_wins(void) -{ - return 0; -} - -int ui_close_read_wins(void) -{ - return 0; -} - -// current window actions -void ui_clear_current(void) {} - -win_type_t ui_current_win_type(void) -{ - return (win_type_t)mock(); -} - -gboolean ui_current_win_is_otr(void) -{ - return (gboolean)mock(); -} - -ProfChatWin *ui_get_current_chat(void) -{ - return (ProfChatWin*)mock(); -} - -void ui_current_print_line(const char * const msg, ...) -{ - va_list args; - va_start(args, msg); - vsnprintf(output, sizeof(output), msg, args); - check_expected(output); - va_end(args); -} - -void ui_current_print_formatted_line(const char show_char, int attrs, const char * const msg, ...) -{ - check_expected(show_char); - check_expected(attrs); - va_list args; - va_start(args, msg); - vsnprintf(output, sizeof(output), msg, args); - check_expected(output); - va_end(args); -} - -void ui_current_error_line(const char * const msg) {} -void ui_win_error_line(ProfWin *window, const char * const msg) {} - - -win_type_t ui_win_type(int index) -{ - return WIN_CONSOLE; -} - -void ui_close_win(int index) {} - -int ui_win_unread(int index) -{ - return 0; -} - -void ui_page_up(void) {} -void ui_page_down(void) {} -void ui_subwin_page_up(void) {} -void ui_subwin_page_down(void) {} - -char * ui_ask_password(void) -{ - return mock_ptr_type(char *); -} - -void ui_handle_stanza(const char * const msg) {} - -// ui events -void ui_contact_online(char *barejid, Resource *resource, GDateTime *last_activity) -{ - check_expected(barejid); - check_expected(resource); - check_expected(last_activity); -} - -void ui_contact_typing(const char * const barejid, const char * const resource) {} -void ui_incoming_msg(const char * const from, const char * const resource, const char * const message, GTimeVal *tv_stamp) {} -void ui_message_receipt(const char * const barejid, const char * const id) {} - -void ui_incoming_private_msg(const char * const fulljid, const char * const message, GTimeVal *tv_stamp) {} - -void ui_disconnected(void) {} -void ui_recipient_gone(const char * const barejid, const char * const resource) {} - -void ui_outgoing_chat_msg(ProfChatWin *chatwin, const char * const message, char *id) {} -void ui_outgoing_chat_msg_carbon(const char * const barejid, const char * const message) {} -void ui_outgoing_private_msg(ProfPrivateWin *privwin, const char * const message) {} - -void ui_room_join(const char * const roomjid, gboolean focus) {} -void ui_switch_to_room(const char * const roomjid) {} - -void ui_room_role_change(const char * const roomjid, const char * const role, const char * const actor, - const char * const reason) {} -void ui_room_affiliation_change(const char * const roomjid, const char * const affiliation, const char * const actor, - const char * const reason) {} -void ui_room_role_and_affiliation_change(const char * const roomjid, const char * const role, - const char * const affiliation, const char * const actor, const char * const reason) {} -void ui_room_occupant_role_change(const char * const roomjid, const char * const nick, const char * const role, - const char * const actor, const char * const reason) {} -void ui_room_occupant_affiliation_change(const char * const roomjid, const char * const nick, const char * const affiliation, - const char * const actor, const char * const reason) {} -void ui_room_occupant_role_and_affiliation_change(const char * const roomjid, const char * const nick, const char * const role, - const char * const affiliation, const char * const actor, const char * const reason) {} -void ui_room_roster(const char * const roomjid, GList *occupants, const char * const presence) {} -void ui_room_history(const char * const roomjid, const char * const nick, - GTimeVal tv_stamp, const char * const message) {} -void ui_room_message(const char * const roomjid, const char * const nick, - const char * const message) {} -void ui_room_subject(const char * const roomjid, const char * const nick, const char * const subject) {} -void ui_room_requires_config(const char * const roomjid) {} -void ui_room_destroy(const char * const roomjid) {} -void ui_show_room_info(ProfMucWin *mucwin) {} -void ui_show_room_role_list(ProfMucWin *mucwin, muc_role_t role) {} -void ui_show_room_affiliation_list(ProfMucWin *mucwin, muc_affiliation_t affiliation) {} -void ui_handle_room_info_error(const char * const roomjid, const char * const error) {} -void ui_show_room_disco_info(const char * const roomjid, GSList *identities, GSList *features) {} -void ui_room_destroyed(const char * const roomjid, const char * const reason, const char * const new_jid, - const char * const password) {} -void ui_room_kicked(const char * const roomjid, const char * const actor, const char * const reason) {} -void ui_room_member_kicked(const char * const roomjid, const char * const nick, const char * const actor, - const char * const reason) {} -void ui_room_banned(const char * const roomjid, const char * const actor, const char * const reason) {} -void ui_room_member_banned(const char * const roomjid, const char * const nick, const char * const actor, - const char * const reason) {} -void ui_leave_room(const char * const roomjid) {} -void ui_room_broadcast(const char * const roomjid, - const char * const message) {} -void ui_room_member_offline(const char * const roomjid, const char * const nick) {} -void ui_room_member_online(const char * const roomjid, const char * const nick, const char * const roles, - const char * const affiliation, const char * const show, const char * const status) {} -void ui_room_member_nick_change(const char * const roomjid, - const char * const old_nick, const char * const nick) {} -void ui_room_nick_change(const char * const roomjid, const char * const nick) {} -void ui_room_member_presence(const char * const roomjid, - const char * const nick, const char * const show, const char * const status) {} -void ui_room_update_occupants(const char * const roomjid) {} -void ui_room_show_occupants(const char * const roomjid) {} -void ui_room_hide_occupants(const char * const roomjid) {} -void ui_show_roster(void) {} -void ui_hide_roster(void) {} -void ui_roster_add(const char * const barejid, const char * const name) {} -void ui_roster_remove(const char * const barejid) {} -void ui_contact_already_in_group(const char * const contact, const char * const group) {} -void ui_contact_not_in_group(const char * const contact, const char * const group) {} -void ui_group_added(const char * const contact, const char * const group) {} -void ui_group_removed(const char * const contact, const char * const group) {} -void ui_chat_win_contact_online(PContact contact, Resource *resource, GDateTime *last_activity) {} -void ui_chat_win_contact_offline(PContact contact, char *resource, char *status) {} -gboolean ui_chat_win_exists(const char * const barejid) -{ - return TRUE; -} - -void ui_contact_offline(char *barejid, char *resource, char *status) {} - -void ui_handle_recipient_not_found(const char * const recipient, const char * const err_msg) -{ - check_expected(recipient); - check_expected(err_msg); -} - -void ui_handle_recipient_error(const char * const recipient, const char * const err_msg) -{ - check_expected(recipient); - check_expected(err_msg); -} - -void ui_handle_error(const char * const err_msg) -{ - check_expected(err_msg); -} - -void ui_clear_win_title(void) {} -void ui_goodbye_title(void) {} -void ui_handle_room_join_error(const char * const roomjid, const char * const err) {} -void ui_handle_room_configuration(const char * const roomjid, DataForm *form) {} -void ui_handle_room_configuration_form_error(const char * const roomjid, const char * const message) {} -void ui_handle_room_config_submit_result(const char * const roomjid) {} -void ui_handle_room_config_submit_result_error(const char * const roomjid, const char * const message) {} -void ui_handle_room_affiliation_list_error(const char * const roomjid, const char * const affiliation, - const char * const error) {} -void ui_handle_room_affiliation_list(const char * const roomjid, const char * const affiliation, GSList *jids) {} -void ui_handle_room_affiliation_set_error(const char * const roomjid, const char * const jid, - const char * const affiliation, const char * const error) {} -void ui_handle_room_role_set_error(const char * const roomjid, const char * const nick, const char * const role, - const char * const error) {} -void ui_handle_room_role_list_error(const char * const roomjid, const char * const role, const char * const error) {} -void ui_handle_room_role_list(const char * const roomjid, const char * const role, GSList *nicks) {} -void ui_handle_room_kick_error(const char * const roomjid, const char * const nick, const char * const error) {} -void ui_show_form(ProfMucConfWin *confwin) {} -void ui_show_form_field(ProfWin *window, DataForm *form, char *tag) {} -void ui_show_form_help(ProfMucConfWin *confwin) {} -void ui_show_form_field_help(ProfMucConfWin *confwin, char *tag) {} -void ui_show_lines(ProfWin *window, const gchar** lines) {} -void ui_redraw_all_room_rosters(void) {} -void ui_show_all_room_rosters(void) {} -void ui_hide_all_room_rosters(void) {} - -void ui_tidy_wins(void) {} -void ui_prune_wins(void) {} -gboolean ui_swap_wins(int source_win, int target_win) -{ - return FALSE; -} - -void ui_auto_away(void) {} -void ui_end_auto_away(void) {} -void ui_titlebar_presence(contact_presence_t presence) {} -void ui_handle_login_account_success(ProfAccount *account) {} -void ui_update_presence(const resource_presence_t resource_presence, - const char * const message, const char * const show) {} -void ui_about(void) {} -void ui_statusbar_new(const int win) {} - -char* ui_readline(void) -{ - return NULL; -} - -void ui_inp_history_append(char *inp) {} - -void ui_input_clear(void) {} -void ui_input_nonblocking(gboolean reset) {} - -void ui_invalid_command_usage(const char * const usage, void (*setting_func)(void)) {} - -void ui_create_xmlconsole_win(void) {} -gboolean ui_xmlconsole_exists(void) -{ - return FALSE; -} - -void ui_open_xmlconsole_win(void) {} - -gboolean ui_win_has_unsaved_form(int num) -{ - return FALSE; -} - -void ui_handle_otr_error(const char * const barejid, const char * const message) {} - -void -ui_write(char *line, int offset) {} - -// console window actions - -void cons_show(const char * const msg, ...) -{ - va_list args; - va_start(args, msg); - vsnprintf(output, sizeof(output), msg, args); - check_expected(output); - va_end(args); -} - -void cons_about(void) {} -void cons_help(void) {} -void cons_navigation_help(void) {} -void cons_prefs(void) {} -void cons_show_ui_prefs(void) {} -void cons_show_desktop_prefs(void) {} -void cons_show_chat_prefs(void) {} -void cons_show_log_prefs(void) {} -void cons_show_presence_prefs(void) {} -void cons_show_connection_prefs(void) {} -void cons_show_otr_prefs(void) {} - -void cons_show_account(ProfAccount *account) -{ - check_expected(account); -} - -void cons_debug(const char * const msg, ...) {} -void cons_show_time(void) {} -void cons_show_word(const char * const word) {} - -void cons_show_error(const char * const cmd, ...) -{ - va_list args; - va_start(args, cmd); - vsnprintf(output, sizeof(output), cmd, args); - check_expected(output); - va_end(args); -} - -void cons_show_contacts(GSList * list) {} - -void cons_show_roster(GSList * list) -{ - check_expected(list); -} - -void cons_show_roster_group(const char * const group, GSList * list) {} -void cons_show_wins(void) {} -void cons_show_status(const char * const barejid) {} -void cons_show_info(PContact pcontact) {} -void cons_show_caps(const char * const fulljid, resource_presence_t presence) {} -void cons_show_themes(GSList *themes) {} - -void cons_show_aliases(GList *aliases) -{ - check_expected(aliases); -} - -void cons_show_login_success(ProfAccount *account) {} -void cons_show_software_version(const char * const jid, - const char * const presence, const char * const name, - const char * const version, const char * const os) {} - -void cons_show_account_list(gchar **accounts) -{ - check_expected(accounts); -} - -void cons_show_room_list(GSList *room, const char * const conference_node) {} - -void cons_show_bookmarks(const GList *list) -{ - check_expected(list); -} - -void cons_show_disco_items(GSList *items, const char * const jid) {} -void cons_show_disco_info(const char *from, GSList *identities, GSList *features) {} -void cons_show_room_invite(const char * const invitor, const char * const room, - const char * const reason) {} -void cons_check_version(gboolean not_available_msg) {} -void cons_show_typing(const char * const barejid) {} -void cons_show_incoming_message(const char * const short_from, const int win_index) {} -void cons_show_room_invites(GSList *invites) {} -void cons_show_received_subs(void) {} -void cons_show_sent_subs(void) {} -void cons_alert(void) {} -void cons_theme_setting(void) {} -void cons_privileges_setting(void) {} -void cons_beep_setting(void) {} -void cons_flash_setting(void) {} -void cons_splash_setting(void) {} -void cons_vercheck_setting(void) {} -void cons_resource_setting(void) {} -void cons_occupants_setting(void) {} -void cons_roster_setting(void) {} -void cons_presence_setting(void) {} -void cons_wrap_setting(void) {} -void cons_time_setting(void) {} -void cons_mouse_setting(void) {} -void cons_statuses_setting(void) {} -void cons_titlebar_setting(void) {} -void cons_notify_setting(void) {} -void cons_states_setting(void) {} -void cons_outtype_setting(void) {} -void cons_intype_setting(void) {} -void cons_gone_setting(void) {} -void cons_history_setting(void) {} -void cons_carbons_setting(void) {} -void cons_receipts_setting(void) {} -void cons_log_setting(void) {} -void cons_chlog_setting(void) {} -void cons_grlog_setting(void) {} -void cons_autoaway_setting(void) {} -void cons_reconnect_setting(void) {} -void cons_autoping_setting(void) {} -void cons_priority_setting(void) {} -void cons_autoconnect_setting(void) {} -void cons_inpblock_setting(void) {} - -void cons_show_contact_online(PContact contact, Resource *resource, GDateTime *last_activity) -{ - check_expected(contact); - check_expected(resource); - check_expected(last_activity); -} - -void cons_show_contact_offline(PContact contact, char *resource, char *status) {} -void cons_theme_colours(void) {} - -// roster window -void rosterwin_roster(void) {} - -// occupants window -void occupantswin_occupants(const char * const room) {} - -// desktop notifier actions -void notifier_uninit(void) {} - -void notify_typing(const char * const handle) {} -void notify_message(ProfWin *window, const char * const name, const char * const text) {} -void notify_room_message(const char * const handle, const char * const room, - int win, const char * const text) {} -void notify_remind(void) {} -void notify_invite(const char * const from, const char * const room, - const char * const reason) {} -void notify_subscription(const char * const from) {} diff --git a/stabbertests/ui/stub_ui.h b/stabbertests/ui/stub_ui.h deleted file mode 100644 index 81357a86..00000000 --- a/stabbertests/ui/stub_ui.h +++ /dev/null @@ -1,6 +0,0 @@ -void expect_cons_show(char *expected); -void expect_any_cons_show(void); -void expect_cons_show_error(char *expected); -void expect_any_cons_show_error(void); -void expect_ui_current_print_line(char *message); -void expect_ui_current_print_formatted_line(char show_char, int attrs, char *message); \ No newline at end of file From 0f115e5ed4d5a57dc3fdebb51b442f3532be9f88 Mon Sep 17 00:00:00 2001 From: James Booth Date: Tue, 26 May 2015 23:24:07 +0100 Subject: [PATCH 19/44] Updated travis build for libexpect --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 22f432d5..9c080ec7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ language: c install: - sudo apt-get update - - sudo apt-get -y install libssl-dev libexpat1-dev libncursesw5-dev libglib2.0-dev libnotify-dev libcurl3-dev libxss-dev libotr2-dev uuid-dev + - sudo apt-get -y install libssl-dev libexpat1-dev libncursesw5-dev libglib2.0-dev libnotify-dev libcurl3-dev libxss-dev libotr2-dev uuid-dev expect tcl-expect-dev tcl-dev - git clone git://github.com/strophe/libstrophe.git - cd libstrophe - mkdir m4 From 8a1b079c24894dda5de79a59a78fba504775e58b Mon Sep 17 00:00:00 2001 From: James Booth Date: Tue, 26 May 2015 23:32:56 +0100 Subject: [PATCH 20/44] Attempt to fix expect travis build --- .travis.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 9c080ec7..8f7b6c94 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,9 @@ language: c install: + - lsb_release -a + - uname -a - sudo apt-get update - - sudo apt-get -y install libssl-dev libexpat1-dev libncursesw5-dev libglib2.0-dev libnotify-dev libcurl3-dev libxss-dev libotr2-dev uuid-dev expect tcl-expect-dev tcl-dev + - sudo apt-get -y install libssl-dev libexpat1-dev libncursesw5-dev libglib2.0-dev libnotify-dev libcurl3-dev libxss-dev libotr2-dev uuid-dev expect tcl-dev - git clone git://github.com/strophe/libstrophe.git - cd libstrophe - mkdir m4 From fabd0cf9e8ade788af37c326db37ec0c6493f381 Mon Sep 17 00:00:00 2001 From: James Booth Date: Tue, 26 May 2015 23:47:36 +0100 Subject: [PATCH 21/44] Expect header check --- .travis.yml | 2 +- Makefile.am | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 8f7b6c94..4c96ccfa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,7 @@ install: - lsb_release -a - uname -a - sudo apt-get update - - sudo apt-get -y install libssl-dev libexpat1-dev libncursesw5-dev libglib2.0-dev libnotify-dev libcurl3-dev libxss-dev libotr2-dev uuid-dev expect tcl-dev + - sudo apt-get -y install libssl-dev libexpat1-dev libncursesw5-dev libglib2.0-dev libnotify-dev libcurl3-dev libxss-dev libotr2-dev uuid-dev expect-dev tcl-dev - git clone git://github.com/strophe/libstrophe.git - cd libstrophe - mkdir m4 diff --git a/Makefile.am b/Makefile.am index 34ec30d2..5ac81f52 100644 --- a/Makefile.am +++ b/Makefile.am @@ -143,7 +143,7 @@ check_PROGRAMS = tests/testsuite stabbertests/stabbertestsuite tests_testsuite_SOURCES = $(test_sources) tests_testsuite_LDADD = -lcmocka stabbertests_stabbertestsuite_SOURCES = $(stabbertest_sources) -stabbertests_stabbertestsuite_CFLAGS = -I/usr/include/tcl8.6 +stabbertests_stabbertestsuite_CFLAGS = -I/usr/include/tcl8.6 -I/usr/include/tcl8.5 stabbertests_stabbertestsuite_LDADD = -lcmocka -lstabber -lexpect -ltcl man_MANS = $(man_sources) From eb91f95c9e1703d5e866e092ce9d9f4d2462cbb4 Mon Sep 17 00:00:00 2001 From: James Booth Date: Wed, 27 May 2015 00:19:19 +0100 Subject: [PATCH 22/44] Removed example expect test --- expecttest.c | 63 ----------------------------------------------- makeexpecttest.sh | 1 - 2 files changed, 64 deletions(-) delete mode 100644 expecttest.c delete mode 100755 makeexpecttest.sh diff --git a/expecttest.c b/expecttest.c deleted file mode 100644 index 5038b7a7..00000000 --- a/expecttest.c +++ /dev/null @@ -1,63 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#define CONNECT_CMD "/connect stabber@localhost port 5230\r" -#define PASSWORD "password\r" -#define QUIT_CMD "/quit\r" - -int main(void) -{ - stbbr_start(5230); - stbbr_for("roster", - "" - "" - "" - "" - "" - "" - ); - - int res = 0; - int fd = exp_spawnl("./profanity", NULL); - FILE *fp = fdopen(fd, "r+"); - - if (fp == NULL) { - perror(NULL); - return 0; - } - - setbuf(fp, (char *)0); - - res = exp_expectl(fd, exp_exact, "Profanity. Type /help for help information.", 10, exp_end); - assert(res == 10); - - write(fd, CONNECT_CMD, strlen(CONNECT_CMD)); - res = exp_expectl(fd, exp_exact, "Enter password:", 11, exp_end); - assert(res == 11); - - write(fd, PASSWORD, strlen(PASSWORD)); - res = exp_expectl(fd, exp_exact, "Connecting with account stabber@localhost", 12, exp_end); - assert(res == 12); - res = exp_expectl(fd, exp_exact, "stabber@localhost logged in successfully", 13, exp_end); - assert(res == 13); - - sleep(1); - assert(stbbr_verify( - "" - "" - "" - )); - - write(fd, QUIT_CMD, strlen(QUIT_CMD)); - sleep(1); - - printf("\n"); - printf("\n"); - printf("PID: %d\n", exp_pid); - - stbbr_stop(); -} diff --git a/makeexpecttest.sh b/makeexpecttest.sh deleted file mode 100755 index 3e690a01..00000000 --- a/makeexpecttest.sh +++ /dev/null @@ -1 +0,0 @@ -gcc -I/usr/include/tcl8.6 expecttest.c -o expecttest -lexpect -ltcl -lstabber From 7507e4ecfad65e1df0ac60d56599aeea6027e345 Mon Sep 17 00:00:00 2001 From: James Booth Date: Wed, 27 May 2015 00:23:07 +0100 Subject: [PATCH 23/44] Removed unused function prototype --- stabbertests/proftest.h | 1 - 1 file changed, 1 deletion(-) diff --git a/stabbertests/proftest.h b/stabbertests/proftest.h index da573821..358b355c 100644 --- a/stabbertests/proftest.h +++ b/stabbertests/proftest.h @@ -6,6 +6,5 @@ void init_prof_test(void **state); void close_prof_test(void **state); -void prof_process_xmpp(int loops); #endif From db9376d82bcb71caae627b05f79849369798aa2f Mon Sep 17 00:00:00 2001 From: James Booth Date: Wed, 27 May 2015 01:06:17 +0100 Subject: [PATCH 24/44] Simplified expect tests --- stabbertests/proftest.c | 32 +++++++ stabbertests/proftest.h | 4 + stabbertests/stabbertestsuite.c | 24 +++--- stabbertests/test_connect.c | 146 ++++++++++++-------------------- stabbertests/test_connect.h | 8 +- 5 files changed, 104 insertions(+), 110 deletions(-) diff --git a/stabbertests/proftest.c b/stabbertests/proftest.c index 65cee269..3b3014ad 100644 --- a/stabbertests/proftest.c +++ b/stabbertests/proftest.c @@ -20,6 +20,8 @@ char *config_orig; char *data_orig; +int fd = 0; + gboolean _create_dir(char *name) { @@ -141,6 +143,8 @@ init_prof_test(void **state) _create_data_dir(); _create_chatlogs_dir(); _create_logs_dir(); + + prof_start(); } void @@ -153,3 +157,31 @@ close_prof_test(void **state) stbbr_stop(); } + +void +prof_start(void) +{ + fd = exp_spawnl("./profanity", NULL); + FILE *fp = fdopen(fd, "r+"); + + if (fp == NULL) { + assert_true(FALSE); + } + + setbuf(fp, (char *)0); +} + +void +prof_input(char *input) +{ + GString *inp_str = g_string_new(input); + g_string_append(inp_str, "\r"); + write(fd, inp_str->str, inp_str->len); + g_string_free(inp_str, TRUE); +} + +int +prof_output(char *text) +{ + return (1 == exp_expectl(fd, exp_exact, text, 1, exp_end)); +} diff --git a/stabbertests/proftest.h b/stabbertests/proftest.h index 358b355c..73e3680e 100644 --- a/stabbertests/proftest.h +++ b/stabbertests/proftest.h @@ -7,4 +7,8 @@ void init_prof_test(void **state); void close_prof_test(void **state); +void prof_start(void); +void prof_input(char *input); +int prof_output(char *text); + #endif diff --git a/stabbertests/stabbertestsuite.c b/stabbertests/stabbertestsuite.c index 86d5b192..55affa2a 100644 --- a/stabbertests/stabbertestsuite.c +++ b/stabbertests/stabbertestsuite.c @@ -19,18 +19,18 @@ int main(int argc, char* argv[]) { unit_test_setup_teardown(connect_jid, init_prof_test, close_prof_test), -// unit_test_setup_teardown(connect_jid_requests_roster, -// init_prof_test, -// close_prof_test), -// unit_test_setup_teardown(connect_jid_sends_presence_after_receiving_roster, -// init_prof_test, -// close_prof_test), -// unit_test_setup_teardown(connect_jid_requests_bookmarks, -// init_prof_test, -// close_prof_test), -// unit_test_setup_teardown(connect_bad_password, -// init_prof_test, -// close_prof_test), + unit_test_setup_teardown(connect_jid_requests_roster, + init_prof_test, + close_prof_test), + unit_test_setup_teardown(connect_jid_sends_presence_after_receiving_roster, + init_prof_test, + close_prof_test), + unit_test_setup_teardown(connect_jid_requests_bookmarks, + init_prof_test, + close_prof_test), + unit_test_setup_teardown(connect_bad_password, + init_prof_test, + close_prof_test), // unit_test_setup_teardown(show_presence_updates, // init_prof_test, // close_prof_test), diff --git a/stabbertests/test_connect.c b/stabbertests/test_connect.c index c24e20eb..b8f1a1a6 100644 --- a/stabbertests/test_connect.c +++ b/stabbertests/test_connect.c @@ -11,11 +11,31 @@ #include "proftest.h" -#define CONNECT_CMD "/connect stabber@localhost port 5230\r" -#define PASSWORD "password\r" - void connect_jid(void **state) +{ + prof_input("/connect stabber@localhost port 5230"); + prof_input("password"); + + assert_true(prof_output("Connecting as stabber@localhost")); + assert_true(prof_output("stabber@localhost logged in successfully")); +} + +void +connect_jid_requests_roster(void **state) +{ + prof_input("/connect stabber@localhost port 5230"); + prof_input("password"); + + sleep(1); + + assert_true(stbbr_verify( + "" + )); +} + +void +connect_jid_sends_presence_after_receiving_roster(void **state) { stbbr_for("roster", "" @@ -26,27 +46,11 @@ connect_jid(void **state) "" ); - int res = 0; - int fd = exp_spawnl("./profanity", NULL); - FILE *fp = fdopen(fd, "r+"); - - if (fp == NULL) { - assert_true(FALSE); - } - - setbuf(fp, (char *)0); - - write(fd, CONNECT_CMD, strlen(CONNECT_CMD)); - res = exp_expectl(fd, exp_exact, "Enter password:", 11, exp_end); - assert_true(res == 11); - - write(fd, PASSWORD, strlen(PASSWORD)); - res = exp_expectl(fd, exp_exact, "Connecting as stabber@localhost", 12, exp_end); - assert_true(res == 12); - res = exp_expectl(fd, exp_exact, "stabber@localhost logged in successfully", 13, exp_end); - assert_true(res == 13); + prof_input("/connect stabber@localhost port 5230"); + prof_input("password"); sleep(1); + assert_true(stbbr_verify( "" "" @@ -54,78 +58,32 @@ connect_jid(void **state) )); } -//void -//connect_jid_requests_roster(void **state) -//{ -// will_return(ui_ask_password, strdup("password")); -// expect_any_cons_show(); -// -// cmd_process_input(strdup("/connect stabber@localhost port 5230")); -// prof_process_xmpp(20); -// -// assert_true(stbbr_verify( -// "" -// )); -//} -// -//void -//connect_jid_sends_presence_after_receiving_roster(void **state) -//{ -// will_return(ui_ask_password, strdup("password")); -// expect_any_cons_show(); -// -// stbbr_for("roster", -// "" -// "" -// "" -// "" -// "" -// "" -// ); -// -// cmd_process_input(strdup("/connect stabber@localhost port 5230")); -// prof_process_xmpp(20); -// -// assert_true(stbbr_verify( -// "" -// "" -// "" -// )); -//} -// -//void -//connect_jid_requests_bookmarks(void **state) -//{ -// will_return(ui_ask_password, strdup("password")); -// expect_any_cons_show(); -// -// cmd_process_input(strdup("/connect stabber@localhost port 5230")); -// prof_process_xmpp(20); -// -// assert_true(stbbr_verify( -// "" -// "" -// "" -// "" -// "" -// )); -//} -// -//void -//connect_bad_password(void **state) -//{ -// will_return(ui_ask_password, strdup("badpassword")); -// -// expect_cons_show("Connecting as stabber@localhost"); -// expect_cons_show_error("Login failed."); -// -// cmd_process_input(strdup("/connect stabber@localhost port 5230")); -// prof_process_xmpp(20); -// -// jabber_conn_status_t status = jabber_get_connection_status(); -// assert_true(status == JABBER_DISCONNECTED); -//} -// +void +connect_jid_requests_bookmarks(void **state) +{ + prof_input("/connect stabber@localhost port 5230"); + prof_input("password"); + + sleep(1); + + assert_true(stbbr_verify( + "" + "" + "" + "" + "" + )); +} + +void +connect_bad_password(void **state) +{ + prof_input("/connect stabber@localhost port 5230"); + prof_input("badpassword"); + + assert_true(prof_output("Login failed.")); +} + //void //show_presence_updates(void **state) //{ diff --git a/stabbertests/test_connect.h b/stabbertests/test_connect.h index d2d4dbee..a8795399 100644 --- a/stabbertests/test_connect.h +++ b/stabbertests/test_connect.h @@ -1,8 +1,8 @@ void connect_jid(void **state); -//void connect_jid_requests_roster(void **state); -//void connect_jid_sends_presence_after_receiving_roster(void **state); -//void connect_jid_requests_bookmarks(void **state); -//void connect_bad_password(void **state); +void connect_jid_requests_roster(void **state); +void connect_jid_sends_presence_after_receiving_roster(void **state); +void connect_jid_requests_bookmarks(void **state); +void connect_bad_password(void **state); //void show_presence_updates(void **state); //void sends_rooms_iq(void **state); //void multiple_pings(void **state); From 3760084680ded8abe6ee6bae6244d513f07f6e00 Mon Sep 17 00:00:00 2001 From: James Booth Date: Wed, 27 May 2015 19:48:25 +0100 Subject: [PATCH 25/44] Reimplemented stabber presence test --- stabbertests/stabbertestsuite.c | 6 +-- stabbertests/test_connect.c | 85 ++++++++++++++------------------- stabbertests/test_connect.h | 2 +- 3 files changed, 39 insertions(+), 54 deletions(-) diff --git a/stabbertests/stabbertestsuite.c b/stabbertests/stabbertestsuite.c index 55affa2a..906a1031 100644 --- a/stabbertests/stabbertestsuite.c +++ b/stabbertests/stabbertestsuite.c @@ -31,9 +31,9 @@ int main(int argc, char* argv[]) { unit_test_setup_teardown(connect_bad_password, init_prof_test, close_prof_test), -// unit_test_setup_teardown(show_presence_updates, -// init_prof_test, -// close_prof_test), + unit_test_setup_teardown(show_presence_updates, + init_prof_test, + close_prof_test), // unit_test_setup_teardown(sends_rooms_iq, // init_prof_test, // close_prof_test), diff --git a/stabbertests/test_connect.c b/stabbertests/test_connect.c index b8f1a1a6..7e29469d 100644 --- a/stabbertests/test_connect.c +++ b/stabbertests/test_connect.c @@ -84,56 +84,41 @@ connect_bad_password(void **state) assert_true(prof_output("Login failed.")); } -//void -//show_presence_updates(void **state) -//{ -// will_return(ui_ask_password, strdup("password")); -// expect_any_cons_show(); -// -// stbbr_for("roster", -// "" -// "" -// "" -// "" -// "" -// "" -// ); -// -// cmd_process_input(strdup("/connect stabber@localhost port 5230")); -// prof_process_xmpp(20); -// -// stbbr_send( -// "" -// "dnd" -// "busy!" -// "" -// "" -// "chat" -// "Talk to me!" -// "" -// "" -// "away" -// "Out of office" -// "" -// ); -// -// Resource *resource1 = resource_new("mobile", RESOURCE_DND, "busy!", 0); -// expect_string(ui_contact_online, barejid, "buddy1@localhost"); -// expect_check(ui_contact_online, resource, (CheckParameterValue)resource_equal_check, resource1); -// expect_value(ui_contact_online, last_activity, NULL); -// -// Resource *resource2 = resource_new("laptop", RESOURCE_CHAT, "Talk to me!", 0); -// expect_string(ui_contact_online, barejid, "buddy1@localhost"); -// expect_check(ui_contact_online, resource, (CheckParameterValue)resource_equal_check, resource2); -// expect_value(ui_contact_online, last_activity, NULL); -// -// Resource *resource3 = resource_new("work", RESOURCE_AWAY, "Out of office", 0); -// expect_string(ui_contact_online, barejid, "buddy2@localhost"); -// expect_check(ui_contact_online, resource, (CheckParameterValue)resource_equal_check, resource3); -// expect_value(ui_contact_online, last_activity, NULL); -// -// prof_process_xmpp(20); -//} +void +show_presence_updates(void **state) +{ + stbbr_for("roster", + "" + "" + "" + "" + "" + "" + ); + + prof_input("/connect stabber@localhost port 5230"); + prof_input("password"); + assert_true(prof_output("stabber@localhost logged in successfully")); + + stbbr_send( + "" + "dnd" + "busy!" + "" + "" + "chat" + "Talk to me!" + "" + "" + "away" + "Out of office" + "" + ); + + assert_true(prof_output("Buddy1 (mobile) is dnd")); + assert_true(prof_output("Buddy1 (laptop) is chat")); + assert_true(prof_output("Buddy2 (work) is away")); +} // //void //sends_rooms_iq(void **state) diff --git a/stabbertests/test_connect.h b/stabbertests/test_connect.h index a8795399..a6078078 100644 --- a/stabbertests/test_connect.h +++ b/stabbertests/test_connect.h @@ -3,7 +3,7 @@ void connect_jid_requests_roster(void **state); void connect_jid_sends_presence_after_receiving_roster(void **state); void connect_jid_requests_bookmarks(void **state); void connect_bad_password(void **state); -//void show_presence_updates(void **state); +void show_presence_updates(void **state); //void sends_rooms_iq(void **state); //void multiple_pings(void **state); //void responds_to_ping(void **state); From f8c5ed572729688a2ea26857a6bb94566b853410 Mon Sep 17 00:00:00 2001 From: James Booth Date: Wed, 27 May 2015 23:00:42 +0100 Subject: [PATCH 26/44] Implemented remaining tests with expect and stabber --- stabbertests/proftest.c | 2 - stabbertests/stabbertestsuite.c | 18 ++-- stabbertests/test_connect.c | 186 +++++++++++++++----------------- stabbertests/test_connect.h | 6 +- 4 files changed, 97 insertions(+), 115 deletions(-) diff --git a/stabbertests/proftest.c b/stabbertests/proftest.c index 3b3014ad..1f303a70 100644 --- a/stabbertests/proftest.c +++ b/stabbertests/proftest.c @@ -124,8 +124,6 @@ _cleanup_dirs(void) void init_prof_test(void **state) { - exp_timeout = 2; - if (stbbr_start(5230) != 0) { assert_true(FALSE); return; diff --git a/stabbertests/stabbertestsuite.c b/stabbertests/stabbertestsuite.c index 906a1031..a54b94dc 100644 --- a/stabbertests/stabbertestsuite.c +++ b/stabbertests/stabbertestsuite.c @@ -34,15 +34,15 @@ int main(int argc, char* argv[]) { unit_test_setup_teardown(show_presence_updates, init_prof_test, close_prof_test), -// unit_test_setup_teardown(sends_rooms_iq, -// init_prof_test, -// close_prof_test), -// unit_test_setup_teardown(multiple_pings, -// init_prof_test, -// close_prof_test), -// unit_test_setup_teardown(responds_to_ping, -// init_prof_test, -// close_prof_test), + unit_test_setup_teardown(sends_rooms_iq, + init_prof_test, + close_prof_test), + unit_test_setup_teardown(multiple_pings, + init_prof_test, + close_prof_test), + unit_test_setup_teardown(responds_to_ping, + init_prof_test, + close_prof_test), }; return run_tests(all_tests); diff --git a/stabbertests/test_connect.c b/stabbertests/test_connect.c index 7e29469d..ba88d50a 100644 --- a/stabbertests/test_connect.c +++ b/stabbertests/test_connect.c @@ -27,8 +27,6 @@ connect_jid_requests_roster(void **state) prof_input("/connect stabber@localhost port 5230"); prof_input("password"); - sleep(1); - assert_true(stbbr_verify( "" )); @@ -49,8 +47,6 @@ connect_jid_sends_presence_after_receiving_roster(void **state) prof_input("/connect stabber@localhost port 5230"); prof_input("password"); - sleep(1); - assert_true(stbbr_verify( "" "" @@ -64,8 +60,6 @@ connect_jid_requests_bookmarks(void **state) prof_input("/connect stabber@localhost port 5230"); prof_input("password"); - sleep(1); - assert_true(stbbr_verify( "" "" @@ -96,11 +90,7 @@ show_presence_updates(void **state) "" ); - prof_input("/connect stabber@localhost port 5230"); - prof_input("password"); - assert_true(prof_output("stabber@localhost logged in successfully")); - - stbbr_send( + stbbr_for("prof_presence_1", "" "dnd" "busy!" @@ -115,97 +105,91 @@ show_presence_updates(void **state) "" ); + prof_input("/connect stabber@localhost port 5230"); + prof_input("password"); + assert_true(prof_output("Buddy1 (mobile) is dnd")); assert_true(prof_output("Buddy1 (laptop) is chat")); assert_true(prof_output("Buddy2 (work) is away")); + + stbbr_send( + "" + "xa" + "Gone :(" + "" + ); + + assert_true(prof_output("Buddy1 (mobile) is xa")); +} + +void +sends_rooms_iq(void **state) +{ + stbbr_for("confreq", + "" + "" + "" + "" + "" + "" + ); + + prof_input("/connect stabber@localhost port 5230"); + prof_input("password"); + prof_input("/rooms"); + + assert_true(stbbr_verify_last( + "" + "" + "" + )); +} + +void +multiple_pings(void **state) +{ + stbbr_for("prof_ping_1", + "" + ); + stbbr_for("prof_ping_2", + "" + ); + + prof_input("/connect stabber@localhost port 5230"); + prof_input("password"); + + prof_input("/ping"); + assert_true(stbbr_verify( + "" + "" + "" + )); + assert_true(prof_output("Ping response from server")); + + prof_input("/ping"); + assert_true(stbbr_verify( + "" + "" + "" + )); + assert_true(prof_output("Ping response from server")); +} + +void +responds_to_ping(void **state) +{ + prof_input("/connect stabber@localhost port 5230"); + prof_input("password"); + + assert_true(prof_output("stabber@localhost logged in successfully")); + + stbbr_send( + "" + "" + "" + ); + + assert_true(stbbr_verify( + "" + )); } -// -//void -//sends_rooms_iq(void **state) -//{ -// will_return(ui_ask_password, strdup("password")); -// -// expect_any_cons_show(); -// -// cmd_process_input(strdup("/connect stabber@localhost port 5230")); -// prof_process_xmpp(20); -// -// stbbr_for("confreq", -// "" -// "" -// "" -// "" -// "" -// "" -// ); -// -// cmd_process_input(strdup("/rooms")); -// prof_process_xmpp(20); -// -// assert_true(stbbr_verify_last( -// "" -// "" -// "" -// )); -//} -// -//void -//multiple_pings(void **state) -//{ -// will_return(ui_ask_password, strdup("password")); -// -// expect_any_cons_show(); -// -// cmd_process_input(strdup("/connect stabber@localhost port 5230")); -// prof_process_xmpp(20); -// -// expect_cons_show("Pinged server..."); -// expect_any_cons_show(); -// expect_cons_show("Pinged server..."); -// expect_any_cons_show(); -// -// stbbr_for("prof_ping_1", -// "" -// ); -// stbbr_for("prof_ping_2", -// "" -// ); -// -// cmd_process_input(strdup("/ping")); -// prof_process_xmpp(20); -// cmd_process_input(strdup("/ping")); -// prof_process_xmpp(20); -// -// assert_true(stbbr_verify( -// "" -// "" -// "" -// )); -// assert_true(stbbr_verify( -// "" -// "" -// "" -// )); -//} -// -//void -//responds_to_ping(void **state) -//{ -// will_return(ui_ask_password, strdup("password")); -// -// expect_any_cons_show(); -// -// cmd_process_input(strdup("/connect stabber@localhost port 5230")); -// prof_process_xmpp(20); -// -// stbbr_send( -// "" -// "" -// "" -// ); -// prof_process_xmpp(20); -// -// assert_true(stbbr_verify( -// "" -// )); -//} diff --git a/stabbertests/test_connect.h b/stabbertests/test_connect.h index a6078078..971652b0 100644 --- a/stabbertests/test_connect.h +++ b/stabbertests/test_connect.h @@ -4,6 +4,6 @@ void connect_jid_sends_presence_after_receiving_roster(void **state); void connect_jid_requests_bookmarks(void **state); void connect_bad_password(void **state); void show_presence_updates(void **state); -//void sends_rooms_iq(void **state); -//void multiple_pings(void **state); -//void responds_to_ping(void **state); +void sends_rooms_iq(void **state); +void multiple_pings(void **state); +void responds_to_ping(void **state); From 5aab876ab547b1e8d534eab022cf17139415bf9d Mon Sep 17 00:00:00 2001 From: James Booth Date: Wed, 27 May 2015 23:11:58 +0100 Subject: [PATCH 27/44] Renamed verifcation functions --- stabbertests/test_connect.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/stabbertests/test_connect.c b/stabbertests/test_connect.c index ba88d50a..554cc511 100644 --- a/stabbertests/test_connect.c +++ b/stabbertests/test_connect.c @@ -27,7 +27,7 @@ connect_jid_requests_roster(void **state) prof_input("/connect stabber@localhost port 5230"); prof_input("password"); - assert_true(stbbr_verify( + assert_true(stbbr_received( "" )); } @@ -47,7 +47,7 @@ connect_jid_sends_presence_after_receiving_roster(void **state) prof_input("/connect stabber@localhost port 5230"); prof_input("password"); - assert_true(stbbr_verify( + assert_true(stbbr_received( "" "" "" @@ -60,7 +60,7 @@ connect_jid_requests_bookmarks(void **state) prof_input("/connect stabber@localhost port 5230"); prof_input("password"); - assert_true(stbbr_verify( + assert_true(stbbr_received( "" "" "" @@ -138,7 +138,7 @@ sends_rooms_iq(void **state) prof_input("password"); prof_input("/rooms"); - assert_true(stbbr_verify_last( + assert_true(stbbr_last_received( "" "" "" @@ -159,7 +159,7 @@ multiple_pings(void **state) prof_input("password"); prof_input("/ping"); - assert_true(stbbr_verify( + assert_true(stbbr_received( "" "" "" @@ -167,7 +167,7 @@ multiple_pings(void **state) assert_true(prof_output("Ping response from server")); prof_input("/ping"); - assert_true(stbbr_verify( + assert_true(stbbr_received( "" "" "" @@ -189,7 +189,7 @@ responds_to_ping(void **state) "" ); - assert_true(stbbr_verify( + assert_true(stbbr_received( "" )); } From 0c99dc7ad60843aa7719a9c75aa701e3c86720da Mon Sep 17 00:00:00 2001 From: James Booth Date: Wed, 27 May 2015 23:42:27 +0100 Subject: [PATCH 28/44] Changed id in ping test --- stabbertests/test_connect.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stabbertests/test_connect.c b/stabbertests/test_connect.c index 554cc511..6f145dd5 100644 --- a/stabbertests/test_connect.c +++ b/stabbertests/test_connect.c @@ -184,12 +184,12 @@ responds_to_ping(void **state) assert_true(prof_output("stabber@localhost logged in successfully")); stbbr_send( - "" + "" "" "" ); assert_true(stbbr_received( - "" + "" )); } From 6d6bb6458873196f904257cd00a6f2221262783d Mon Sep 17 00:00:00 2001 From: James Booth Date: Thu, 28 May 2015 18:50:55 +0100 Subject: [PATCH 29/44] Moved tests -> unittests --- .gitignore | 2 + Makefile.am | 72 ++++++++++----------- stabbertests/proftest.c | 26 ++++---- {tests => unittests}/config/stub_accounts.c | 0 {tests => unittests}/helpers.c | 0 {tests => unittests}/helpers.h | 0 {tests => unittests}/log/stub_log.c | 0 {tests => unittests}/otr/stub_otr.c | 0 {tests => unittests}/test_autocomplete.c | 0 {tests => unittests}/test_autocomplete.h | 0 {tests => unittests}/test_chat_session.c | 0 {tests => unittests}/test_chat_session.h | 0 {tests => unittests}/test_cmd_account.c | 0 {tests => unittests}/test_cmd_account.h | 0 {tests => unittests}/test_cmd_alias.c | 0 {tests => unittests}/test_cmd_alias.h | 0 {tests => unittests}/test_cmd_bookmark.c | 0 {tests => unittests}/test_cmd_bookmark.h | 0 {tests => unittests}/test_cmd_connect.c | 0 {tests => unittests}/test_cmd_connect.h | 0 {tests => unittests}/test_cmd_disconnect.c | 0 {tests => unittests}/test_cmd_disconnect.h | 0 {tests => unittests}/test_cmd_join.c | 0 {tests => unittests}/test_cmd_join.h | 0 {tests => unittests}/test_cmd_otr.c | 0 {tests => unittests}/test_cmd_otr.h | 0 {tests => unittests}/test_cmd_rooms.c | 0 {tests => unittests}/test_cmd_rooms.h | 0 {tests => unittests}/test_cmd_roster.c | 0 {tests => unittests}/test_cmd_roster.h | 0 {tests => unittests}/test_cmd_statuses.c | 0 {tests => unittests}/test_cmd_statuses.h | 0 {tests => unittests}/test_cmd_sub.c | 0 {tests => unittests}/test_cmd_sub.h | 0 {tests => unittests}/test_common.c | 0 {tests => unittests}/test_common.h | 0 {tests => unittests}/test_contact.c | 0 {tests => unittests}/test_contact.h | 0 {tests => unittests}/test_form.c | 0 {tests => unittests}/test_form.h | 0 {tests => unittests}/test_jid.c | 0 {tests => unittests}/test_jid.h | 0 {tests => unittests}/test_keyhandlers.c | 0 {tests => unittests}/test_keyhandlers.h | 0 {tests => unittests}/test_muc.c | 0 {tests => unittests}/test_muc.h | 0 {tests => unittests}/test_parser.c | 0 {tests => unittests}/test_parser.h | 0 {tests => unittests}/test_preferences.c | 0 {tests => unittests}/test_preferences.h | 0 {tests => unittests}/test_roster_list.c | 0 {tests => unittests}/test_roster_list.h | 0 {tests => unittests}/test_server_events.c | 0 {tests => unittests}/test_server_events.h | 0 {tests => unittests}/ui/stub_ui.c | 2 +- {tests => unittests}/ui/stub_ui.h | 0 tests/testsuite.c => unittests/unittests.c | 0 {tests => unittests}/xmpp/stub_xmpp.c | 0 58 files changed, 52 insertions(+), 50 deletions(-) rename {tests => unittests}/config/stub_accounts.c (100%) rename {tests => unittests}/helpers.c (100%) rename {tests => unittests}/helpers.h (100%) rename {tests => unittests}/log/stub_log.c (100%) rename {tests => unittests}/otr/stub_otr.c (100%) rename {tests => unittests}/test_autocomplete.c (100%) rename {tests => unittests}/test_autocomplete.h (100%) rename {tests => unittests}/test_chat_session.c (100%) rename {tests => unittests}/test_chat_session.h (100%) rename {tests => unittests}/test_cmd_account.c (100%) rename {tests => unittests}/test_cmd_account.h (100%) rename {tests => unittests}/test_cmd_alias.c (100%) rename {tests => unittests}/test_cmd_alias.h (100%) rename {tests => unittests}/test_cmd_bookmark.c (100%) rename {tests => unittests}/test_cmd_bookmark.h (100%) rename {tests => unittests}/test_cmd_connect.c (100%) rename {tests => unittests}/test_cmd_connect.h (100%) rename {tests => unittests}/test_cmd_disconnect.c (100%) rename {tests => unittests}/test_cmd_disconnect.h (100%) rename {tests => unittests}/test_cmd_join.c (100%) rename {tests => unittests}/test_cmd_join.h (100%) rename {tests => unittests}/test_cmd_otr.c (100%) rename {tests => unittests}/test_cmd_otr.h (100%) rename {tests => unittests}/test_cmd_rooms.c (100%) rename {tests => unittests}/test_cmd_rooms.h (100%) rename {tests => unittests}/test_cmd_roster.c (100%) rename {tests => unittests}/test_cmd_roster.h (100%) rename {tests => unittests}/test_cmd_statuses.c (100%) rename {tests => unittests}/test_cmd_statuses.h (100%) rename {tests => unittests}/test_cmd_sub.c (100%) rename {tests => unittests}/test_cmd_sub.h (100%) rename {tests => unittests}/test_common.c (100%) rename {tests => unittests}/test_common.h (100%) rename {tests => unittests}/test_contact.c (100%) rename {tests => unittests}/test_contact.h (100%) rename {tests => unittests}/test_form.c (100%) rename {tests => unittests}/test_form.h (100%) rename {tests => unittests}/test_jid.c (100%) rename {tests => unittests}/test_jid.h (100%) rename {tests => unittests}/test_keyhandlers.c (100%) rename {tests => unittests}/test_keyhandlers.h (100%) rename {tests => unittests}/test_muc.c (100%) rename {tests => unittests}/test_muc.h (100%) rename {tests => unittests}/test_parser.c (100%) rename {tests => unittests}/test_parser.h (100%) rename {tests => unittests}/test_preferences.c (100%) rename {tests => unittests}/test_preferences.h (100%) rename {tests => unittests}/test_roster_list.c (100%) rename {tests => unittests}/test_roster_list.h (100%) rename {tests => unittests}/test_server_events.c (100%) rename {tests => unittests}/test_server_events.h (100%) rename {tests => unittests}/ui/stub_ui.c (99%) rename {tests => unittests}/ui/stub_ui.h (100%) rename tests/testsuite.c => unittests/unittests.c (100%) rename {tests => unittests}/xmpp/stub_xmpp.c (100%) diff --git a/.gitignore b/.gitignore index c3d9a977..8a73f436 100644 --- a/.gitignore +++ b/.gitignore @@ -71,3 +71,5 @@ main_fragment.html toc_fragment.html stabbertests/stabbertestsuite stabbertests/stabbertestsuite.trs +unittests/unittests +unittests/unittests.trs diff --git a/Makefile.am b/Makefile.am index 5ac81f52..0c5f23ab 100644 --- a/Makefile.am +++ b/Makefile.am @@ -35,7 +35,7 @@ core_sources = \ src/config/preferences.c src/config/preferences.h \ src/config/theme.c src/config/theme.h -test_sources = \ +unittest_sources = \ src/contact.c src/contact.h src/common.c \ src/log.h src/profanity.c src/common.h \ src/profanity.h src/chat_session.c \ @@ -65,34 +65,34 @@ test_sources = \ src/event/server_events.c src/event/server_events.h \ src/event/client_events.c src/event/client_events.h \ src/event/ui_events.c src/event/ui_events.h \ - tests/xmpp/stub_xmpp.c \ - tests/ui/stub_ui.c \ - tests/log/stub_log.c \ - tests/config/stub_accounts.c \ - tests/helpers.c tests/helpers.h \ - tests/test_cmd_account.c tests/test_cmd_account.h \ - tests/test_cmd_alias.c tests/test_cmd_alias.h \ - tests/test_cmd_bookmark.c tests/test_cmd_bookmark.h \ - tests/test_cmd_connect.c tests/test_cmd_connect.h \ - tests/test_cmd_join.c tests/test_cmd_join.h \ - tests/test_cmd_otr.c tests/test_cmd_otr.h \ - tests/test_cmd_rooms.c tests/test_cmd_rooms.h \ - tests/test_cmd_roster.c tests/test_cmd_roster.h \ - tests/test_cmd_statuses.c tests/test_cmd_statuses.h \ - tests/test_cmd_sub.c tests/test_cmd_sub.h \ - tests/test_cmd_disconnect.c tests/test_cmd_disconnect.h \ - tests/test_common.c tests/test_common.h \ - tests/test_contact.c tests/test_contact.h \ - tests/test_form.c tests/test_form.h \ - tests/test_jid.c tests/test_jid.h \ - tests/test_muc.c tests/test_muc.h \ - tests/test_parser.c tests/test_parser.h \ - tests/test_preferences.c tests/test_preferences.h \ - tests/test_roster_list.c tests/test_roster_list.h \ - tests/test_server_events.c tests/test_server_events.h \ - tests/test_autocomplete.c tests/test_autocomplete.h \ - tests/test_chat_session.c tests/test_chat_session.h \ - tests/testsuite.c + unittests/xmpp/stub_xmpp.c \ + unittests/ui/stub_ui.c \ + unittests/log/stub_log.c \ + unittests/config/stub_accounts.c \ + unittests/helpers.c unittests/helpers.h \ + unittests/test_cmd_account.c unittests/test_cmd_account.h \ + unittests/test_cmd_alias.c unittests/test_cmd_alias.h \ + unittests/test_cmd_bookmark.c unittests/test_cmd_bookmark.h \ + unittests/test_cmd_connect.c unittests/test_cmd_connect.h \ + unittests/test_cmd_join.c unittests/test_cmd_join.h \ + unittests/test_cmd_otr.c unittests/test_cmd_otr.h \ + unittests/test_cmd_rooms.c unittests/test_cmd_rooms.h \ + unittests/test_cmd_roster.c unittests/test_cmd_roster.h \ + unittests/test_cmd_statuses.c unittests/test_cmd_statuses.h \ + unittests/test_cmd_sub.c unittests/test_cmd_sub.h \ + unittests/test_cmd_disconnect.c unittests/test_cmd_disconnect.h \ + unittests/test_common.c unittests/test_common.h \ + unittests/test_contact.c unittests/test_contact.h \ + unittests/test_form.c unittests/test_form.h \ + unittests/test_jid.c unittests/test_jid.h \ + unittests/test_muc.c unittests/test_muc.h \ + unittests/test_parser.c unittests/test_parser.h \ + unittests/test_preferences.c unittests/test_preferences.h \ + unittests/test_roster_list.c unittests/test_roster_list.h \ + unittests/test_server_events.c unittests/test_server_events.h \ + unittests/test_autocomplete.c unittests/test_autocomplete.h \ + unittests/test_chat_session.c unittests/test_chat_session.h \ + unittests/unittests.c stabbertest_sources = \ stabbertests/proftest.c stabbertests/proftest.h \ @@ -109,8 +109,8 @@ otr3_sources = \ otr4_sources = \ src/otr/otrlib.h src/otr/otrlibv4.c src/otr/otr.h src/otr/otr.c -otr_test_sources = \ - tests/otr/stub_otr.c +otr_unittest_sources = \ + unittests/otr/stub_otr.c themes_sources = themes/* @@ -119,7 +119,7 @@ script_sources = bootstrap.sh configure-debug install-all.sh man_sources = docs/profanity.1 if BUILD_OTR -test_sources += $(otr_test_sources) +unittest_sources += $(otr_unittest_sources) if BUILD_OTR3 core_sources += $(otr3_sources) endif @@ -138,10 +138,10 @@ if INCLUDE_GIT_VERSION BUILT_SOURCES = $(git_include) endif -TESTS = tests/testsuite stabbertests/stabbertestsuite -check_PROGRAMS = tests/testsuite stabbertests/stabbertestsuite -tests_testsuite_SOURCES = $(test_sources) -tests_testsuite_LDADD = -lcmocka +TESTS = unittests/unittests stabbertests/stabbertestsuite +check_PROGRAMS = unittests/unittests stabbertests/stabbertestsuite +unittests_unittests_SOURCES = $(unittest_sources) +unittests_unittests_LDADD = -lcmocka stabbertests_stabbertestsuite_SOURCES = $(stabbertest_sources) stabbertests_stabbertestsuite_CFLAGS = -I/usr/include/tcl8.6 -I/usr/include/tcl8.5 stabbertests_stabbertestsuite_LDADD = -lcmocka -lstabber -lexpect -ltcl diff --git a/stabbertests/proftest.c b/stabbertests/proftest.c index 1f303a70..dbecd117 100644 --- a/stabbertests/proftest.c +++ b/stabbertests/proftest.c @@ -121,6 +121,19 @@ _cleanup_dirs(void) } } +void +prof_start(void) +{ + fd = exp_spawnl("./profanity", NULL); + FILE *fp = fdopen(fd, "r+"); + + if (fp == NULL) { + assert_true(FALSE); + } + + setbuf(fp, (char *)0); +} + void init_prof_test(void **state) { @@ -156,19 +169,6 @@ close_prof_test(void **state) stbbr_stop(); } -void -prof_start(void) -{ - fd = exp_spawnl("./profanity", NULL); - FILE *fp = fdopen(fd, "r+"); - - if (fp == NULL) { - assert_true(FALSE); - } - - setbuf(fp, (char *)0); -} - void prof_input(char *input) { diff --git a/tests/config/stub_accounts.c b/unittests/config/stub_accounts.c similarity index 100% rename from tests/config/stub_accounts.c rename to unittests/config/stub_accounts.c diff --git a/tests/helpers.c b/unittests/helpers.c similarity index 100% rename from tests/helpers.c rename to unittests/helpers.c diff --git a/tests/helpers.h b/unittests/helpers.h similarity index 100% rename from tests/helpers.h rename to unittests/helpers.h diff --git a/tests/log/stub_log.c b/unittests/log/stub_log.c similarity index 100% rename from tests/log/stub_log.c rename to unittests/log/stub_log.c diff --git a/tests/otr/stub_otr.c b/unittests/otr/stub_otr.c similarity index 100% rename from tests/otr/stub_otr.c rename to unittests/otr/stub_otr.c diff --git a/tests/test_autocomplete.c b/unittests/test_autocomplete.c similarity index 100% rename from tests/test_autocomplete.c rename to unittests/test_autocomplete.c diff --git a/tests/test_autocomplete.h b/unittests/test_autocomplete.h similarity index 100% rename from tests/test_autocomplete.h rename to unittests/test_autocomplete.h diff --git a/tests/test_chat_session.c b/unittests/test_chat_session.c similarity index 100% rename from tests/test_chat_session.c rename to unittests/test_chat_session.c diff --git a/tests/test_chat_session.h b/unittests/test_chat_session.h similarity index 100% rename from tests/test_chat_session.h rename to unittests/test_chat_session.h diff --git a/tests/test_cmd_account.c b/unittests/test_cmd_account.c similarity index 100% rename from tests/test_cmd_account.c rename to unittests/test_cmd_account.c diff --git a/tests/test_cmd_account.h b/unittests/test_cmd_account.h similarity index 100% rename from tests/test_cmd_account.h rename to unittests/test_cmd_account.h diff --git a/tests/test_cmd_alias.c b/unittests/test_cmd_alias.c similarity index 100% rename from tests/test_cmd_alias.c rename to unittests/test_cmd_alias.c diff --git a/tests/test_cmd_alias.h b/unittests/test_cmd_alias.h similarity index 100% rename from tests/test_cmd_alias.h rename to unittests/test_cmd_alias.h diff --git a/tests/test_cmd_bookmark.c b/unittests/test_cmd_bookmark.c similarity index 100% rename from tests/test_cmd_bookmark.c rename to unittests/test_cmd_bookmark.c diff --git a/tests/test_cmd_bookmark.h b/unittests/test_cmd_bookmark.h similarity index 100% rename from tests/test_cmd_bookmark.h rename to unittests/test_cmd_bookmark.h diff --git a/tests/test_cmd_connect.c b/unittests/test_cmd_connect.c similarity index 100% rename from tests/test_cmd_connect.c rename to unittests/test_cmd_connect.c diff --git a/tests/test_cmd_connect.h b/unittests/test_cmd_connect.h similarity index 100% rename from tests/test_cmd_connect.h rename to unittests/test_cmd_connect.h diff --git a/tests/test_cmd_disconnect.c b/unittests/test_cmd_disconnect.c similarity index 100% rename from tests/test_cmd_disconnect.c rename to unittests/test_cmd_disconnect.c diff --git a/tests/test_cmd_disconnect.h b/unittests/test_cmd_disconnect.h similarity index 100% rename from tests/test_cmd_disconnect.h rename to unittests/test_cmd_disconnect.h diff --git a/tests/test_cmd_join.c b/unittests/test_cmd_join.c similarity index 100% rename from tests/test_cmd_join.c rename to unittests/test_cmd_join.c diff --git a/tests/test_cmd_join.h b/unittests/test_cmd_join.h similarity index 100% rename from tests/test_cmd_join.h rename to unittests/test_cmd_join.h diff --git a/tests/test_cmd_otr.c b/unittests/test_cmd_otr.c similarity index 100% rename from tests/test_cmd_otr.c rename to unittests/test_cmd_otr.c diff --git a/tests/test_cmd_otr.h b/unittests/test_cmd_otr.h similarity index 100% rename from tests/test_cmd_otr.h rename to unittests/test_cmd_otr.h diff --git a/tests/test_cmd_rooms.c b/unittests/test_cmd_rooms.c similarity index 100% rename from tests/test_cmd_rooms.c rename to unittests/test_cmd_rooms.c diff --git a/tests/test_cmd_rooms.h b/unittests/test_cmd_rooms.h similarity index 100% rename from tests/test_cmd_rooms.h rename to unittests/test_cmd_rooms.h diff --git a/tests/test_cmd_roster.c b/unittests/test_cmd_roster.c similarity index 100% rename from tests/test_cmd_roster.c rename to unittests/test_cmd_roster.c diff --git a/tests/test_cmd_roster.h b/unittests/test_cmd_roster.h similarity index 100% rename from tests/test_cmd_roster.h rename to unittests/test_cmd_roster.h diff --git a/tests/test_cmd_statuses.c b/unittests/test_cmd_statuses.c similarity index 100% rename from tests/test_cmd_statuses.c rename to unittests/test_cmd_statuses.c diff --git a/tests/test_cmd_statuses.h b/unittests/test_cmd_statuses.h similarity index 100% rename from tests/test_cmd_statuses.h rename to unittests/test_cmd_statuses.h diff --git a/tests/test_cmd_sub.c b/unittests/test_cmd_sub.c similarity index 100% rename from tests/test_cmd_sub.c rename to unittests/test_cmd_sub.c diff --git a/tests/test_cmd_sub.h b/unittests/test_cmd_sub.h similarity index 100% rename from tests/test_cmd_sub.h rename to unittests/test_cmd_sub.h diff --git a/tests/test_common.c b/unittests/test_common.c similarity index 100% rename from tests/test_common.c rename to unittests/test_common.c diff --git a/tests/test_common.h b/unittests/test_common.h similarity index 100% rename from tests/test_common.h rename to unittests/test_common.h diff --git a/tests/test_contact.c b/unittests/test_contact.c similarity index 100% rename from tests/test_contact.c rename to unittests/test_contact.c diff --git a/tests/test_contact.h b/unittests/test_contact.h similarity index 100% rename from tests/test_contact.h rename to unittests/test_contact.h diff --git a/tests/test_form.c b/unittests/test_form.c similarity index 100% rename from tests/test_form.c rename to unittests/test_form.c diff --git a/tests/test_form.h b/unittests/test_form.h similarity index 100% rename from tests/test_form.h rename to unittests/test_form.h diff --git a/tests/test_jid.c b/unittests/test_jid.c similarity index 100% rename from tests/test_jid.c rename to unittests/test_jid.c diff --git a/tests/test_jid.h b/unittests/test_jid.h similarity index 100% rename from tests/test_jid.h rename to unittests/test_jid.h diff --git a/tests/test_keyhandlers.c b/unittests/test_keyhandlers.c similarity index 100% rename from tests/test_keyhandlers.c rename to unittests/test_keyhandlers.c diff --git a/tests/test_keyhandlers.h b/unittests/test_keyhandlers.h similarity index 100% rename from tests/test_keyhandlers.h rename to unittests/test_keyhandlers.h diff --git a/tests/test_muc.c b/unittests/test_muc.c similarity index 100% rename from tests/test_muc.c rename to unittests/test_muc.c diff --git a/tests/test_muc.h b/unittests/test_muc.h similarity index 100% rename from tests/test_muc.h rename to unittests/test_muc.h diff --git a/tests/test_parser.c b/unittests/test_parser.c similarity index 100% rename from tests/test_parser.c rename to unittests/test_parser.c diff --git a/tests/test_parser.h b/unittests/test_parser.h similarity index 100% rename from tests/test_parser.h rename to unittests/test_parser.h diff --git a/tests/test_preferences.c b/unittests/test_preferences.c similarity index 100% rename from tests/test_preferences.c rename to unittests/test_preferences.c diff --git a/tests/test_preferences.h b/unittests/test_preferences.h similarity index 100% rename from tests/test_preferences.h rename to unittests/test_preferences.h diff --git a/tests/test_roster_list.c b/unittests/test_roster_list.c similarity index 100% rename from tests/test_roster_list.c rename to unittests/test_roster_list.c diff --git a/tests/test_roster_list.h b/unittests/test_roster_list.h similarity index 100% rename from tests/test_roster_list.h rename to unittests/test_roster_list.h diff --git a/tests/test_server_events.c b/unittests/test_server_events.c similarity index 100% rename from tests/test_server_events.c rename to unittests/test_server_events.c diff --git a/tests/test_server_events.h b/unittests/test_server_events.h similarity index 100% rename from tests/test_server_events.h rename to unittests/test_server_events.h diff --git a/tests/ui/stub_ui.c b/unittests/ui/stub_ui.c similarity index 99% rename from tests/ui/stub_ui.c rename to unittests/ui/stub_ui.c index 52c38570..bdee3453 100644 --- a/tests/ui/stub_ui.c +++ b/unittests/ui/stub_ui.c @@ -7,7 +7,7 @@ #include "ui/window.h" #include "ui/ui.h" -#include "tests/ui/stub_ui.h" +#include "unittests/ui/stub_ui.h" // mock state diff --git a/tests/ui/stub_ui.h b/unittests/ui/stub_ui.h similarity index 100% rename from tests/ui/stub_ui.h rename to unittests/ui/stub_ui.h diff --git a/tests/testsuite.c b/unittests/unittests.c similarity index 100% rename from tests/testsuite.c rename to unittests/unittests.c diff --git a/tests/xmpp/stub_xmpp.c b/unittests/xmpp/stub_xmpp.c similarity index 100% rename from tests/xmpp/stub_xmpp.c rename to unittests/xmpp/stub_xmpp.c From e919445231467706eaadaa3bc2483f9a462a4cd3 Mon Sep 17 00:00:00 2001 From: James Booth Date: Thu, 28 May 2015 18:56:16 +0100 Subject: [PATCH 30/44] Renamed stabbertests -> functionaltests --- .gitignore | 5 +++-- Makefile.am | 18 +++++++++--------- .../functionaltests.c | 0 {stabbertests => functionaltests}/proftest.c | 0 {stabbertests => functionaltests}/proftest.h | 0 .../test_connect.c | 0 .../test_connect.h | 0 7 files changed, 12 insertions(+), 11 deletions(-) rename stabbertests/stabbertestsuite.c => functionaltests/functionaltests.c (100%) rename {stabbertests => functionaltests}/proftest.c (100%) rename {stabbertests => functionaltests}/proftest.h (100%) rename {stabbertests => functionaltests}/test_connect.c (100%) rename {stabbertests => functionaltests}/test_connect.h (100%) diff --git a/.gitignore b/.gitignore index 8a73f436..03e0adef 100644 --- a/.gitignore +++ b/.gitignore @@ -69,7 +69,8 @@ callgrind.out.* gen_docs.sh main_fragment.html toc_fragment.html -stabbertests/stabbertestsuite -stabbertests/stabbertestsuite.trs unittests/unittests unittests/unittests.trs +functionaltests/functionaltests +functionaltests/functionaltests.trs + diff --git a/Makefile.am b/Makefile.am index 0c5f23ab..a8574314 100644 --- a/Makefile.am +++ b/Makefile.am @@ -94,10 +94,10 @@ unittest_sources = \ unittests/test_chat_session.c unittests/test_chat_session.h \ unittests/unittests.c -stabbertest_sources = \ - stabbertests/proftest.c stabbertests/proftest.h \ - stabbertests/test_connect.c stabbertests/test_connect.h \ - stabbertests/stabbertestsuite.c +functionaltest_sources = \ + functionaltests/proftest.c functionaltests/proftest.h \ + functionaltests/test_connect.c functionaltests/test_connect.h \ + functionaltests/functionaltests.c main_source = src/main.c @@ -138,13 +138,13 @@ if INCLUDE_GIT_VERSION BUILT_SOURCES = $(git_include) endif -TESTS = unittests/unittests stabbertests/stabbertestsuite -check_PROGRAMS = unittests/unittests stabbertests/stabbertestsuite +TESTS = unittests/unittests functionaltests/functionaltests +check_PROGRAMS = unittests/unittests functionaltests/functionaltests unittests_unittests_SOURCES = $(unittest_sources) unittests_unittests_LDADD = -lcmocka -stabbertests_stabbertestsuite_SOURCES = $(stabbertest_sources) -stabbertests_stabbertestsuite_CFLAGS = -I/usr/include/tcl8.6 -I/usr/include/tcl8.5 -stabbertests_stabbertestsuite_LDADD = -lcmocka -lstabber -lexpect -ltcl +functionaltests_functionaltests_SOURCES = $(functionaltest_sources) +functionaltests_functionaltests_CFLAGS = -I/usr/include/tcl8.6 -I/usr/include/tcl8.5 +functionaltests_functionaltests_LDADD = -lcmocka -lstabber -lexpect -ltcl man_MANS = $(man_sources) diff --git a/stabbertests/stabbertestsuite.c b/functionaltests/functionaltests.c similarity index 100% rename from stabbertests/stabbertestsuite.c rename to functionaltests/functionaltests.c diff --git a/stabbertests/proftest.c b/functionaltests/proftest.c similarity index 100% rename from stabbertests/proftest.c rename to functionaltests/proftest.c diff --git a/stabbertests/proftest.h b/functionaltests/proftest.h similarity index 100% rename from stabbertests/proftest.h rename to functionaltests/proftest.h diff --git a/stabbertests/test_connect.c b/functionaltests/test_connect.c similarity index 100% rename from stabbertests/test_connect.c rename to functionaltests/test_connect.c diff --git a/stabbertests/test_connect.h b/functionaltests/test_connect.h similarity index 100% rename from stabbertests/test_connect.h rename to functionaltests/test_connect.h From d4784db7e1cb4d6bb85cbd8a0caddafb7a7afdec Mon Sep 17 00:00:00 2001 From: James Booth Date: Thu, 28 May 2015 19:01:49 +0100 Subject: [PATCH 31/44] Fixed test file paths --- functionaltests/proftest.c | 5 ++--- functionaltests/proftest.h | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/functionaltests/proftest.c b/functionaltests/proftest.c index dbecd117..55892b30 100644 --- a/functionaltests/proftest.c +++ b/functionaltests/proftest.c @@ -14,8 +14,7 @@ #include #include -#define XDG_CONFIG_HOME "./stabbertests/files/xdg_config_home" -#define XDG_DATA_HOME "./stabbertests/files/xdg_data_home" +#include "proftest.h" char *config_orig; char *data_orig; @@ -115,7 +114,7 @@ _create_logs_dir(void) void _cleanup_dirs(void) { - int res = system("rm -rf ./stabbertests/files"); + int res = system("rm -rf ./functionaltests/files"); if (res == -1) { assert_true(FALSE); } diff --git a/functionaltests/proftest.h b/functionaltests/proftest.h index 73e3680e..22a7745f 100644 --- a/functionaltests/proftest.h +++ b/functionaltests/proftest.h @@ -1,8 +1,8 @@ #ifndef __H_PROFTEST #define __H_PROFTEST -#define XDG_CONFIG_HOME "./stabbertests/files/xdg_config_home" -#define XDG_DATA_HOME "./stabbertests/files/xdg_data_home" +#define XDG_CONFIG_HOME "./functionaltests/files/xdg_config_home" +#define XDG_DATA_HOME "./functionaltests/files/xdg_data_home" void init_prof_test(void **state); void close_prof_test(void **state); From f17afcf5d421ee987cd2f4fe45cf7d3ad25a6eb9 Mon Sep 17 00:00:00 2001 From: James Booth Date: Thu, 28 May 2015 20:02:16 +0100 Subject: [PATCH 32/44] Split functional tests --- Makefile.am | 2 + functionaltests/functionaltests.c | 12 ++-- functionaltests/proftest.c | 12 ++++ functionaltests/proftest.h | 2 + functionaltests/test_connect.c | 100 ++++-------------------------- functionaltests/test_connect.h | 6 +- functionaltests/test_ping.c | 59 ++++++++++++++++++ functionaltests/test_ping.h | 2 + functionaltests/test_rooms.c | 38 ++++++++++++ functionaltests/test_rooms.h | 2 + 10 files changed, 138 insertions(+), 97 deletions(-) create mode 100644 functionaltests/test_ping.c create mode 100644 functionaltests/test_ping.h create mode 100644 functionaltests/test_rooms.c create mode 100644 functionaltests/test_rooms.h diff --git a/Makefile.am b/Makefile.am index a8574314..93d2fec0 100644 --- a/Makefile.am +++ b/Makefile.am @@ -97,6 +97,8 @@ unittest_sources = \ functionaltest_sources = \ functionaltests/proftest.c functionaltests/proftest.h \ functionaltests/test_connect.c functionaltests/test_connect.h \ + functionaltests/test_ping.c functionaltests/test_ping.h \ + functionaltests/test_rooms.c functionaltests/test_rooms.h \ functionaltests/functionaltests.c main_source = src/main.c diff --git a/functionaltests/functionaltests.c b/functionaltests/functionaltests.c index a54b94dc..6c627d38 100644 --- a/functionaltests/functionaltests.c +++ b/functionaltests/functionaltests.c @@ -11,6 +11,8 @@ #include "proftest.h" #include "test_connect.h" +#include "test_ping.h" +#include "test_rooms.h" int main(int argc, char* argv[]) { @@ -31,16 +33,18 @@ int main(int argc, char* argv[]) { unit_test_setup_teardown(connect_bad_password, init_prof_test, close_prof_test), - unit_test_setup_teardown(show_presence_updates, + unit_test_setup_teardown(connect_shows_presence_updates, init_prof_test, close_prof_test), - unit_test_setup_teardown(sends_rooms_iq, + + unit_test_setup_teardown(ping_multiple, init_prof_test, close_prof_test), - unit_test_setup_teardown(multiple_pings, + unit_test_setup_teardown(ping_responds, init_prof_test, close_prof_test), - unit_test_setup_teardown(responds_to_ping, + + unit_test_setup_teardown(rooms_query, init_prof_test, close_prof_test), }; diff --git a/functionaltests/proftest.c b/functionaltests/proftest.c index 55892b30..a5510d68 100644 --- a/functionaltests/proftest.c +++ b/functionaltests/proftest.c @@ -182,3 +182,15 @@ prof_output(char *text) { return (1 == exp_expectl(fd, exp_exact, text, 1, exp_end)); } + +void +prof_connect(char *jid, char *password) +{ + GString *connect_cmd = g_string_new("/connect "); + g_string_append(connect_cmd, jid); + g_string_append(connect_cmd, " port 5230"); + prof_input(connect_cmd->str); + g_string_free(connect_cmd, TRUE); + + prof_input(password); +} diff --git a/functionaltests/proftest.h b/functionaltests/proftest.h index 22a7745f..68574af6 100644 --- a/functionaltests/proftest.h +++ b/functionaltests/proftest.h @@ -7,7 +7,9 @@ void init_prof_test(void **state); void close_prof_test(void **state); + void prof_start(void); +void prof_connect(char *jid, char *password); void prof_input(char *input); int prof_output(char *text); diff --git a/functionaltests/test_connect.c b/functionaltests/test_connect.c index 6f145dd5..fc2d0f94 100644 --- a/functionaltests/test_connect.c +++ b/functionaltests/test_connect.c @@ -14,8 +14,7 @@ void connect_jid(void **state) { - prof_input("/connect stabber@localhost port 5230"); - prof_input("password"); + prof_connect("stabber@localhost", "password"); assert_true(prof_output("Connecting as stabber@localhost")); assert_true(prof_output("stabber@localhost logged in successfully")); @@ -24,8 +23,7 @@ connect_jid(void **state) void connect_jid_requests_roster(void **state) { - prof_input("/connect stabber@localhost port 5230"); - prof_input("password"); + prof_connect("stabber@localhost", "password"); assert_true(stbbr_received( "" @@ -44,8 +42,7 @@ connect_jid_sends_presence_after_receiving_roster(void **state) "" ); - prof_input("/connect stabber@localhost port 5230"); - prof_input("password"); + prof_connect("stabber@localhost", "password"); assert_true(stbbr_received( "" @@ -57,8 +54,7 @@ connect_jid_sends_presence_after_receiving_roster(void **state) void connect_jid_requests_bookmarks(void **state) { - prof_input("/connect stabber@localhost port 5230"); - prof_input("password"); + prof_connect("stabber@localhost", "password"); assert_true(stbbr_received( "" @@ -72,14 +68,13 @@ connect_jid_requests_bookmarks(void **state) void connect_bad_password(void **state) { - prof_input("/connect stabber@localhost port 5230"); - prof_input("badpassword"); + prof_connect("stabber@localhost", "badpassword"); assert_true(prof_output("Login failed.")); } void -show_presence_updates(void **state) +connect_shows_presence_updates(void **state) { stbbr_for("roster", "" @@ -105,12 +100,11 @@ show_presence_updates(void **state) "" ); - prof_input("/connect stabber@localhost port 5230"); - prof_input("password"); + prof_connect("stabber@localhost", "password"); - assert_true(prof_output("Buddy1 (mobile) is dnd")); - assert_true(prof_output("Buddy1 (laptop) is chat")); - assert_true(prof_output("Buddy2 (work) is away")); + assert_true(prof_output("Buddy1 (mobile) is dnd, \"busy!\"")); + assert_true(prof_output("Buddy1 (laptop) is chat, \"Talk to me!\"")); + assert_true(prof_output("Buddy2 (work) is away, \"Out of office\"")); stbbr_send( "" @@ -119,77 +113,5 @@ show_presence_updates(void **state) "" ); - assert_true(prof_output("Buddy1 (mobile) is xa")); -} - -void -sends_rooms_iq(void **state) -{ - stbbr_for("confreq", - "" - "" - "" - "" - "" - "" - ); - - prof_input("/connect stabber@localhost port 5230"); - prof_input("password"); - prof_input("/rooms"); - - assert_true(stbbr_last_received( - "" - "" - "" - )); -} - -void -multiple_pings(void **state) -{ - stbbr_for("prof_ping_1", - "" - ); - stbbr_for("prof_ping_2", - "" - ); - - prof_input("/connect stabber@localhost port 5230"); - prof_input("password"); - - prof_input("/ping"); - assert_true(stbbr_received( - "" - "" - "" - )); - assert_true(prof_output("Ping response from server")); - - prof_input("/ping"); - assert_true(stbbr_received( - "" - "" - "" - )); - assert_true(prof_output("Ping response from server")); -} - -void -responds_to_ping(void **state) -{ - prof_input("/connect stabber@localhost port 5230"); - prof_input("password"); - - assert_true(prof_output("stabber@localhost logged in successfully")); - - stbbr_send( - "" - "" - "" - ); - - assert_true(stbbr_received( - "" - )); + assert_true(prof_output("Buddy1 (mobile) is xa, \"Gone :(\"")); } diff --git a/functionaltests/test_connect.h b/functionaltests/test_connect.h index 971652b0..c6ceb404 100644 --- a/functionaltests/test_connect.h +++ b/functionaltests/test_connect.h @@ -3,7 +3,5 @@ void connect_jid_requests_roster(void **state); void connect_jid_sends_presence_after_receiving_roster(void **state); void connect_jid_requests_bookmarks(void **state); void connect_bad_password(void **state); -void show_presence_updates(void **state); -void sends_rooms_iq(void **state); -void multiple_pings(void **state); -void responds_to_ping(void **state); +void connect_shows_presence_updates(void **state); + diff --git a/functionaltests/test_ping.c b/functionaltests/test_ping.c new file mode 100644 index 00000000..19a1e413 --- /dev/null +++ b/functionaltests/test_ping.c @@ -0,0 +1,59 @@ +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "proftest.h" + +void +ping_multiple(void **state) +{ + stbbr_for("prof_ping_1", + "" + ); + stbbr_for("prof_ping_2", + "" + ); + + prof_connect("stabber@localhost", "password"); + + prof_input("/ping"); + assert_true(stbbr_received( + "" + "" + "" + )); + assert_true(prof_output("Ping response from server")); + + prof_input("/ping"); + assert_true(stbbr_received( + "" + "" + "" + )); + assert_true(prof_output("Ping response from server")); +} + +void +ping_responds(void **state) +{ + prof_connect("stabber@localhost", "password"); + + assert_true(prof_output("stabber@localhost logged in successfully")); + + stbbr_send( + "" + "" + "" + ); + + assert_true(stbbr_received( + "" + )); +} diff --git a/functionaltests/test_ping.h b/functionaltests/test_ping.h new file mode 100644 index 00000000..a222a486 --- /dev/null +++ b/functionaltests/test_ping.h @@ -0,0 +1,2 @@ +void ping_multiple(void **state); +void ping_responds(void **state); diff --git a/functionaltests/test_rooms.c b/functionaltests/test_rooms.c new file mode 100644 index 00000000..c6097a54 --- /dev/null +++ b/functionaltests/test_rooms.c @@ -0,0 +1,38 @@ +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "proftest.h" + +void +rooms_query(void **state) +{ + stbbr_for("confreq", + "" + "" + "" + "" + "" + "" + ); + + prof_connect("stabber@localhost", "password"); + + prof_input("/rooms"); + + assert_true(stbbr_last_received( + "" + "" + "" + )); + + assert_true(prof_output("chatroom@conference.localhost, (A chat room)")); + assert_true(prof_output("hangout@conference.localhost, (Another chat room)")); +} diff --git a/functionaltests/test_rooms.h b/functionaltests/test_rooms.h new file mode 100644 index 00000000..a0cf5db8 --- /dev/null +++ b/functionaltests/test_rooms.h @@ -0,0 +1,2 @@ +void rooms_query(void **state); + From a522d0225d7de9124ebbd18188ef9758c60cc8f5 Mon Sep 17 00:00:00 2001 From: James Booth Date: Fri, 29 May 2015 01:01:34 +0100 Subject: [PATCH 33/44] Added regex output matcher, presence test --- Makefile.am | 1 + functionaltests/functionaltests.c | 8 ++++++ functionaltests/proftest.c | 8 +++++- functionaltests/proftest.h | 5 ++-- functionaltests/test_connect.c | 14 ++++----- functionaltests/test_ping.c | 6 ++-- functionaltests/test_presence.c | 47 +++++++++++++++++++++++++++++++ functionaltests/test_presence.h | 2 ++ functionaltests/test_rooms.c | 4 +-- 9 files changed, 80 insertions(+), 15 deletions(-) create mode 100644 functionaltests/test_presence.c create mode 100644 functionaltests/test_presence.h diff --git a/Makefile.am b/Makefile.am index 93d2fec0..a2b46a9c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -99,6 +99,7 @@ functionaltest_sources = \ functionaltests/test_connect.c functionaltests/test_connect.h \ functionaltests/test_ping.c functionaltests/test_ping.h \ functionaltests/test_rooms.c functionaltests/test_rooms.h \ + functionaltests/test_presence.c functionaltests/test_presence.h \ functionaltests/functionaltests.c main_source = src/main.c diff --git a/functionaltests/functionaltests.c b/functionaltests/functionaltests.c index 6c627d38..668445cd 100644 --- a/functionaltests/functionaltests.c +++ b/functionaltests/functionaltests.c @@ -13,6 +13,7 @@ #include "test_connect.h" #include "test_ping.h" #include "test_rooms.h" +#include "test_presence.h" int main(int argc, char* argv[]) { @@ -47,6 +48,13 @@ int main(int argc, char* argv[]) { unit_test_setup_teardown(rooms_query, init_prof_test, close_prof_test), + + unit_test_setup_teardown(presence_away, + init_prof_test, + close_prof_test), + unit_test_setup_teardown(presence_away_with_message, + init_prof_test, + close_prof_test), }; return run_tests(all_tests); diff --git a/functionaltests/proftest.c b/functionaltests/proftest.c index a5510d68..94b0c2b3 100644 --- a/functionaltests/proftest.c +++ b/functionaltests/proftest.c @@ -178,11 +178,17 @@ prof_input(char *input) } int -prof_output(char *text) +prof_output_exact(char *text) { return (1 == exp_expectl(fd, exp_exact, text, 1, exp_end)); } +int +prof_output_regex(char *text) +{ + return (1 == exp_expectl(fd, exp_regexp, text, 1, exp_end)); +} + void prof_connect(char *jid, char *password) { diff --git a/functionaltests/proftest.h b/functionaltests/proftest.h index 68574af6..f57f6c35 100644 --- a/functionaltests/proftest.h +++ b/functionaltests/proftest.h @@ -7,10 +7,11 @@ void init_prof_test(void **state); void close_prof_test(void **state); - void prof_start(void); void prof_connect(char *jid, char *password); void prof_input(char *input); -int prof_output(char *text); + +int prof_output_exact(char *text); +int prof_output_regex(char *text); #endif diff --git a/functionaltests/test_connect.c b/functionaltests/test_connect.c index fc2d0f94..957d2798 100644 --- a/functionaltests/test_connect.c +++ b/functionaltests/test_connect.c @@ -16,8 +16,8 @@ connect_jid(void **state) { prof_connect("stabber@localhost", "password"); - assert_true(prof_output("Connecting as stabber@localhost")); - assert_true(prof_output("stabber@localhost logged in successfully")); + assert_true(prof_output_exact("Connecting as stabber@localhost")); + assert_true(prof_output_regex("stabber@localhost logged in successfully, .+online.+ \\(priority 0\\)\\.")); } void @@ -70,7 +70,7 @@ connect_bad_password(void **state) { prof_connect("stabber@localhost", "badpassword"); - assert_true(prof_output("Login failed.")); + assert_true(prof_output_exact("Login failed.")); } void @@ -102,9 +102,9 @@ connect_shows_presence_updates(void **state) prof_connect("stabber@localhost", "password"); - assert_true(prof_output("Buddy1 (mobile) is dnd, \"busy!\"")); - assert_true(prof_output("Buddy1 (laptop) is chat, \"Talk to me!\"")); - assert_true(prof_output("Buddy2 (work) is away, \"Out of office\"")); + assert_true(prof_output_exact("Buddy1 (mobile) is dnd, \"busy!\"")); + assert_true(prof_output_exact("Buddy1 (laptop) is chat, \"Talk to me!\"")); + assert_true(prof_output_exact("Buddy2 (work) is away, \"Out of office\"")); stbbr_send( "" @@ -113,5 +113,5 @@ connect_shows_presence_updates(void **state) "" ); - assert_true(prof_output("Buddy1 (mobile) is xa, \"Gone :(\"")); + assert_true(prof_output_exact("Buddy1 (mobile) is xa, \"Gone :(\"")); } diff --git a/functionaltests/test_ping.c b/functionaltests/test_ping.c index 19a1e413..c1b398d8 100644 --- a/functionaltests/test_ping.c +++ b/functionaltests/test_ping.c @@ -29,7 +29,7 @@ ping_multiple(void **state) "" "" )); - assert_true(prof_output("Ping response from server")); + assert_true(prof_output_exact("Ping response from server")); prof_input("/ping"); assert_true(stbbr_received( @@ -37,7 +37,7 @@ ping_multiple(void **state) "" "" )); - assert_true(prof_output("Ping response from server")); + assert_true(prof_output_exact("Ping response from server")); } void @@ -45,7 +45,7 @@ ping_responds(void **state) { prof_connect("stabber@localhost", "password"); - assert_true(prof_output("stabber@localhost logged in successfully")); + assert_true(prof_output_exact("stabber@localhost logged in successfully")); stbbr_send( "" diff --git a/functionaltests/test_presence.c b/functionaltests/test_presence.c new file mode 100644 index 00000000..1334fe91 --- /dev/null +++ b/functionaltests/test_presence.c @@ -0,0 +1,47 @@ +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "proftest.h" + +void +presence_away(void **state) +{ + prof_connect("stabber@localhost", "password"); + + prof_input("/away"); + + assert_true(stbbr_received( + "" + "away" + "" + "" + )); + + assert_true(prof_output_exact("Status set to away (priority 0)")); +} + +void +presence_away_with_message(void **state) +{ + prof_connect("stabber@localhost", "password"); + + prof_input("/away \"I'm not here for a bit\""); + + assert_true(stbbr_received( + "" + "away" + "I'm not here for a bit" + "" + "" + )); + + assert_true(prof_output_exact("Status set to away (priority 0), \"I'm not here for a bit\".")); +} diff --git a/functionaltests/test_presence.h b/functionaltests/test_presence.h new file mode 100644 index 00000000..f199ab41 --- /dev/null +++ b/functionaltests/test_presence.h @@ -0,0 +1,2 @@ +void presence_away(void **state); +void presence_away_with_message(void **state); diff --git a/functionaltests/test_rooms.c b/functionaltests/test_rooms.c index c6097a54..313d7a72 100644 --- a/functionaltests/test_rooms.c +++ b/functionaltests/test_rooms.c @@ -33,6 +33,6 @@ rooms_query(void **state) "" )); - assert_true(prof_output("chatroom@conference.localhost, (A chat room)")); - assert_true(prof_output("hangout@conference.localhost, (Another chat room)")); + assert_true(prof_output_exact("chatroom@conference.localhost, (A chat room)")); + assert_true(prof_output_exact("hangout@conference.localhost, (Another chat room)")); } From 4ec78920919398bd2964c2eae680e1374714f419 Mon Sep 17 00:00:00 2001 From: James Booth Date: Fri, 29 May 2015 01:10:45 +0100 Subject: [PATCH 34/44] Added remaining presence tests --- functionaltests/functionaltests.c | 24 ++++++ functionaltests/test_presence.c | 138 ++++++++++++++++++++++++++++++ functionaltests/test_presence.h | 8 ++ 3 files changed, 170 insertions(+) diff --git a/functionaltests/functionaltests.c b/functionaltests/functionaltests.c index 668445cd..1b84a73f 100644 --- a/functionaltests/functionaltests.c +++ b/functionaltests/functionaltests.c @@ -55,6 +55,30 @@ int main(int argc, char* argv[]) { unit_test_setup_teardown(presence_away_with_message, init_prof_test, close_prof_test), + unit_test_setup_teardown(presence_online, + init_prof_test, + close_prof_test), + unit_test_setup_teardown(presence_online_with_message, + init_prof_test, + close_prof_test), + unit_test_setup_teardown(presence_xa, + init_prof_test, + close_prof_test), + unit_test_setup_teardown(presence_xa_with_message, + init_prof_test, + close_prof_test), + unit_test_setup_teardown(presence_dnd, + init_prof_test, + close_prof_test), + unit_test_setup_teardown(presence_dnd_with_message, + init_prof_test, + close_prof_test), + unit_test_setup_teardown(presence_chat, + init_prof_test, + close_prof_test), + unit_test_setup_teardown(presence_chat_with_message, + init_prof_test, + close_prof_test), }; return run_tests(all_tests); diff --git a/functionaltests/test_presence.c b/functionaltests/test_presence.c index 1334fe91..90ebff2b 100644 --- a/functionaltests/test_presence.c +++ b/functionaltests/test_presence.c @@ -11,6 +11,39 @@ #include "proftest.h" +void +presence_online(void **state) +{ + prof_connect("stabber@localhost", "password"); + + prof_input("/online"); + + assert_true(stbbr_received( + "" + "" + "" + )); + + assert_true(prof_output_exact("Status set to online (priority 0)")); +} + +void +presence_online_with_message(void **state) +{ + prof_connect("stabber@localhost", "password"); + + prof_input("/online \"Hi there\""); + + assert_true(stbbr_received( + "" + "Hi there" + "" + "" + )); + + assert_true(prof_output_exact("Status set to online (priority 0), \"Hi there\".")); +} + void presence_away(void **state) { @@ -45,3 +78,108 @@ presence_away_with_message(void **state) assert_true(prof_output_exact("Status set to away (priority 0), \"I'm not here for a bit\".")); } + +void +presence_xa(void **state) +{ + prof_connect("stabber@localhost", "password"); + + prof_input("/xa"); + + assert_true(stbbr_received( + "" + "xa" + "" + "" + )); + + assert_true(prof_output_exact("Status set to xa (priority 0)")); +} + +void +presence_xa_with_message(void **state) +{ + prof_connect("stabber@localhost", "password"); + + prof_input("/xa \"Gone to the shops\""); + + assert_true(stbbr_received( + "" + "xa" + "Gone to the shops" + "" + "" + )); + + assert_true(prof_output_exact("Status set to xa (priority 0), \"Gone to the shops\".")); +} + +void +presence_dnd(void **state) +{ + prof_connect("stabber@localhost", "password"); + + prof_input("/dnd"); + + assert_true(stbbr_received( + "" + "dnd" + "" + "" + )); + + assert_true(prof_output_exact("Status set to dnd (priority 0)")); +} + +void +presence_dnd_with_message(void **state) +{ + prof_connect("stabber@localhost", "password"); + + prof_input("/dnd \"Working\""); + + assert_true(stbbr_received( + "" + "dnd" + "Working" + "" + "" + )); + + assert_true(prof_output_exact("Status set to dnd (priority 0), \"Working\".")); +} + +void +presence_chat(void **state) +{ + prof_connect("stabber@localhost", "password"); + + prof_input("/chat"); + + assert_true(stbbr_received( + "" + "chat" + "" + "" + )); + + assert_true(prof_output_exact("Status set to chat (priority 0)")); +} + +void +presence_chat_with_message(void **state) +{ + prof_connect("stabber@localhost", "password"); + + prof_input("/chat \"Free to talk\""); + + assert_true(stbbr_received( + "" + "chat" + "Free to talk" + "" + "" + )); + + assert_true(prof_output_exact("Status set to chat (priority 0), \"Free to talk\".")); +} diff --git a/functionaltests/test_presence.h b/functionaltests/test_presence.h index f199ab41..2e57c107 100644 --- a/functionaltests/test_presence.h +++ b/functionaltests/test_presence.h @@ -1,2 +1,10 @@ void presence_away(void **state); void presence_away_with_message(void **state); +void presence_online(void **state); +void presence_online_with_message(void **state); +void presence_xa(void **state); +void presence_xa_with_message(void **state); +void presence_dnd(void **state); +void presence_dnd_with_message(void **state); +void presence_chat(void **state); +void presence_chat_with_message(void **state); From 272e9f83fc97141a19af5db447481f37e587cfb3 Mon Sep 17 00:00:00 2001 From: James Booth Date: Fri, 29 May 2015 01:22:24 +0100 Subject: [PATCH 35/44] Added priority tests --- functionaltests/functionaltests.c | 6 ++ functionaltests/test_presence.c | 129 ++++++++++++++++++++---------- functionaltests/test_presence.h | 2 + 3 files changed, 94 insertions(+), 43 deletions(-) diff --git a/functionaltests/functionaltests.c b/functionaltests/functionaltests.c index 1b84a73f..e0a4415a 100644 --- a/functionaltests/functionaltests.c +++ b/functionaltests/functionaltests.c @@ -79,6 +79,12 @@ int main(int argc, char* argv[]) { unit_test_setup_teardown(presence_chat_with_message, init_prof_test, close_prof_test), + unit_test_setup_teardown(presence_set_priority, + init_prof_test, + close_prof_test), + unit_test_setup_teardown(presence_includes_priority, + init_prof_test, + close_prof_test), }; return run_tests(all_tests); diff --git a/functionaltests/test_presence.c b/functionaltests/test_presence.c index 90ebff2b..210cdaaf 100644 --- a/functionaltests/test_presence.c +++ b/functionaltests/test_presence.c @@ -19,9 +19,9 @@ presence_online(void **state) prof_input("/online"); assert_true(stbbr_received( - "" - "" - "" + "" + "" + "" )); assert_true(prof_output_exact("Status set to online (priority 0)")); @@ -35,10 +35,10 @@ presence_online_with_message(void **state) prof_input("/online \"Hi there\""); assert_true(stbbr_received( - "" - "Hi there" - "" - "" + "" + "Hi there" + "" + "" )); assert_true(prof_output_exact("Status set to online (priority 0), \"Hi there\".")); @@ -52,10 +52,10 @@ presence_away(void **state) prof_input("/away"); assert_true(stbbr_received( - "" - "away" - "" - "" + "" + "away" + "" + "" )); assert_true(prof_output_exact("Status set to away (priority 0)")); @@ -69,11 +69,11 @@ presence_away_with_message(void **state) prof_input("/away \"I'm not here for a bit\""); assert_true(stbbr_received( - "" - "away" - "I'm not here for a bit" - "" - "" + "" + "away" + "I'm not here for a bit" + "" + "" )); assert_true(prof_output_exact("Status set to away (priority 0), \"I'm not here for a bit\".")); @@ -87,10 +87,10 @@ presence_xa(void **state) prof_input("/xa"); assert_true(stbbr_received( - "" - "xa" - "" - "" + "" + "xa" + "" + "" )); assert_true(prof_output_exact("Status set to xa (priority 0)")); @@ -104,11 +104,11 @@ presence_xa_with_message(void **state) prof_input("/xa \"Gone to the shops\""); assert_true(stbbr_received( - "" - "xa" - "Gone to the shops" - "" - "" + "" + "xa" + "Gone to the shops" + "" + "" )); assert_true(prof_output_exact("Status set to xa (priority 0), \"Gone to the shops\".")); @@ -122,10 +122,10 @@ presence_dnd(void **state) prof_input("/dnd"); assert_true(stbbr_received( - "" - "dnd" - "" - "" + "" + "dnd" + "" + "" )); assert_true(prof_output_exact("Status set to dnd (priority 0)")); @@ -139,11 +139,11 @@ presence_dnd_with_message(void **state) prof_input("/dnd \"Working\""); assert_true(stbbr_received( - "" - "dnd" - "Working" - "" - "" + "" + "dnd" + "Working" + "" + "" )); assert_true(prof_output_exact("Status set to dnd (priority 0), \"Working\".")); @@ -157,10 +157,10 @@ presence_chat(void **state) prof_input("/chat"); assert_true(stbbr_received( - "" - "chat" - "" - "" + "" + "chat" + "" + "" )); assert_true(prof_output_exact("Status set to chat (priority 0)")); @@ -174,12 +174,55 @@ presence_chat_with_message(void **state) prof_input("/chat \"Free to talk\""); assert_true(stbbr_received( - "" - "chat" - "Free to talk" - "" - "" + "" + "chat" + "Free to talk" + "" + "" )); assert_true(prof_output_exact("Status set to chat (priority 0), \"Free to talk\".")); } + +void +presence_set_priority(void **state) +{ + prof_connect("stabber@localhost", "password"); + + prof_input("/priority 25"); + + assert_true(stbbr_received( + "" + "25" + "" + "" + )); + + assert_true(prof_output_exact("Priority set to 25.")); +} + +void +presence_includes_priority(void **state) +{ + prof_connect("stabber@localhost", "password"); + + prof_input("/priority 25"); + assert_true(stbbr_received( + "" + "25" + "" + "" + )); + assert_true(prof_output_exact("Priority set to 25.")); + + prof_input("/chat \"Free to talk\""); + assert_true(stbbr_received( + "" + "25" + "chat" + "Free to talk" + "" + "" + )); + assert_true(prof_output_exact("Status set to chat (priority 25), \"Free to talk\".")); +} diff --git a/functionaltests/test_presence.h b/functionaltests/test_presence.h index 2e57c107..23fd5d98 100644 --- a/functionaltests/test_presence.h +++ b/functionaltests/test_presence.h @@ -8,3 +8,5 @@ void presence_dnd(void **state); void presence_dnd_with_message(void **state); void presence_chat(void **state); void presence_chat_with_message(void **state); +void presence_set_priority(void **state); +void presence_includes_priority(void **state); From a5cf83d2595c41fda72f67284b101f509524e659 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sat, 30 May 2015 22:44:41 +0100 Subject: [PATCH 36/44] Added presence received test --- functionaltests/functionaltests.c | 3 +++ functionaltests/test_presence.c | 25 +++++++++++++++++++++++++ functionaltests/test_presence.h | 1 + 3 files changed, 29 insertions(+) diff --git a/functionaltests/functionaltests.c b/functionaltests/functionaltests.c index e0a4415a..27fa91c9 100644 --- a/functionaltests/functionaltests.c +++ b/functionaltests/functionaltests.c @@ -85,6 +85,9 @@ int main(int argc, char* argv[]) { unit_test_setup_teardown(presence_includes_priority, init_prof_test, close_prof_test), + unit_test_setup_teardown(presence_received, + init_prof_test, + close_prof_test), }; return run_tests(all_tests); diff --git a/functionaltests/test_presence.c b/functionaltests/test_presence.c index 210cdaaf..6129339d 100644 --- a/functionaltests/test_presence.c +++ b/functionaltests/test_presence.c @@ -226,3 +226,28 @@ presence_includes_priority(void **state) )); assert_true(prof_output_exact("Status set to chat (priority 25), \"Free to talk\".")); } + +void +presence_received(void **state) +{ + stbbr_for("roster", + "" + "" + "" + "" + "" + "" + ); + + prof_connect("stabber@localhost", "password"); + stbbr_wait_for("prof_presence_1"); + + stbbr_send( + "" + "10" + "I'm here" + "" + ); + + assert_true(prof_output_exact("Buddy1 (mobile) is online, \"I'm here\"")); +} diff --git a/functionaltests/test_presence.h b/functionaltests/test_presence.h index 23fd5d98..0603732a 100644 --- a/functionaltests/test_presence.h +++ b/functionaltests/test_presence.h @@ -10,3 +10,4 @@ void presence_chat(void **state); void presence_chat_with_message(void **state); void presence_set_priority(void **state); void presence_includes_priority(void **state); +void presence_received(void **state); From 373f47c711bafa4c1a08690f668b4953a914ee38 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 31 May 2015 00:12:13 +0100 Subject: [PATCH 37/44] Added simple message tests --- Makefile.am | 1 + functionaltests/functionaltests.c | 8 +++++ functionaltests/test_message.c | 52 +++++++++++++++++++++++++++++++ functionaltests/test_message.h | 2 ++ 4 files changed, 63 insertions(+) create mode 100644 functionaltests/test_message.c create mode 100644 functionaltests/test_message.h diff --git a/Makefile.am b/Makefile.am index a2b46a9c..5656ce24 100644 --- a/Makefile.am +++ b/Makefile.am @@ -100,6 +100,7 @@ functionaltest_sources = \ functionaltests/test_ping.c functionaltests/test_ping.h \ functionaltests/test_rooms.c functionaltests/test_rooms.h \ functionaltests/test_presence.c functionaltests/test_presence.h \ + functionaltests/test_message.c functionaltests/test_message.h \ functionaltests/functionaltests.c main_source = src/main.c diff --git a/functionaltests/functionaltests.c b/functionaltests/functionaltests.c index 27fa91c9..fa162a26 100644 --- a/functionaltests/functionaltests.c +++ b/functionaltests/functionaltests.c @@ -14,6 +14,7 @@ #include "test_ping.h" #include "test_rooms.h" #include "test_presence.h" +#include "test_message.h" int main(int argc, char* argv[]) { @@ -88,6 +89,13 @@ int main(int argc, char* argv[]) { unit_test_setup_teardown(presence_received, init_prof_test, close_prof_test), + + unit_test_setup_teardown(message_send, + init_prof_test, + close_prof_test), + unit_test_setup_teardown(message_receive, + init_prof_test, + close_prof_test), }; return run_tests(all_tests); diff --git a/functionaltests/test_message.c b/functionaltests/test_message.c new file mode 100644 index 00000000..98864233 --- /dev/null +++ b/functionaltests/test_message.c @@ -0,0 +1,52 @@ +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "proftest.h" + +void +message_send(void **state) +{ + prof_connect("stabber@localhost", "password"); + + prof_input("/msg somejid@someserver.com Hi there"); + + assert_true(stbbr_received( + "" + "Hi there" + "" + )); + + assert_true(prof_output_regex("me: .+Hi there")); +} + +void +message_receive(void **state) +{ + stbbr_for("roster", + "" + "" + "" + "" + "" + "" + ); + + prof_connect("stabber@localhost", "password"); + stbbr_wait_for("prof_presence_1"); + + stbbr_send( + "" + "How are you?" + "" + ); + + assert_true(prof_output_exact("<< incoming from someuser@chatserv.org/laptop (2)")); +} diff --git a/functionaltests/test_message.h b/functionaltests/test_message.h new file mode 100644 index 00000000..b8f03a7e --- /dev/null +++ b/functionaltests/test_message.h @@ -0,0 +1,2 @@ +void message_send(void **state); +void message_receive(void **state); From be1f959b02e2b0f32274a1bff9bcbce07186728f Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 31 May 2015 00:13:36 +0100 Subject: [PATCH 38/44] Fixed message test id --- functionaltests/test_message.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/functionaltests/test_message.c b/functionaltests/test_message.c index 98864233..c09e75fd 100644 --- a/functionaltests/test_message.c +++ b/functionaltests/test_message.c @@ -43,7 +43,7 @@ message_receive(void **state) stbbr_wait_for("prof_presence_1"); stbbr_send( - "" + "" "How are you?" "" ); From b1481affa943a34655c5f23d379778801c41ce26 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 31 May 2015 23:26:29 +0100 Subject: [PATCH 39/44] Fixed for new stabber start function --- functionaltests/proftest.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/functionaltests/proftest.c b/functionaltests/proftest.c index 94b0c2b3..dda1cd90 100644 --- a/functionaltests/proftest.c +++ b/functionaltests/proftest.c @@ -136,7 +136,7 @@ prof_start(void) void init_prof_test(void **state) { - if (stbbr_start(5230) != 0) { + if (stbbr_start(5230, 0) != 0) { assert_true(FALSE); return; } From e372ff9c87abf57249934159c560757a376bfae6 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 31 May 2015 23:35:52 +0100 Subject: [PATCH 40/44] Added microhttpd dependency for stabber --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 4c96ccfa..417fbce6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,6 +23,7 @@ install: - sudo make install - cd ../.. - rm -rf cmocka-1.0.0 + - sudo apt-get install libmicrohttpd-dev - git clone git://github.com/boothj5/stabber.git - cd stabber - ./bootstrap.sh From 73188881a451649bdf4340ee889ec8d24e0eeeae Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 31 May 2015 23:44:19 +0100 Subject: [PATCH 41/44] Test commit --- functionaltests/functionaltests.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/functionaltests/functionaltests.c b/functionaltests/functionaltests.c index fa162a26..cb110469 100644 --- a/functionaltests/functionaltests.c +++ b/functionaltests/functionaltests.c @@ -95,7 +95,7 @@ int main(int argc, char* argv[]) { close_prof_test), unit_test_setup_teardown(message_receive, init_prof_test, - close_prof_test), + close_prof_test) }; return run_tests(all_tests); From 07c9d2ddab3f38d646364fb0c4586adba986a9f9 Mon Sep 17 00:00:00 2001 From: James Booth Date: Mon, 1 Jun 2015 22:02:45 +0100 Subject: [PATCH 42/44] Updated for renamed stbbr function --- functionaltests/test_connect.c | 6 +++--- functionaltests/test_message.c | 2 +- functionaltests/test_ping.c | 4 ++-- functionaltests/test_presence.c | 2 +- functionaltests/test_rooms.c | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/functionaltests/test_connect.c b/functionaltests/test_connect.c index 957d2798..8e0cabde 100644 --- a/functionaltests/test_connect.c +++ b/functionaltests/test_connect.c @@ -33,7 +33,7 @@ connect_jid_requests_roster(void **state) void connect_jid_sends_presence_after_receiving_roster(void **state) { - stbbr_for("roster", + stbbr_for_id("roster", "" "" "" @@ -76,7 +76,7 @@ connect_bad_password(void **state) void connect_shows_presence_updates(void **state) { - stbbr_for("roster", + stbbr_for_id("roster", "" "" "" @@ -85,7 +85,7 @@ connect_shows_presence_updates(void **state) "" ); - stbbr_for("prof_presence_1", + stbbr_for_id("prof_presence_1", "" "dnd" "busy!" diff --git a/functionaltests/test_message.c b/functionaltests/test_message.c index c09e75fd..5cdad520 100644 --- a/functionaltests/test_message.c +++ b/functionaltests/test_message.c @@ -30,7 +30,7 @@ message_send(void **state) void message_receive(void **state) { - stbbr_for("roster", + stbbr_for_id("roster", "" "" "" diff --git a/functionaltests/test_ping.c b/functionaltests/test_ping.c index c1b398d8..e2ca79ca 100644 --- a/functionaltests/test_ping.c +++ b/functionaltests/test_ping.c @@ -14,10 +14,10 @@ void ping_multiple(void **state) { - stbbr_for("prof_ping_1", + stbbr_for_id("prof_ping_1", "" ); - stbbr_for("prof_ping_2", + stbbr_for_id("prof_ping_2", "" ); diff --git a/functionaltests/test_presence.c b/functionaltests/test_presence.c index 6129339d..b26bdccb 100644 --- a/functionaltests/test_presence.c +++ b/functionaltests/test_presence.c @@ -230,7 +230,7 @@ presence_includes_priority(void **state) void presence_received(void **state) { - stbbr_for("roster", + stbbr_for_id("roster", "" "" "" diff --git a/functionaltests/test_rooms.c b/functionaltests/test_rooms.c index 313d7a72..20ed7342 100644 --- a/functionaltests/test_rooms.c +++ b/functionaltests/test_rooms.c @@ -14,7 +14,7 @@ void rooms_query(void **state) { - stbbr_for("confreq", + stbbr_for_id("confreq", "" "" "" From f278e0a466c3b7815f0575d37057397666218b28 Mon Sep 17 00:00:00 2001 From: James Booth Date: Tue, 2 Jun 2015 00:41:50 +0100 Subject: [PATCH 43/44] Use stbbr_for_query for roster --- functionaltests/test_connect.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/functionaltests/test_connect.c b/functionaltests/test_connect.c index 8e0cabde..7a42397f 100644 --- a/functionaltests/test_connect.c +++ b/functionaltests/test_connect.c @@ -33,8 +33,8 @@ connect_jid_requests_roster(void **state) void connect_jid_sends_presence_after_receiving_roster(void **state) { - stbbr_for_id("roster", - "" + stbbr_for_query("jabber:iq:roster", + "" "" "" "" @@ -76,8 +76,8 @@ connect_bad_password(void **state) void connect_shows_presence_updates(void **state) { - stbbr_for_id("roster", - "" + stbbr_for_query("jabber:iq:roster", + "" "" "" "" From ae4e07ad87968072893b58c2ee778b52fc3059da Mon Sep 17 00:00:00 2001 From: James Booth Date: Fri, 5 Jun 2015 22:53:57 +0100 Subject: [PATCH 44/44] Show notice message only when stabber not found --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index e4558c02..f7402cd2 100644 --- a/configure.ac +++ b/configure.ac @@ -236,7 +236,7 @@ PKG_CHECK_MODULES([cmocka], [cmocka], [], [AC_MSG_NOTICE([cmocka is not found, will not be able to run tests])]) AC_CHECK_LIB([stabber], [stbbr_start], [], - [AC_MSG_ERROR([stabber not found, will not be able to run tests])]) + [AC_MSG_NOTICE([stabber not found, will not be able to run functional tests])]) ### Check for ncursesw/ncurses.h first, Arch linux uses ncurses.h for ncursesw AC_CHECK_HEADERS([ncursesw/ncurses.h], [], [])