|
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 |