sockaddr_to_string.test.c (1643B)
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_sockaddr_to_string_ipv4() { 9 struct sockaddr_in addr; 10 memset(&addr, 0, sizeof(addr)); 11 addr.sin_family = AF_INET; 12 inet_pton(AF_INET, "192.168.1.1", &addr.sin_addr); 13 addr.sin_port = htons(8080); 14 15 char buf[INET6_ADDRSTRLEN + 8]; 16 sockaddr_to_string((struct sockaddr *)&addr, buf, sizeof(buf)); 17 18 ASSERT_STRING_EQUALS("192.168.1.1:8080", buf); 19 } 20 21 void test_sockaddr_to_string_ipv6() { 22 struct sockaddr_in6 addr; 23 memset(&addr, 0, sizeof(addr)); 24 addr.sin6_family = AF_INET6; 25 inet_pton(AF_INET6, "::1", &addr.sin6_addr); 26 addr.sin6_port = htons(3000); 27 28 char buf[INET6_ADDRSTRLEN + 8]; 29 sockaddr_to_string((struct sockaddr *)&addr, buf, sizeof(buf)); 30 31 ASSERT_STRING_EQUALS("[::1]:3000", buf); 32 } 33 34 void test_sockaddr_to_string_ipv6_full() { 35 struct sockaddr_in6 addr; 36 memset(&addr, 0, sizeof(addr)); 37 addr.sin6_family = AF_INET6; 38 inet_pton(AF_INET6, "2001:db8::1", &addr.sin6_addr); 39 addr.sin6_port = htons(443); 40 41 char buf[INET6_ADDRSTRLEN + 8]; 42 sockaddr_to_string((struct sockaddr *)&addr, buf, sizeof(buf)); 43 44 ASSERT_STRING_EQUALS("[2001:db8::1]:443", buf); 45 } 46 47 void test_sockaddr_to_string_null() { 48 char buf[64] = "initial"; 49 sockaddr_to_string(NULL, buf, sizeof(buf)); 50 ASSERT("null addr doesn't crash", 1); 51 } 52 53 int main() { 54 RUN(test_sockaddr_to_string_ipv4); 55 RUN(test_sockaddr_to_string_ipv6); 56 RUN(test_sockaddr_to_string_ipv6_full); 57 RUN(test_sockaddr_to_string_null); 58 return TEST_REPORT(); 59 }