diff --git a/src/command/commands.c b/src/command/commands.c index 910c57d5..c48dc1a1 100644 --- a/src/command/commands.c +++ b/src/command/commands.c @@ -78,6 +78,7 @@ cmd_connect(gchar **args, struct cmd_help_t help) } cons_show("Connecting with account %s as %s", account->name, jid); conn_status = jabber_connect_with_account(account); + accounts_free_account(account); } else { char *passwd = ui_ask_password(); jid = strdup(lower); @@ -92,7 +93,6 @@ cmd_connect(gchar **args, struct cmd_help_t help) log_debug("Connection attempt for %s failed", jid); } - accounts_free_account(account); free(jid); result = TRUE; diff --git a/tests/config/mock_accounts.c b/tests/config/mock_accounts.c index e2732acb..960cf211 100644 --- a/tests/config/mock_accounts.c +++ b/tests/config/mock_accounts.c @@ -54,7 +54,10 @@ ProfAccount* accounts_get_account(const char * const name) return (ProfAccount *)mock(); } -void accounts_free_account(ProfAccount *account) {} +void accounts_free_account(ProfAccount *account) +{ + check_expected(account); +} gboolean accounts_enable(const char * const name) { diff --git a/tests/test_cmd_connect.c b/tests/test_cmd_connect.c index 54852803..3625a521 100644 --- a/tests/test_cmd_connect.c +++ b/tests/test_cmd_connect.c @@ -166,6 +166,8 @@ void cmd_connect_asks_password_when_not_in_account(void **state) expect_any(jabber_connect_with_account, account); will_return(jabber_connect_with_account, JABBER_CONNECTING); + expect_any(accounts_free_account, account); + gboolean result = cmd_connect(args, *help); assert_true(result); @@ -193,6 +195,8 @@ void cmd_connect_shows_message_when_connecting_with_account(void **state) expect_any(jabber_connect_with_account, account); will_return(jabber_connect_with_account, JABBER_CONNECTING); + expect_any(accounts_free_account, account); + gboolean result = cmd_connect(args, *help); assert_true(result); @@ -220,10 +224,38 @@ void cmd_connect_connects_with_account(void **state) expect_memory(jabber_connect_with_account, account, account, sizeof(ProfAccount)); will_return(jabber_connect_with_account, JABBER_CONNECTING); + expect_any(accounts_free_account, account); + + gboolean result = cmd_connect(args, *help); + assert_true(result); + + free(help); + free(account); +} + +void cmd_connect_frees_account_after_connecting(void **state) +{ + CommandHelp *help = malloc(sizeof(CommandHelp)); + gchar *args[] = { "jabber_org", NULL }; + ProfAccount *account = malloc(sizeof(ProfAccount)); + + will_return(jabber_get_connection_status, JABBER_DISCONNECTED); + + expect_any(accounts_get_account, name); + will_return(accounts_get_account, account); + + will_return(accounts_create_full_jid, strdup("user@jabber.org/laptop")); + + expect_any(cons_show, output); + + expect_any(jabber_connect_with_account, account); + will_return(jabber_connect_with_account, JABBER_CONNECTING); + + expect_memory(accounts_free_account, account, account, sizeof(ProfAccount)); + gboolean result = cmd_connect(args, *help); assert_true(result); free(help); free(account); - } diff --git a/tests/test_cmd_connect.h b/tests/test_cmd_connect.h index 967d0652..2ee1a91b 100644 --- a/tests/test_cmd_connect.h +++ b/tests/test_cmd_connect.h @@ -9,3 +9,4 @@ void cmd_connect_lowercases_argument(void **state); void cmd_connect_asks_password_when_not_in_account(void **state); void cmd_connect_shows_message_when_connecting_with_account(void **state); void cmd_connect_connects_with_account(void **state); +void cmd_connect_frees_account_after_connecting(void **state); diff --git a/tests/testsuite.c b/tests/testsuite.c index 060fe8b2..ae4ab61e 100644 --- a/tests/testsuite.c +++ b/tests/testsuite.c @@ -25,6 +25,7 @@ int main(int argc, char* argv[]) { unit_test(cmd_connect_asks_password_when_not_in_account), unit_test(cmd_connect_shows_message_when_connecting_with_account), unit_test(cmd_connect_connects_with_account), + unit_test(cmd_connect_frees_account_after_connecting), unit_test(cmd_rooms_shows_message_when_disconnected), unit_test(cmd_rooms_shows_message_when_disconnecting),