diff --git a/TODO.md b/TODO.md index 7e9f358..b864360 100644 --- a/TODO.md +++ b/TODO.md @@ -5,7 +5,7 @@ - [ ] Tests for the server module # Development plans - +- [ ] make print_log to write a file log - [ ] Remove file when error while saving the data in DB - [ ] Colorize server messages diff --git a/src/components/server/server.c b/src/components/server/server.c index 4d97533..9355172 100644 --- a/src/components/server/server.c +++ b/src/components/server/server.c @@ -1,23 +1,24 @@ /* SPDX-License-Identifier: MIT */ /* Copyright (c) 2026 Oleksandr Zhylin */ -#include -#include -#include -#include -#include #include +#include #include #include +#include +#include #include +#include #include #include #include +#include #include #include #include #include #include +#include volatile sig_atomic_t shutdown_requested = 0; volatile sig_atomic_t signal_received = 0; @@ -78,7 +79,7 @@ void server_main_loop(server_data_t *s_d) { } if (sr == -1) { - perror("select"); + print_log(stderr, pl_error, "select: %s", strerror(errno)); exit(6); } @@ -119,7 +120,8 @@ void server_main_loop(server_data_t *s_d) { char *get_welcome_mes(void) { int fd = open(WELCOME_FILE_NAME, O_RDONLY); if (fd == -1) { - perror(WELCOME_FILE_NAME); + print_log(stderr, pl_fatal, "starting, welcome file \"%s\": %s\n", + WELCOME_FILE_NAME, strerror(errno)); exit(7); } int filesize = lseek(fd, 0, SEEK_END) + 1; @@ -127,7 +129,8 @@ char *get_welcome_mes(void) { char *welcome_message = mmap(NULL, filesize, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0); if (welcome_message == MAP_FAILED) { - perror(WELCOME_FILE_NAME); + print_log(stderr, pl_fatal, "starting, welcome file \"%s\": %s\n", + WELCOME_FILE_NAME, strerror(errno)); close(fd); exit(5); } @@ -150,13 +153,14 @@ int start_server(void) { res = bind(ls, (struct sockaddr *)&s_addr, sizeof(s_addr)); if (res == -1) { - perror("bind"); + print_log(stderr, pl_fatal, "starting, socket bind: %s\n", strerror(errno)); exit(3); } res = listen(ls, LISTEN_QLEN); if (res == -1) { - perror("listen"); + print_log(stderr, pl_fatal, "starting, socket listen: %s\n", + strerror(errno)); exit(4); } return ls; @@ -169,7 +173,7 @@ void prepare_start(int argc, char *argv[]) { } if (-1 == chdir(argv[1])) { - perror(argv[1]); + print_log(stderr, pl_fatal, "chdir: \"%s\" %s\n", argv[1], strerror(errno)); exit(2); } diff --git a/src/components/utils/utils.c b/src/components/utils/utils.c index 97a1892..0a40fd6 100644 --- a/src/components/utils/utils.c +++ b/src/components/utils/utils.c @@ -32,7 +32,7 @@ int print_log(FILE *output, enum pl_type type, const char *format_message, char *uf_str = malloc(strlen(date_preffix) + 16 + strlen(format_message) + 4); sprintf(uf_str, uff_str, date_preffix, format_message); va_start(args, format_message); - ret = vfprintf(stdout, uf_str, args); + ret = vfprintf(output, uf_str, args); va_end(args); return ret; } \ No newline at end of file diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 46f4484..3573a09 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -2,4 +2,5 @@ add_subdirectory(session) add_subdirectory(user) add_subdirectory(file_p) add_subdirectory(test_utils) -add_subdirectory(client) \ No newline at end of file +add_subdirectory(client) +add_subdirectory(server) \ No newline at end of file diff --git a/test/server/CMakeLists.txt b/test/server/CMakeLists.txt new file mode 100644 index 0000000..b159f32 --- /dev/null +++ b/test/server/CMakeLists.txt @@ -0,0 +1,19 @@ +# ---/ start_server /-------------------------------------------------- + +add_executable(start_server + start_server.c +) + +target_link_libraries(start_server + cmocka + client + file_p + session + utils + main + test_utils +) + +target_link_options(start_server PRIVATE -Wl,--wrap=socket,--wrap=setsockopt,--wrap=bind,--wrap=listen,--wrap=exit) + +add_test(NAME client_start_server_test_1 COMMAND start_server) \ No newline at end of file diff --git a/test/server/start_server.c b/test/server/start_server.c new file mode 100644 index 0000000..4dcf867 --- /dev/null +++ b/test/server/start_server.c @@ -0,0 +1,41 @@ +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +/* TODO: finish */ + +int __wrap_socket(int __domain, int __type, int __protocol) { return 0; } + +int __wrap_setsockopt(int __fd, int __level, int __optname, + const void *__optval, socklen_t __optlen) { + return 0; +} + +int __wrap_bind(int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len) { + return 0; +} + +int __wrap_listen(int __fd, int __n) { return 0; } + +void __wrap_exit(int __status) {} + +void test__start_server_success(void **state) {} + +int setup(void **state) { return 0; } +int tear_down(void **state) { return 0; } + +int main(int argc, char **argv) { + const struct CMUnitTest tests[] = { + cmocka_unit_test(test__start_server_success), + }; + + return cmocka_run_group_tests(tests, setup, tear_down); +}