X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/b90f122bd10bd896f2f9b0cf5676bcd436a7d42e..666130346faf921dfaa1a4d30f40ffe5354e14de:/lib/t-addr.c diff --git a/lib/t-addr.c b/lib/t-addr.c index 7d00f5e..e609cd9 100644 --- a/lib/t-addr.c +++ b/lib/t-addr.c @@ -21,7 +21,7 @@ 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,18 +29,39 @@ 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, + }; + + 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, }; printf("test_addr\n"); + insist(addrinfocmp(&p1, &p2) < 0); + a.n = 1; a.s = (char **)s; s[0] = "smtp"; @@ -55,6 +76,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 +93,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;