From b4e9905db971b67450bf4da63fd9ccff5de0aa69 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sat, 18 Jan 2014 21:18:25 +0000 Subject: [PATCH] Added cmd_connect tests for argument validation --- src/command/commands.c | 10 +-- tests/test_cmd_connect.c | 148 +++++++++++++++++++++++++++++++++++++++ tests/test_cmd_connect.h | 8 +++ tests/testsuite.c | 8 +++ 4 files changed, 170 insertions(+), 4 deletions(-) diff --git a/src/command/commands.c b/src/command/commands.c index 8a6f6d7b..71ab2ca7 100644 --- a/src/command/commands.c +++ b/src/command/commands.c @@ -91,9 +91,10 @@ cmd_connect(gchar **args, struct cmd_help_t help) altdomain = opt1val; altdomain_set = TRUE; } else if (strcmp(opt1, "port") == 0) { - if (_strtoi(opt1val, &port, 1, 65536) != 0) { + if (_strtoi(opt1val, &port, 1, 65535) != 0) { port = 0; - cons_show("Port must be in the range 1 to 65535."); + cons_show(""); + return TRUE; } else { port_set = TRUE; } @@ -121,9 +122,10 @@ cmd_connect(gchar **args, struct cmd_help_t help) cons_show("Usage: %s", help.usage); return TRUE; } - if (_strtoi(opt2val, &port, 1, 65536) != 0) { + if (_strtoi(opt2val, &port, 1, 65535) != 0) { port = 0; - cons_show("Port must be in the range 1 to 65535."); + cons_show(""); + return TRUE; } else { port_set = TRUE; } diff --git a/tests/test_cmd_connect.c b/tests/test_cmd_connect.c index 325a9062..00619fbf 100644 --- a/tests/test_cmd_connect.c +++ b/tests/test_cmd_connect.c @@ -77,6 +77,154 @@ void cmd_connect_when_no_account(void **state) free(help); } +void cmd_connect_shows_usage_when_no_server_value(void **state) +{ + stub_ui_ask_password(); + mock_cons_show(); + CommandHelp *help = malloc(sizeof(CommandHelp)); + help->usage = "some usage"; + gchar *args[] = { "user@server.org", "server", NULL }; + + mock_connection_status(JABBER_DISCONNECTED); + + expect_cons_show("Usage: some usage"); + expect_cons_show(""); + + gboolean result = cmd_connect(args, *help); + assert_true(result); + + free(help); +} + +void cmd_connect_shows_usage_when_server_no_port_value(void **state) +{ + stub_ui_ask_password(); + mock_cons_show(); + CommandHelp *help = malloc(sizeof(CommandHelp)); + help->usage = "some usage"; + gchar *args[] = { "user@server.org", "server", "aserver", "port", NULL }; + + mock_connection_status(JABBER_DISCONNECTED); + + expect_cons_show("Usage: some usage"); + expect_cons_show(""); + + gboolean result = cmd_connect(args, *help); + assert_true(result); + + free(help); +} + +void cmd_connect_shows_usage_when_no_port_value(void **state) +{ + stub_ui_ask_password(); + mock_cons_show(); + CommandHelp *help = malloc(sizeof(CommandHelp)); + help->usage = "some usage"; + gchar *args[] = { "user@server.org", "port", NULL }; + + mock_connection_status(JABBER_DISCONNECTED); + + expect_cons_show("Usage: some usage"); + expect_cons_show(""); + + gboolean result = cmd_connect(args, *help); + assert_true(result); + + free(help); +} + +void cmd_connect_shows_usage_when_port_no_server_value(void **state) +{ + stub_ui_ask_password(); + mock_cons_show(); + CommandHelp *help = malloc(sizeof(CommandHelp)); + help->usage = "some usage"; + gchar *args[] = { "user@server.org", "port", "5678", "server", NULL }; + + mock_connection_status(JABBER_DISCONNECTED); + + expect_cons_show("Usage: some usage"); + expect_cons_show(""); + + gboolean result = cmd_connect(args, *help); + assert_true(result); + + free(help); +} + +void cmd_connect_shows_message_when_port_0(void **state) +{ + stub_ui_ask_password(); + mock_cons_show(); + CommandHelp *help = malloc(sizeof(CommandHelp)); + gchar *args[] = { "user@server.org", "port", "0", NULL }; + + mock_connection_status(JABBER_DISCONNECTED); + + expect_cons_show("Value 0 out of range. Must be in 1..65535."); + expect_cons_show(""); + + gboolean result = cmd_connect(args, *help); + assert_true(result); + + free(help); +} + +void cmd_connect_shows_message_when_port_minus1(void **state) +{ + stub_ui_ask_password(); + mock_cons_show(); + CommandHelp *help = malloc(sizeof(CommandHelp)); + gchar *args[] = { "user@server.org", "port", "-1", NULL }; + + mock_connection_status(JABBER_DISCONNECTED); + + expect_cons_show("Value -1 out of range. Must be in 1..65535."); + expect_cons_show(""); + + gboolean result = cmd_connect(args, *help); + assert_true(result); + + free(help); +} + +void cmd_connect_shows_message_when_port_65536(void **state) +{ + stub_ui_ask_password(); + mock_cons_show(); + CommandHelp *help = malloc(sizeof(CommandHelp)); + gchar *args[] = { "user@server.org", "port", "65536", NULL }; + + mock_connection_status(JABBER_DISCONNECTED); + + expect_cons_show("Value 65536 out of range. Must be in 1..65535."); + expect_cons_show(""); + + gboolean result = cmd_connect(args, *help); + assert_true(result); + + free(help); +} + +void cmd_connect_shows_message_when_port_contains_chars(void **state) +{ + stub_ui_ask_password(); + mock_cons_show(); + CommandHelp *help = malloc(sizeof(CommandHelp)); + gchar *args[] = { "user@server.org", "port", "52f66", NULL }; + + mock_connection_status(JABBER_DISCONNECTED); + + expect_cons_show("Could not convert \"52f66\" to a number."); + expect_cons_show(""); + + gboolean result = cmd_connect(args, *help); + assert_true(result); + + free(help); +} + void cmd_connect_with_altdomain_when_provided(void **state) { stub_ui_ask_password(); diff --git a/tests/test_cmd_connect.h b/tests/test_cmd_connect.h index 2ee1a91b..7fa190cf 100644 --- a/tests/test_cmd_connect.h +++ b/tests/test_cmd_connect.h @@ -10,3 +10,11 @@ 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); +void cmd_connect_shows_usage_when_no_server_value(void **state); +void cmd_connect_shows_usage_when_server_no_port_value(void **state); +void cmd_connect_shows_usage_when_no_port_value(void **state); +void cmd_connect_shows_usage_when_port_no_server_value(void **state); +void cmd_connect_shows_message_when_port_0(void **state); +void cmd_connect_shows_message_when_port_minus1(void **state); +void cmd_connect_shows_message_when_port_65536(void **state); +void cmd_connect_shows_message_when_port_contains_chars(void **state); diff --git a/tests/testsuite.c b/tests/testsuite.c index 105f5f65..dffd2127 100644 --- a/tests/testsuite.c +++ b/tests/testsuite.c @@ -180,6 +180,14 @@ int main(int argc, char* argv[]) { 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_connect_shows_usage_when_no_server_value), + unit_test(cmd_connect_shows_usage_when_server_no_port_value), + unit_test(cmd_connect_shows_usage_when_no_port_value), + unit_test(cmd_connect_shows_usage_when_port_no_server_value), + unit_test(cmd_connect_shows_message_when_port_0), + unit_test(cmd_connect_shows_message_when_port_minus1), + unit_test(cmd_connect_shows_message_when_port_65536), + unit_test(cmd_connect_shows_message_when_port_contains_chars), unit_test(cmd_rooms_shows_message_when_disconnected), unit_test(cmd_rooms_shows_message_when_disconnecting),