48 lines
1.5 KiB
C
48 lines
1.5 KiB
C
#include "c_TcpSelectReactor.h"
|
|||
|
|
#include "c_Test.h"
|
||
|
|
#include "c_TcpServer.h"
|
||
|
|
|
||
|
|
static void OnSelectClientConnected(c_socket_t client_sock, const c_SockAddr_t* peer_addr, void* args) {
|
||
|
|
(void)args;
|
||
|
|
char ip_str[64];
|
||
|
|
if (c_SockAddr_ToString(peer_addr, ip_str, sizeof(ip_str)) == C_SUCCESS) {
|
||
|
|
printf(" " COLOR_GREEN "[SELECT EVENT] Connection Intercepted: %s:%d" COLOR_RESET "\n",
|
||
|
|
ip_str, (int)c_SockAddr_GetPort(peer_addr));
|
||
|
|
}
|
||
|
|
c_Socket_Close(client_sock);
|
||
|
|
}
|
||
|
|
|
||
|
|
TEST_CASE(test_select_reactor_server_lifecycle) {
|
||
|
|
c_Socket_Init();
|
||
|
|
|
||
|
|
c_TcpServer_t server;
|
||
|
|
/* Initialize an unweighted IPv4 TCP Stream Server on Port 8585 */
|
||
|
|
c_err_t err = c_TcpServer_Init(&server, AF_INET, 8585, 512, NULL);
|
||
|
|
ASSERT_INT_EQ(C_SUCCESS, err);
|
||
|
|
|
||
|
|
/* 1. Instantiate the select driver backend */
|
||
|
|
c_TcpReactor_t* select_backend = NULL;
|
||
|
|
err = c_TcpSelectReactor_Create(&select_backend, 0);
|
||
|
|
ASSERT_INT_EQ(C_SUCCESS, err);
|
||
|
|
|
||
|
|
/* 2. Bind the driver onto the polymorphic loop interface */
|
||
|
|
err = c_TcpServer_SetReactor(&server, select_backend);
|
||
|
|
ASSERT_INT_EQ(C_SUCCESS, err);
|
||
|
|
|
||
|
|
/* 3. Execute a fast non-blocking single-pass polling check (10ms timeout) */
|
||
|
|
err = c_TcpServer_Run(&server, 60000, OnSelectClientConnected, NULL);
|
||
|
|
ASSERT_INT_EQ(C_SUCCESS, err);
|
||
|
|
|
||
|
|
/* 4. Complete teardown */
|
||
|
|
c_TcpServer_Destroy(&server);
|
||
|
|
|
||
|
|
c_Socket_Destroy();
|
||
|
|
}
|
||
|
|
|
||
|
|
int main(void) {
|
||
|
|
TEST_START(TcpServer_SelectReactor_Suite);
|
||
|
|
RUN_TEST(test_select_reactor_server_lifecycle);
|
||
|
|
TEST_REPORT();
|
||
|
|
RETURN_TEST_STATUS;
|
||
|
|
}
|