test/resolve.c, and fix AI_* -> NI_* bug in call to getnameinfo
authorTero Marttila <terom@fixme.fi>
Thu, 07 May 2009 18:11:50 +0300
changeset 184 2ab01ab33cfa
parent 183 7bfbe9070c50
child 185 259b5841a0e6
test/resolve.c, and fix AI_* -> NI_* bug in call to getnameinfo
src/resolve.c
src/test/resolve.c
src/test/test_list.inc
--- a/src/resolve.c	Thu May 07 02:57:11 2009 +0300
+++ b/src/resolve.c	Thu May 07 18:11:50 2009 +0300
@@ -75,7 +75,7 @@
     if ((ret = getnameinfo(
                 addr->ai_addr, addr->ai_addrlen, 
                 host, sizeof(host), service, sizeof(service), 
-                AI_NUMERICHOST | AI_NUMERICSERV
+                NI_NUMERICHOST | NI_NUMERICSERV
     ))) {
         strcpy(host, "???");
         strcpy(service, "???");
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/test/resolve.c	Thu May 07 18:11:50 2009 +0300
@@ -0,0 +1,74 @@
+#include "../resolve.h"
+#include "test.h"
+
+void test_resolve_addr (void)
+{
+    struct addrinfo ai;
+    struct sockaddr_in sa_in;
+    struct sockaddr_in6 sa_in6;
+
+    log_debug("test IPv4 bind addr");
+    ai.ai_flags = 0;
+    sa_in.sin_family = ai.ai_family = AF_INET;
+    ai.ai_socktype = SOCK_STREAM;
+    ai.ai_protocol = 0;
+    sa_in.sin_port = htons(1234);
+    sa_in.sin_addr.s_addr = INADDR_ANY;
+    ai.ai_addrlen = sizeof(sa_in);
+    ai.ai_addr = (struct sockaddr *) &sa_in;
+    ai.ai_canonname = NULL;
+    ai.ai_next = NULL;
+
+    assert_strcmp(resolve_addr_text(&ai), "[0.0.0.0]:1234");
+
+    log_debug("test IPv6 remote");
+    sa_in6.sin6_family = ai.ai_family = AF_INET6;
+    sa_in6.sin6_port = htons(1234);
+    sa_in6.sin6_flowinfo = 0;
+    sa_in6.sin6_addr = in6addr_loopback;
+    sa_in6.sin6_scope_id = 0;
+    ai.ai_addrlen = sizeof(sa_in6);
+    ai.ai_addr = (struct sockaddr *) &sa_in6;
+
+    assert_strcmp(resolve_addr_text(&ai), "[::1]:1234");
+}
+
+void test_resolve_result (void)
+{
+    struct resolve_result rr;
+
+    log_debug("resolve_result_init");
+    resolve_result_init(&rr);
+    
+    log_debug("test resolve_result_next on empty result");
+    assert_null(resolve_result_next(&rr));
+
+    resolve_result_deinit(&rr);
+}
+
+void test_resolve (void)
+{
+    struct resolve_result rr;
+    struct addrinfo *ai;
+    error_t err, err2;
+    
+    log_debug("test resolve_addr on 0.0.0.0:1234 passive");
+    assert_success(resolve_addr(&rr, NULL, "1234", SOCK_STREAM, AI_PASSIVE, &err));
+
+    while ((ai = resolve_result_next(&rr))) {
+        if (ai->ai_family == AF_INET)
+            assert_strcmp(resolve_addr_text(ai), "[0.0.0.0]:1234");
+        else if (ai->ai_family == AF_INET6)
+            assert_strcmp(resolve_addr_text(ai), "[::]:1234");
+        else
+            assert(false);
+    }
+
+    resolve_result_deinit(&rr);
+
+    log_debug("test resolve_addr error");
+    SET_ERROR_EXTRA(&err2, ERR_GETADDRINFO, EAI_NONAME);
+    assert_err(resolve_addr(&rr, NULL, NULL, 0, 0, &err), ERR_GETADDRINFO);
+    assert_error(&err, &err2);
+}
+
--- a/src/test/test_list.inc	Thu May 07 02:57:11 2009 +0300
+++ b/src/test/test_list.inc	Thu May 07 18:11:50 2009 +0300
@@ -24,8 +24,15 @@
 TEST ( str_quote                    )
 TEST ( str_format                   )
 TEST ( dump_str                     )
+
+TEST ( resolve_addr                 )
+TEST ( resolve_result               )
+TEST ( resolve                      )
+
 TEST ( transport_test               )
+
 TEST ( line_proto                   )
+
 TEST ( irc_queue                    )
 TEST ( irc_conn                     )
 TEST ( irc_conn_self_nick           )