From ddd96d09680312b7e14dfd6922cff9bba920ebdc Mon Sep 17 00:00:00 2001 From: Bernhard Miklautz Date: Fri, 16 Jan 2015 00:25:13 +0100 Subject: [PATCH] Add test for client command line TestClientCmdLine tests if the client command line parsing works for new and legacy command line syntax. --- client/common/test/CMakeLists.txt | 5 +- client/common/test/TestClientCmdLine.c | 95 ++++++++++++++++++++++++++ 2 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 client/common/test/TestClientCmdLine.c diff --git a/client/common/test/CMakeLists.txt b/client/common/test/CMakeLists.txt index b68ac11e7..1e31f7c2e 100644 --- a/client/common/test/CMakeLists.txt +++ b/client/common/test/CMakeLists.txt @@ -6,7 +6,8 @@ set(${MODULE_PREFIX}_DRIVER ${MODULE_NAME}.c) set(${MODULE_PREFIX}_TESTS TestClientRdpFile.c - TestClientChannels.c) + TestClientChannels.c + TestClientCmdLine.c) create_test_sourcelist(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_DRIVER} @@ -14,7 +15,7 @@ create_test_sourcelist(${MODULE_PREFIX}_SRCS add_executable(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) -set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} freerdp-client) +set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} freerdp-client freerdp) target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) diff --git a/client/common/test/TestClientCmdLine.c b/client/common/test/TestClientCmdLine.c new file mode 100644 index 000000000..a7edde143 --- /dev/null +++ b/client/common/test/TestClientCmdLine.c @@ -0,0 +1,95 @@ +#include +#include +#include +#include +#include + +#define TESTCASE(cmd, expected_return) status = freerdp_client_settings_parse_command_line(settings, ARRAYSIZE(cmd), cmd); \ + if (status != expected_return) { \ + printf("Test argument %s failed\n", #cmd); \ + return -1; \ + } + +#define TESTCASE_SUCCESS(cmd) status = freerdp_client_settings_parse_command_line(settings, ARRAYSIZE(cmd), cmd); \ + if (status < 0) { \ + printf("Test argument %s failed\n", #cmd); \ + return -1; \ + } + +int TestClientCmdLine(int argc, char* argv[]) +{ + + int status; + rdpSettings* settings = freerdp_settings_new(0); + + /* Test help */ + char *cmd1[] = {"xfreerdp", "--help"}; + TESTCASE(cmd1, COMMAND_LINE_STATUS_PRINT_HELP); + + char *cmd2[] = {"xfreerdp", "/help"}; + TESTCASE(cmd2, COMMAND_LINE_STATUS_PRINT_HELP); + + char *cmd3[] = {"xfreerdp", "-help"}; + TESTCASE(cmd3, COMMAND_LINE_STATUS_PRINT_HELP); + + char *cmd4[] = {"xfreerdp", "--version"}; + TESTCASE(cmd4, COMMAND_LINE_STATUS_PRINT_VERSION); + + char *cmd5[] = {"xfreerdp", "/version"}; + TESTCASE(cmd5, COMMAND_LINE_STATUS_PRINT_VERSION); + + char *cmd6[] = {"xfreerdp", "-version"}; + TESTCASE(cmd6, COMMAND_LINE_STATUS_PRINT_VERSION); + + char *cmd7[] = {"xfreerdp", "test.freerdp.com"}; + TESTCASE_SUCCESS(cmd7); + + char *cmd8[] = {"xfreerdp", "-v", "test.freerdp.com"}; + TESTCASE_SUCCESS(cmd8); + + char *cmd9[] = {"xfreerdp", "--v", "test.freerdp.com"}; + TESTCASE_SUCCESS(cmd9); + + char *cmd10[] = {"xfreerdp", "/v:test.freerdp.com"}; + TESTCASE_SUCCESS(cmd10); + + char *cmd11[] = {"xfreerdp", "--plugin", "rdpsnd", "--plugin", "rdpdr", "--data", "disk:media:/tmp", "--", "test.freerdp.com" }; + TESTCASE_SUCCESS(cmd11); + + char *cmd12[] = {"xfreerdp", "/sound", "/drive:media:/tmp", "/v:test.freerdp.com" }; + TESTCASE_SUCCESS(cmd12); + + // password gets overwritten therefore it need to be writeable + char *cmd13[6] = {"xfreerdp", "-u", "test", "-p", "test", "test.freerdp.com"}; + cmd13[4] = malloc(5); + strncpy(cmd13[4], "test", 4); + TESTCASE_SUCCESS(cmd13); + free(cmd13[4]); + + char *cmd14[] = {"xfreerdp", "-u", "test", "-p", "test", "-v", "test.freerdp.com"}; + cmd14[4] = malloc(5); + strncpy(cmd14[4], "test", 4); + TESTCASE_SUCCESS(cmd14); + free(cmd14[4]); + + char *cmd15[] = {"xfreerdp", "/u:test", "/p:test", "/v:test.freerdp.com"}; + cmd15[2] = malloc(7); + strncpy(cmd15[2], "/p:test", 6); + TESTCASE_SUCCESS(cmd15); + free(cmd15[2]); + + char *cmd16[] = {"xfreerdp", "-invalid"}; + TESTCASE(cmd16, COMMAND_LINE_ERROR_NO_KEYWORD); + + char *cmd17[] = {"xfreerdp", "--invalid"}; + TESTCASE(cmd17, COMMAND_LINE_ERROR_NO_KEYWORD); + + char *cmd18[] = {"xfreerdp", "/kbd-list"}; + TESTCASE(cmd18, COMMAND_LINE_STATUS_PRINT); + + char *cmd19[] = {"xfreerdp", "/monitor-list"}; + TESTCASE(cmd19, COMMAND_LINE_STATUS_PRINT); + + return 0; +} +