string_to_sockaddr.test.c (2486B)
1 #include <arpa/inet.h> 2 #include <netinet/in.h> 3 #include <stdlib.h> 4 #include <string.h> 5 #include "socket-util.h" 6 #include "test.h" 7 8 void test_string_to_sockaddr_ipv4() { 9 struct sockaddr_storage addr; 10 int result = string_to_sockaddr("192.168.1.1:8080", &addr); 11 12 ASSERT("ipv4 parse success", result == 0); 13 ASSERT("ipv4 family", addr.ss_family == AF_INET); 14 15 struct sockaddr_in *sin = (struct sockaddr_in *)&addr; 16 char buf[INET6_ADDRSTRLEN]; 17 inet_ntop(AF_INET, &sin->sin_addr, buf, sizeof(buf)); 18 ASSERT_STRING_EQUALS("192.168.1.1", buf); 19 ASSERT("ipv4 port", ntohs(sin->sin_port) == 8080); 20 } 21 22 void test_string_to_sockaddr_ipv6() { 23 struct sockaddr_storage addr; 24 int result = string_to_sockaddr("[::1]:3000", &addr); 25 26 ASSERT("ipv6 parse success", result == 0); 27 ASSERT("ipv6 family", addr.ss_family == AF_INET6); 28 29 struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)&addr; 30 char buf[INET6_ADDRSTRLEN]; 31 inet_ntop(AF_INET6, &sin6->sin6_addr, buf, sizeof(buf)); 32 ASSERT_STRING_EQUALS("::1", buf); 33 ASSERT("ipv6 port", ntohs(sin6->sin6_port) == 3000); 34 } 35 36 void test_string_to_sockaddr_ipv6_full() { 37 struct sockaddr_storage addr; 38 int result = string_to_sockaddr("[2001:db8::1]:443", &addr); 39 40 ASSERT("ipv6 full parse success", result == 0); 41 ASSERT("ipv6 full family", addr.ss_family == AF_INET6); 42 43 struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)&addr; 44 char buf[INET6_ADDRSTRLEN]; 45 inet_ntop(AF_INET6, &sin6->sin6_addr, buf, sizeof(buf)); 46 ASSERT_STRING_EQUALS("2001:db8::1", buf); 47 ASSERT("ipv6 full port", ntohs(sin6->sin6_port) == 443); 48 } 49 50 void test_string_to_sockaddr_invalid_no_port() { 51 struct sockaddr_storage addr; 52 int result = string_to_sockaddr("192.168.1.1", &addr); 53 ASSERT("no port fails", result == -1); 54 } 55 56 void test_string_to_sockaddr_invalid_port() { 57 struct sockaddr_storage addr; 58 int result = string_to_sockaddr("192.168.1.1:99999", &addr); 59 ASSERT("invalid port fails", result == -1); 60 } 61 62 void test_string_to_sockaddr_null() { 63 struct sockaddr_storage addr; 64 int result = string_to_sockaddr(NULL, &addr); 65 ASSERT("null string fails", result == -1); 66 } 67 68 int main() { 69 RUN(test_string_to_sockaddr_ipv4); 70 RUN(test_string_to_sockaddr_ipv6); 71 RUN(test_string_to_sockaddr_ipv6_full); 72 RUN(test_string_to_sockaddr_invalid_no_port); 73 RUN(test_string_to_sockaddr_invalid_port); 74 RUN(test_string_to_sockaddr_null); 75 return TEST_REPORT(); 76 }