testing: gets rid of server_main_loop
This commit is contained in:
@@ -38,25 +38,4 @@ target_link_libraries(prepare_start
|
|||||||
|
|
||||||
target_link_options(prepare_start PRIVATE -Wl,--wrap=print_log,--wrap=chdir,--wrap=mkdir,--wrap=exit,--wrap=directory_exists)
|
target_link_options(prepare_start PRIVATE -Wl,--wrap=print_log,--wrap=chdir,--wrap=mkdir,--wrap=exit,--wrap=directory_exists)
|
||||||
|
|
||||||
add_test(NAME client_prepare_start_test_1 COMMAND prepare_start)
|
add_test(NAME client_prepare_start_test_1 COMMAND prepare_start)
|
||||||
|
|
||||||
# ---/ server_main_loop /--------------------------------------------
|
|
||||||
|
|
||||||
add_executable(server_main_loop
|
|
||||||
server_main_loop.c
|
|
||||||
)
|
|
||||||
|
|
||||||
target_link_libraries(server_main_loop
|
|
||||||
cmocka
|
|
||||||
client
|
|
||||||
file_p
|
|
||||||
session
|
|
||||||
utils
|
|
||||||
main
|
|
||||||
server
|
|
||||||
test_utils
|
|
||||||
)
|
|
||||||
|
|
||||||
target_link_options(server_main_loop PRIVATE -Wl,--wrap=print_log)
|
|
||||||
|
|
||||||
add_test(NAME client_server_main_loop_test_1 COMMAND server_main_loop)
|
|
||||||
@@ -1,123 +0,0 @@
|
|||||||
#include <arpa/inet.h>
|
|
||||||
#include <cmocka.h>
|
|
||||||
#include <main.h>
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <server.h>
|
|
||||||
#include <signal.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#define CLIENT_PORT PORT + 1
|
|
||||||
|
|
||||||
int sd = -1;
|
|
||||||
int lpid = -1;
|
|
||||||
int _addr;
|
|
||||||
volatile sig_atomic_t child_ready = 0;
|
|
||||||
#define WELCOME_MES "Hello everyworld!\n"
|
|
||||||
|
|
||||||
int init_client(void);
|
|
||||||
bool connect_to_server(int sd, int addr, short int port);
|
|
||||||
void _server_loop();
|
|
||||||
void usr1hdl(int n) { child_ready = true; }
|
|
||||||
int setup(void **state);
|
|
||||||
int tear_down(void **state);
|
|
||||||
|
|
||||||
/* === TESTS === */
|
|
||||||
|
|
||||||
/* TODO: better solution than sleep() */
|
|
||||||
void test__welcome(void **state) {
|
|
||||||
char str[] = WELCOME_MES "login> ";
|
|
||||||
char buf[256];
|
|
||||||
int rlen = read(sd, buf, 128);
|
|
||||||
buf[rlen] = 0;
|
|
||||||
assert_string_equal(str, buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* === MAIN === */
|
|
||||||
int main(int argc, char **argv) {
|
|
||||||
const struct CMUnitTest tests[] = {cmocka_unit_test(test__welcome)};
|
|
||||||
return cmocka_run_group_tests(tests, setup, tear_down);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* === ADDITIONAL === */
|
|
||||||
bool connect_to_server(int sd, int addr, short int port) {
|
|
||||||
struct sockaddr_in server;
|
|
||||||
server.sin_family = AF_INET;
|
|
||||||
server.sin_addr.s_addr = addr;
|
|
||||||
server.sin_port = port;
|
|
||||||
|
|
||||||
if (-1 == connect(sd, (struct sockaddr *)&server, sizeof(server))) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
int init_client(void) {
|
|
||||||
int res;
|
|
||||||
int cs = socket(AF_INET, SOCK_STREAM, 0);
|
|
||||||
struct sockaddr_in client;
|
|
||||||
|
|
||||||
client.sin_family = AF_INET;
|
|
||||||
client.sin_port = htons(CLIENT_PORT);
|
|
||||||
client.sin_addr.s_addr = htonl(INADDR_ANY);
|
|
||||||
|
|
||||||
int opt = 1;
|
|
||||||
setsockopt(cs, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
|
|
||||||
|
|
||||||
res = bind(cs, (struct sockaddr *)&client, sizeof(client));
|
|
||||||
if (res == -1) {
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
return cs;
|
|
||||||
}
|
|
||||||
|
|
||||||
void _server_loop() {
|
|
||||||
server_data_t s_d = {.ls = start_server(),
|
|
||||||
.welcome_message = WELCOME_MES};
|
|
||||||
if (s_d.ls == -1) {
|
|
||||||
kill(getppid(), SIGTERM);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
kill(getppid(), SIGUSR1);
|
|
||||||
server_main_loop(&s_d);
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
int setup(void **state) {
|
|
||||||
sigset_t mask_usr1, mask_empty;
|
|
||||||
sigemptyset(&mask_usr1);
|
|
||||||
sigaddset(&mask_usr1, SIGUSR1);
|
|
||||||
sigemptyset(&mask_empty);
|
|
||||||
sigprocmask(SIG_SETMASK, &mask_usr1, NULL);
|
|
||||||
signal(SIGUSR1, usr1hdl);
|
|
||||||
|
|
||||||
lpid = fork();
|
|
||||||
|
|
||||||
if (lpid == 0) {
|
|
||||||
_server_loop();
|
|
||||||
}
|
|
||||||
|
|
||||||
while (!child_ready)
|
|
||||||
sigsuspend(&mask_empty);
|
|
||||||
struct sockaddr_in addr;
|
|
||||||
inet_aton("127.0.0.1", &(addr.sin_addr));
|
|
||||||
_addr = addr.sin_addr.s_addr;
|
|
||||||
|
|
||||||
sd = init_client();
|
|
||||||
int res = connect_to_server(sd, _addr, htons(PORT));
|
|
||||||
if (!res) {
|
|
||||||
perror("connect failed");
|
|
||||||
kill(lpid, SIGTERM);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int tear_down(void **state) {
|
|
||||||
kill(lpid, SIGTERM);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user