Files
cKit/Foundation/c_TcpSelectReactor.t.c
T

48 lines
1.5 KiB
C
Raw Normal View History

2026-09-08 10:35:16 +08:00
#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;
}