socket-util.c

Socket helper utils
git clone git://git.finwo.net/lib/socket-util.c
Log | Files | Refs | README | LICENSE

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 }