aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2017-08-20 10:45:27 -0700
committerGarrett D'Amore <garrett@damore.org>2017-08-21 07:18:31 -0700
commit75adda86be49e6839e50443f0bae5875d9910897 (patch)
treee29b8b449c863be01e5f02945940dc390b239462 /tests
parent6305e16ab64e42fd9791819d416a6e3534439b0b (diff)
downloadnng-75adda86be49e6839e50443f0bae5875d9910897.tar.gz
nng-75adda86be49e6839e50443f0bae5875d9910897.tar.bz2
nng-75adda86be49e6839e50443f0bae5875d9910897.zip
fixes #41 Move DNS out of tcp transport
This moves the DNS related functionality into common code, and also removes all the URL parsing stuff out of the platform specific code and into the transports. Now the transports just take sockaddr's on initialization. (We may want to move this until later.) We also add UDP resolution as another separate API.
Diffstat (limited to 'tests')
-rw-r--r--tests/resolv.c90
1 files changed, 64 insertions, 26 deletions
diff --git a/tests/resolv.c b/tests/resolv.c
index 94108765..849b41cd 100644
--- a/tests/resolv.c
+++ b/tests/resolv.c
@@ -126,67 +126,105 @@ ip6tostr(void *addr)
);
#endif
-TestMain("TCP Resolver", {
+TestMain("Resolver", {
nni_init();
Convey("Google DNS IPv4 resolves", {
- nni_aio aio;
- const char *str;
+ nni_aio aio;
+ const char * str;
+ nng_sockaddr sa;
memset(&aio, 0, sizeof(aio));
nni_aio_init(&aio, NULL, NULL);
+ aio.a_addr = &sa;
nni_plat_tcp_resolv("google-public-dns-a.google.com", "80",
NNG_AF_INET, 1, &aio);
nni_aio_wait(&aio);
So(nni_aio_result(&aio) == 0);
- So(aio.a_naddrs == 1);
- So(aio.a_addrs[0].s_un.s_in.sa_family == NNG_AF_INET);
- So(aio.a_addrs[0].s_un.s_in.sa_port == ntohs(80));
- str = ip4tostr(&aio.a_addrs[0].s_un.s_in.sa_addr);
+ So(sa.s_un.s_in.sa_family == NNG_AF_INET);
+ So(sa.s_un.s_in.sa_port == ntohs(80));
+ str = ip4tostr(&sa.s_un.s_in.sa_addr);
So(strcmp(str, "8.8.8.8") == 0);
nni_aio_fini(&aio);
});
+ Convey("Numeric UDP resolves", {
+ nni_aio aio;
+ const char * str;
+ nng_sockaddr sa;
+ memset(&aio, 0, sizeof(aio));
+ nni_aio_init(&aio, NULL, NULL);
+ aio.a_addr = &sa;
+ nni_plat_udp_resolv("8.8.4.4", "69", NNG_AF_INET, 1, &aio);
+ nni_aio_wait(&aio);
+ So(nni_aio_result(&aio) == 0);
+ So(sa.s_un.s_in.sa_family == NNG_AF_INET);
+ So(sa.s_un.s_in.sa_port == ntohs(69));
+ str = ip4tostr(&sa.s_un.s_in.sa_addr);
+ So(strcmp(str, "8.8.4.4") == 0);
+ nni_aio_fini(&aio);
+ });
Convey("Numeric v4 resolves", {
- nni_aio aio;
- const char *str;
+ nni_aio aio;
+ const char * str;
+ nng_sockaddr sa;
memset(&aio, 0, sizeof(aio));
nni_aio_init(&aio, NULL, NULL);
+ aio.a_addr = &sa;
nni_plat_tcp_resolv("8.8.4.4", "80", NNG_AF_INET, 1, &aio);
nni_aio_wait(&aio);
So(nni_aio_result(&aio) == 0);
- So(aio.a_naddrs == 1);
- So(aio.a_addrs[0].s_un.s_in.sa_family == NNG_AF_INET);
- So(aio.a_addrs[0].s_un.s_in.sa_port == ntohs(80));
- str = ip4tostr(&aio.a_addrs[0].s_un.s_in.sa_addr);
+ So(sa.s_un.s_in.sa_family == NNG_AF_INET);
+ So(sa.s_un.s_in.sa_port == ntohs(80));
+ str = ip4tostr(&sa.s_un.s_in.sa_addr);
So(strcmp(str, "8.8.4.4") == 0);
nni_aio_fini(&aio);
});
Convey("Numeric v6 resolves", {
- nni_aio aio;
- const char *str;
+ nni_aio aio;
+ const char * str;
+ nng_sockaddr sa;
memset(&aio, 0, sizeof(aio));
nni_aio_init(&aio, NULL, NULL);
+ aio.a_addr = &sa;
nni_plat_tcp_resolv("::1", "80", NNG_AF_INET6, 1, &aio);
nni_aio_wait(&aio);
So(nni_aio_result(&aio) == 0);
- So(aio.a_naddrs == 1);
- So(aio.a_addrs[0].s_un.s_in6.sa_family == NNG_AF_INET6);
- So(aio.a_addrs[0].s_un.s_in6.sa_port == ntohs(80));
- str = ip6tostr(&aio.a_addrs[0].s_un.s_in6.sa_addr);
+ So(sa.s_un.s_in6.sa_family == NNG_AF_INET6);
+ So(sa.s_un.s_in6.sa_port == ntohs(80));
+ str = ip6tostr(&sa.s_un.s_in6.sa_addr);
So(strcmp(str, "::1") == 0);
nni_aio_fini(&aio);
});
- Convey("Name service resolves", {
- nni_aio aio;
- const char *str;
+
+ Convey("TCP Name service resolves", {
+ nni_aio aio;
+ const char * str;
+ nng_sockaddr sa;
memset(&aio, 0, sizeof(aio));
nni_aio_init(&aio, NULL, NULL);
+ aio.a_addr = &sa;
nni_plat_tcp_resolv("8.8.4.4", "http", NNG_AF_INET, 1, &aio);
nni_aio_wait(&aio);
So(nni_aio_result(&aio) == 0);
- So(aio.a_naddrs == 1);
- So(aio.a_addrs[0].s_un.s_in.sa_family == NNG_AF_INET);
- So(aio.a_addrs[0].s_un.s_in.sa_port == ntohs(80));
- str = ip4tostr(&aio.a_addrs[0].s_un.s_in.sa_addr);
+ So(sa.s_un.s_in.sa_family == NNG_AF_INET);
+ So(sa.s_un.s_in.sa_port == ntohs(80));
+ str = ip4tostr(&sa.s_un.s_in.sa_addr);
+ So(strcmp(str, "8.8.4.4") == 0);
+ nni_aio_fini(&aio);
+ });
+
+ Convey("UDP Name service resolves", {
+ nni_aio aio;
+ const char * str;
+ nng_sockaddr sa;
+ memset(&aio, 0, sizeof(aio));
+ nni_aio_init(&aio, NULL, NULL);
+ aio.a_addr = &sa;
+ nni_plat_udp_resolv("8.8.4.4", "tftp", NNG_AF_INET, 1, &aio);
+ nni_aio_wait(&aio);
+ So(nni_aio_result(&aio) == 0);
+ So(sa.s_un.s_in.sa_family == NNG_AF_INET);
+ So(sa.s_un.s_in.sa_port == ntohs(69));
+ str = ip4tostr(&sa.s_un.s_in.sa_addr);
So(strcmp(str, "8.8.4.4") == 0);
nni_aio_fini(&aio);
});