src/test/resolve.c
changeset 184 2ab01ab33cfa
equal deleted inserted replaced
183:7bfbe9070c50 184:2ab01ab33cfa
       
     1 #include "../resolve.h"
       
     2 #include "test.h"
       
     3 
       
     4 void test_resolve_addr (void)
       
     5 {
       
     6     struct addrinfo ai;
       
     7     struct sockaddr_in sa_in;
       
     8     struct sockaddr_in6 sa_in6;
       
     9 
       
    10     log_debug("test IPv4 bind addr");
       
    11     ai.ai_flags = 0;
       
    12     sa_in.sin_family = ai.ai_family = AF_INET;
       
    13     ai.ai_socktype = SOCK_STREAM;
       
    14     ai.ai_protocol = 0;
       
    15     sa_in.sin_port = htons(1234);
       
    16     sa_in.sin_addr.s_addr = INADDR_ANY;
       
    17     ai.ai_addrlen = sizeof(sa_in);
       
    18     ai.ai_addr = (struct sockaddr *) &sa_in;
       
    19     ai.ai_canonname = NULL;
       
    20     ai.ai_next = NULL;
       
    21 
       
    22     assert_strcmp(resolve_addr_text(&ai), "[0.0.0.0]:1234");
       
    23 
       
    24     log_debug("test IPv6 remote");
       
    25     sa_in6.sin6_family = ai.ai_family = AF_INET6;
       
    26     sa_in6.sin6_port = htons(1234);
       
    27     sa_in6.sin6_flowinfo = 0;
       
    28     sa_in6.sin6_addr = in6addr_loopback;
       
    29     sa_in6.sin6_scope_id = 0;
       
    30     ai.ai_addrlen = sizeof(sa_in6);
       
    31     ai.ai_addr = (struct sockaddr *) &sa_in6;
       
    32 
       
    33     assert_strcmp(resolve_addr_text(&ai), "[::1]:1234");
       
    34 }
       
    35 
       
    36 void test_resolve_result (void)
       
    37 {
       
    38     struct resolve_result rr;
       
    39 
       
    40     log_debug("resolve_result_init");
       
    41     resolve_result_init(&rr);
       
    42     
       
    43     log_debug("test resolve_result_next on empty result");
       
    44     assert_null(resolve_result_next(&rr));
       
    45 
       
    46     resolve_result_deinit(&rr);
       
    47 }
       
    48 
       
    49 void test_resolve (void)
       
    50 {
       
    51     struct resolve_result rr;
       
    52     struct addrinfo *ai;
       
    53     error_t err, err2;
       
    54     
       
    55     log_debug("test resolve_addr on 0.0.0.0:1234 passive");
       
    56     assert_success(resolve_addr(&rr, NULL, "1234", SOCK_STREAM, AI_PASSIVE, &err));
       
    57 
       
    58     while ((ai = resolve_result_next(&rr))) {
       
    59         if (ai->ai_family == AF_INET)
       
    60             assert_strcmp(resolve_addr_text(ai), "[0.0.0.0]:1234");
       
    61         else if (ai->ai_family == AF_INET6)
       
    62             assert_strcmp(resolve_addr_text(ai), "[::]:1234");
       
    63         else
       
    64             assert(false);
       
    65     }
       
    66 
       
    67     resolve_result_deinit(&rr);
       
    68 
       
    69     log_debug("test resolve_addr error");
       
    70     SET_ERROR_EXTRA(&err2, ERR_GETADDRINFO, EAI_NONAME);
       
    71     assert_err(resolve_addr(&rr, NULL, NULL, 0, 0, &err), ERR_GETADDRINFO);
       
    72     assert_error(&err, &err2);
       
    73 }
       
    74