TcpServer/TcpReactor Framework

This commit is contained in:
2026-09-08 10:35:16 +08:00
parent 4711ab6603
commit ac4045a979
23 changed files with 1831 additions and 20 deletions
+81
View File
@@ -0,0 +1,81 @@
#include "c_Test.h"
#include "c_SockAddr.h"
#include "c_SockAddrUtil.h"
#if defined(_WIN32) || defined(_WIN64)
#pragma comment(lib, "ws2_32.lib")
#endif
TEST_CASE(test_sockaddr_variant_extraction_and_string) {
c_Socket_Init();
c_AddrInfo_t addr;
/* Look up explicit local target constraints loopback */
c_err_t err = c_AddrInfo_Init(&addr, AF_INET, SOCK_STREAM, 0, "127.0.0.1", "9090");
ASSERT_INT_EQ(C_ERR_OK, err);
/* 1. Extract raw byte structure layouts into our custom anonymous union container */
c_SockAddr_t sock_addr;
err = c_SockAddrUtil_FromAddrInfo(&sock_addr, &addr);
ASSERT_INT_EQ(C_ERR_OK, err);
/* 2. Validate getter transformations */
ASSERT_INT_EQ(AF_INET, c_SockAddr_GetFamily(&sock_addr));
ASSERT_INT_EQ(9090, (int)c_SockAddr_GetPort(&sock_addr));
/* 3. Re-render structural bits to string format */
char ip_str[64];
err = c_SockAddr_ToString(&sock_addr, ip_str, sizeof(ip_str));
ASSERT_INT_EQ(C_ERR_OK, err);
ASSERT_INT_EQ(0, strcmp("127.0.0.1", ip_str));
c_AddrInfo_Destroy(&addr);
c_Socket_Destroy();
}
TEST_CASE(test_sockaddr_explicit_family_initialization) {
c_Socket_Init();
c_SockAddr_t addr;
c_err_t err;
/* -------------------------------------------------------------------------------------------------------------- */
/* Case A: Verify explicit IPv4 initialization and dynamic getters */
err = c_SockAddr_Init(&addr, AF_INET, "127.0.0.1", 8080);
ASSERT_INT_EQ(C_ERR_OK, err);
ASSERT_INT_EQ(AF_INET, c_SockAddr_GetFamily(&addr));
ASSERT_INT_EQ(8080, (int)c_SockAddr_GetPort(&addr));
char out_ip_v4[INET_ADDRSTRLEN];
err = c_SockAddr_ToString(&addr, out_ip_v4, sizeof(out_ip_v4));
ASSERT_INT_EQ(C_ERR_OK, err);
ASSERT_INT_EQ(0, strcmp("127.0.0.1", out_ip_v4));
/* -------------------------------------------------------------------------------------------------------------- */
/* Case B: Verify explicit IPv6 initialization and loopback string decoding */
err = c_SockAddr_Init(&addr, AF_INET6, "::1", 9090);
ASSERT_INT_EQ(C_ERR_OK, err);
ASSERT_INT_EQ(AF_INET6, c_SockAddr_GetFamily(&addr));
ASSERT_INT_EQ(9090, (int)c_SockAddr_GetPort(&addr));
char out_ip_v6[INET6_ADDRSTRLEN];
err = c_SockAddr_ToString(&addr, out_ip_v6, sizeof(out_ip_v6));
ASSERT_INT_EQ(C_ERR_OK, err);
ASSERT_INT_EQ(0, strcmp("::1", out_ip_v6));
/* -------------------------------------------------------------------------------------------------------------- */
/* Case C: Verify that incorrect cross-family inputs gracefully yield execution failures */
err = c_SockAddr_Init(&addr, AF_INET, "::1", 80); /* Passing IPv6 loopback string to IPv4 family parser */
ASSERT_INT_EQ(C_ERR_FAIL, err);
c_Socket_Destroy();
}
int main(void) {
TEST_START(SockAddr_Variant_Suite);
RUN_TEST(test_sockaddr_variant_extraction_and_string);
RUN_TEST(test_sockaddr_explicit_family_initialization);
TEST_REPORT();
RETURN_TEST_STATUS;
}