diff --git a/src/components/server/server.c b/src/components/server/server.c index 61a7f4a..5f36f64 100644 --- a/src/components/server/server.c +++ b/src/components/server/server.c @@ -176,7 +176,7 @@ int start_server(void) { } void prepare_start(int argc, char *argv[]) { - if (argc != 2) { + if (argc < 2) { print_log(stdout, pl_error, "Usage: %s \n", argv[0]); exit(1); } @@ -187,6 +187,10 @@ void prepare_start(int argc, char *argv[]) { } if (!directory_exists(STORAGE_FOLDER)) { - mkdir(STORAGE_FOLDER, 0700); + if (mkdir(STORAGE_FOLDER, 0700) == -1) { + print_log(stderr, pl_fatal, "mkdir: \"%s\" %s\n", argv[1], + strerror(errno)); + exit(8); + } } } \ No newline at end of file diff --git a/test/file_p/file_send_prepare.c b/test/file_p/file_send_prepare.c index 7f9c435..f11a27f 100644 --- a/test/file_p/file_send_prepare.c +++ b/test/file_p/file_send_prepare.c @@ -14,6 +14,7 @@ #include #include #include + char *str2snd = NULL; dbuf_t *dbuf; diff --git a/test/server/CMakeLists.txt b/test/server/CMakeLists.txt index 8e030d1..f854c23 100644 --- a/test/server/CMakeLists.txt +++ b/test/server/CMakeLists.txt @@ -17,4 +17,25 @@ target_link_libraries(start_server target_link_options(start_server PRIVATE -Wl,--wrap=socket,--wrap=setsockopt,--wrap=bind,--wrap=listen,--wrap=exit,--wrap=print_log) -add_test(NAME client_start_server_test_1 COMMAND start_server) \ No newline at end of file +add_test(NAME client_start_server_test_1 COMMAND start_server) + +# ---/ prepare_start /-------------------------------------------------- + +add_executable(prepare_start + prepare_start.c +) + +target_link_libraries(prepare_start + cmocka + client + file_p + session + utils + main + server + test_utils +) + +target_link_options(prepare_start PRIVATE -Wl,--wrap=print_log,--wrap=print_log,--wrap=chdir,--wrap=mkdir,--wrap=exit,--wrap=directory_exists) + +add_test(NAME client_prepare_start_test_1 COMMAND prepare_start) \ No newline at end of file diff --git a/test/server/prepare_start.c b/test/server/prepare_start.c new file mode 100644 index 0000000..32c4565 --- /dev/null +++ b/test/server/prepare_start.c @@ -0,0 +1,84 @@ +#include +#include +#include + +/* TODO: finish */ + +int _errno = 0; +int _exit_code = 0; +extern void *print_str_arr; + +void __wrap_exit(int __status) { _exit_code = __status; } + +int __wrap_chdir(const char *__path) { + return mock_type(int); +} + +int __wrap_mkdir(const char *__path, __mode_t __mode) { + return mock_type(int); +} + +int __wrap_directory_exists(const char *path) { + return mock_type(int); +} + +void test__prepare_start__success(void **state) { + int argc = 2; + + char *argv[] = { + "test_prog", + "w_dir" + }; + + will_return(__wrap_chdir, 0); + will_return(__wrap_directory_exists, 1); + + prepare_start(argc,argv); + assert_int_equal(_exit_code, 0); +} + +void test__prepare_start__success_mkdir(void **state) { + int argc = 2; + + char *argv[] = { + "test_prog", + "w_dir" + }; + + will_return(__wrap_chdir, 0); + will_return(__wrap_directory_exists, 0); + will_return(__wrap_mkdir, 1); + + prepare_start(argc,argv); + assert_int_equal(_exit_code, 0); +} + +void test__prepare_start__success_no_arg(void **state) { + int argc = 1; + + char *argv[] = { + "test_prog" + }; + + will_return(__wrap_chdir, 0); + will_return(__wrap_directory_exists, 0); + will_return(__wrap_mkdir, 1); + + prepare_start(argc,argv); + assert_int_equal(_exit_code, 1); +} + +int setup(void **state) { + print_str_arr = NULL; + return 0; +} +int tear_down(void **state) { return 0; } + +int main(int argc, char **argv) { + const struct CMUnitTest tests[] = { + cmocka_unit_test(test__prepare_start__success), + cmocka_unit_test(test__prepare_start__success_mkdir), + }; + + return cmocka_run_group_tests(tests, setup, tear_down); +} \ No newline at end of file diff --git a/test/server/start_server.c b/test/server/start_server.c index ed2647b..b73967c 100644 --- a/test/server/start_server.c +++ b/test/server/start_server.c @@ -4,7 +4,6 @@ #include #include #include -#include #include #include @@ -17,8 +16,6 @@ int _errno = 0; int _exit_code = 0; extern void *print_str_arr; -/* TODO: finish */ - int __wrap_socket(int __domain, int __type, int __protocol) { errno = _errno; return mock_type(int); @@ -79,6 +76,34 @@ void test__start_server_err_setsockopt(void **state) { assert_int_equal(_exit_code, 4); } +void test__start_server_err_bind(void **state) { + _errno = EBADF; + will_return(__wrap_socket, 1); + will_return(__wrap_setsockopt,0); + will_return(__wrap_bind, -1); + will_return(__wrap_listen, 0); + + const char *fmt_args[] = {"starting, socket bind: %s\n", strerror(_errno), + NULL}; + print_str_arr = fmt_args; + start_server(); + assert_int_equal(_exit_code, 5); +} + +void test__start_server_err_listen(void **state) { + _errno = EBADF; + will_return(__wrap_socket, 1); + will_return(__wrap_setsockopt,0); + will_return(__wrap_bind, 0); + will_return(__wrap_listen, -1); + + const char *fmt_args[] = {"starting, socket listen: %s\n", strerror(_errno), + NULL}; + print_str_arr = fmt_args; + start_server(); + assert_int_equal(_exit_code, 6); +} + int setup(void **state) { print_str_arr = NULL; return 0; @@ -89,6 +114,8 @@ int main(int argc, char **argv) { const struct CMUnitTest tests[] = { cmocka_unit_test(test__start_server_success), cmocka_unit_test(test__start_server_err_socket), + cmocka_unit_test(test__start_server_err_bind), + cmocka_unit_test(test__start_server_err_listen), }; return cmocka_run_group_tests(tests, setup, tear_down);