tests: updates start_server [not finished]
This commit is contained in:
@@ -8,6 +8,7 @@
|
|||||||
- [ ] make print_log to write a file log
|
- [ ] make print_log to write a file log
|
||||||
- [ ] Remove file when error while saving the data in DB
|
- [ ] Remove file when error while saving the data in DB
|
||||||
- [ ] Colorize server messages
|
- [ ] Colorize server messages
|
||||||
|
- [ ] Unified list of exit codes
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
|
|||||||
@@ -144,24 +144,33 @@ int start_server(void) {
|
|||||||
int ls = socket(AF_INET, SOCK_STREAM, 0);
|
int ls = socket(AF_INET, SOCK_STREAM, 0);
|
||||||
struct sockaddr_in s_addr;
|
struct sockaddr_in s_addr;
|
||||||
|
|
||||||
|
if (ls == -1) {
|
||||||
|
print_log(stderr, pl_fatal, "starting, socket: %s\n", strerror(errno));
|
||||||
|
exit(3);
|
||||||
|
}
|
||||||
|
|
||||||
s_addr.sin_family = AF_INET;
|
s_addr.sin_family = AF_INET;
|
||||||
s_addr.sin_port = htons(PORT);
|
s_addr.sin_port = htons(PORT);
|
||||||
s_addr.sin_addr.s_addr = htonl(INADDR_ANY);
|
s_addr.sin_addr.s_addr = htonl(INADDR_ANY);
|
||||||
|
|
||||||
int opt = 1;
|
int opt = 1;
|
||||||
setsockopt(ls, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
|
res = setsockopt(ls, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
|
||||||
|
if (res == -1) {
|
||||||
|
print_log(stderr, pl_fatal, "starting, setsockopt: %s\n", strerror(errno));
|
||||||
|
exit(4);
|
||||||
|
}
|
||||||
|
|
||||||
res = bind(ls, (struct sockaddr *)&s_addr, sizeof(s_addr));
|
res = bind(ls, (struct sockaddr *)&s_addr, sizeof(s_addr));
|
||||||
if (res == -1) {
|
if (res == -1) {
|
||||||
print_log(stderr, pl_fatal, "starting, socket bind: %s\n", strerror(errno));
|
print_log(stderr, pl_fatal, "starting, socket bind: %s\n", strerror(errno));
|
||||||
exit(3);
|
exit(5);
|
||||||
}
|
}
|
||||||
|
|
||||||
res = listen(ls, LISTEN_QLEN);
|
res = listen(ls, LISTEN_QLEN);
|
||||||
if (res == -1) {
|
if (res == -1) {
|
||||||
print_log(stderr, pl_fatal, "starting, socket listen: %s\n",
|
print_log(stderr, pl_fatal, "starting, socket listen: %s\n",
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
exit(4);
|
exit(6);
|
||||||
}
|
}
|
||||||
return ls;
|
return ls;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,9 +11,10 @@ target_link_libraries(start_server
|
|||||||
session
|
session
|
||||||
utils
|
utils
|
||||||
main
|
main
|
||||||
|
server
|
||||||
test_utils
|
test_utils
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_options(start_server PRIVATE -Wl,--wrap=socket,--wrap=setsockopt,--wrap=bind,--wrap=listen,--wrap=exit)
|
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)
|
add_test(NAME client_start_server_test_1 COMMAND start_server)
|
||||||
@@ -1,40 +1,94 @@
|
|||||||
#include <cmocka.h>
|
#include <cmocka.h>
|
||||||
#include <db/db.h>
|
#include <db/db.h>
|
||||||
|
#include <errno.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
|
||||||
#include <client.h>
|
#include <client.h>
|
||||||
#include <file_p.h>
|
#include <file_p.h>
|
||||||
#include <main.h>
|
#include <main.h>
|
||||||
|
#include <server.h>
|
||||||
|
|
||||||
|
int _errno = 0;
|
||||||
|
int _exit_code = 0;
|
||||||
|
extern void *print_str_arr;
|
||||||
|
|
||||||
/* TODO: finish */
|
/* TODO: finish */
|
||||||
|
|
||||||
int __wrap_socket(int __domain, int __type, int __protocol) { return 0; }
|
int __wrap_socket(int __domain, int __type, int __protocol) {
|
||||||
|
errno = _errno;
|
||||||
|
return mock_type(int);
|
||||||
|
}
|
||||||
|
|
||||||
int __wrap_setsockopt(int __fd, int __level, int __optname,
|
int __wrap_setsockopt(int __fd, int __level, int __optname,
|
||||||
const void *__optval, socklen_t __optlen) {
|
const void *__optval, socklen_t __optlen) {
|
||||||
return 0;
|
errno = _errno;
|
||||||
|
return mock_type(int);
|
||||||
}
|
}
|
||||||
|
|
||||||
int __wrap_bind(int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len) {
|
int __wrap_bind(int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len) {
|
||||||
return 0;
|
errno = _errno;
|
||||||
|
return mock_type(int);
|
||||||
}
|
}
|
||||||
|
|
||||||
int __wrap_listen(int __fd, int __n) { return 0; }
|
int __wrap_listen(int __fd, int __n) {
|
||||||
|
errno = _errno;
|
||||||
|
return mock_type(int);
|
||||||
|
}
|
||||||
|
|
||||||
void __wrap_exit(int __status) {}
|
void __wrap_exit(int __status) { _exit_code = __status; }
|
||||||
|
|
||||||
void test__start_server_success(void **state) {}
|
void test__start_server_success(void **state) {
|
||||||
|
will_return(__wrap_socket, 1);
|
||||||
|
will_return(__wrap_setsockopt, 0);
|
||||||
|
will_return(__wrap_bind, 0);
|
||||||
|
will_return(__wrap_listen, 0);
|
||||||
|
int ret = start_server();
|
||||||
|
assert_int_equal(ret, 1);
|
||||||
|
}
|
||||||
|
|
||||||
int setup(void **state) { return 0; }
|
void test__start_server_err_socket(void **state) {
|
||||||
|
_errno = EACCES;
|
||||||
|
will_return(__wrap_socket, -1);
|
||||||
|
|
||||||
|
will_return(__wrap_setsockopt, 0);
|
||||||
|
will_return(__wrap_bind, 0);
|
||||||
|
will_return(__wrap_listen, 0);
|
||||||
|
|
||||||
|
const char *fmt_args[] = {"starting, socket: %s\n", strerror(_errno), NULL};
|
||||||
|
print_str_arr = fmt_args;
|
||||||
|
start_server();
|
||||||
|
assert_int_equal(_exit_code, 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
void test__start_server_err_setsockopt(void **state) {
|
||||||
|
_errno = EBADF;
|
||||||
|
will_return(__wrap_socket, 1);
|
||||||
|
will_return(__wrap_setsockopt, -1);
|
||||||
|
will_return(__wrap_bind, 0);
|
||||||
|
will_return(__wrap_listen, 0);
|
||||||
|
|
||||||
|
const char *fmt_args[] = {"starting, setsockopt: %s\n", strerror(_errno),
|
||||||
|
NULL};
|
||||||
|
print_str_arr = fmt_args;
|
||||||
|
start_server();
|
||||||
|
assert_int_equal(_exit_code, 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
int setup(void **state) {
|
||||||
|
print_str_arr = NULL;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
int tear_down(void **state) { return 0; }
|
int tear_down(void **state) { return 0; }
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
const struct CMUnitTest tests[] = {
|
const struct CMUnitTest tests[] = {
|
||||||
cmocka_unit_test(test__start_server_success),
|
cmocka_unit_test(test__start_server_success),
|
||||||
|
cmocka_unit_test(test__start_server_err_socket),
|
||||||
};
|
};
|
||||||
|
|
||||||
return cmocka_run_group_tests(tests, setup, tear_down);
|
return cmocka_run_group_tests(tests, setup, tear_down);
|
||||||
|
|||||||
Reference in New Issue
Block a user