chiark / gitweb /
document new choose screen properly
[disorder] / lib / t-addr.c
index 7d00f5e6aab2c6a5aba7773a7434147e6fe4b338..0e495d8158a561242b012764910ca8c6440980b4 100644 (file)
@@ -19,9 +19,9 @@
  */
 #include "test.h"
 
-void test_addr(void) {
+static void test_addr(void) {
   struct stringlist a;
-  const char *s[2];
+  const char *s[3];
   struct addrinfo *ai;
   char *name;
   const struct sockaddr_in *sin4;
@@ -29,17 +29,36 @@ void test_addr(void) {
   struct sockaddr_un su;
 
   static const struct addrinfo pref = {
-    AI_PASSIVE,
-    PF_INET,
-    SOCK_STREAM,
-    0,
-    0,
-    0,
-    0,
-    0
+    .ai_flags = AI_PASSIVE,
+    .ai_family = PF_INET,
+    .ai_socktype = SOCK_STREAM,
   };
 
-  printf("test_addr\n");
+  struct sockaddr_in a1 = {
+    .sin_port = ntohs(25),
+    .sin_addr = { .s_addr = 0}
+  };
+  struct addrinfo p1 = {
+    .ai_family = PF_INET,
+    .ai_socktype = SOCK_STREAM,
+    .ai_protocol = IPPROTO_TCP,
+    .ai_addrlen = sizeof a1,
+    .ai_addr = (struct sockaddr *)&a1,
+  };
+
+  struct sockaddr_in a2 = {
+    .sin_port = ntohs(119),
+    .sin_addr = { .s_addr = htonl(0x7F000001) }
+  };
+  struct addrinfo p2 = {
+    .ai_family = PF_INET,
+    .ai_socktype = SOCK_STREAM,
+    .ai_protocol = IPPROTO_TCP,
+    .ai_addrlen = sizeof a2,
+    .ai_addr = (struct sockaddr *)&a2,
+  };
+
+  insist(addrinfocmp(&p1, &p2) < 0);
 
   a.n = 1;
   a.s = (char **)s;
@@ -55,6 +74,8 @@ void test_addr(void) {
   check_integer(sin4->sin_addr.s_addr, 0);
   check_integer(ntohs(sin4->sin_port), 25);
   check_string(name, "host * service smtp");
+  insist(addrinfocmp(ai, &p1) == 0);
+  insist(addrinfocmp(ai, &p2) < 0);
 
   a.n = 2;
   s[0] = "localhost";
@@ -70,6 +91,19 @@ void test_addr(void) {
   check_integer(ntohl(sin4->sin_addr.s_addr), 0x7F000001);
   check_integer(ntohs(sin4->sin_port), 119);
   check_string(name, "host localhost service nntp");
+  insist(addrinfocmp(ai, &p2) == 0);
+  insist(addrinfocmp(ai, &p1) > 0);
+
+  a.n = 2;
+  s[0] = "no.such.domain.really.i.mean.it.greenend.org.uk";
+  s[1] = "nntp";
+  insist(get_address(&a, &pref, &name) == 0);
+
+  a.n = 3;
+  s[0] = 0;
+  s[1] = 0;
+  s[2] = 0;
+  insist(get_address(&a, &pref, &name) == 0);
 
   memset(&s4, 0, sizeof s4);
   s4.sin_family = AF_INET;
@@ -96,6 +130,8 @@ void test_addr(void) {
   check_integer(multicast((struct sockaddr *)&su), 0);
 }
 
+TEST(addr);
+
 /*
 Local Variables:
 c-basic-offset:2