xref: /third_party/libuv/test/test-getnameinfo.c (revision e66f31c5)
1/* Copyright Joyent, Inc. and other Node contributors. All rights reserved.
2*
3* Permission is hereby granted, free of charge, to any person obtaining a copy
4* of this software and associated documentation files (the "Software"), to
5* deal in the Software without restriction, including without limitation the
6* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7* sell copies of the Software, and to permit persons to whom the Software is
8* furnished to do so, subject to the following conditions:
9*
10* The above copyright notice and this permission notice shall be included in
11* all copies or substantial portions of the Software.
12*
13* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
19* IN THE SOFTWARE.
20*/
21
22#include "uv.h"
23#include "task.h"
24#include <stdio.h>
25#include <stdlib.h>
26#include <string.h>
27
28
29static const char* address_ip4 = "127.0.0.1";
30static const char* address_ip6 = "::1";
31static const int port = 80;
32
33static struct sockaddr_in addr4;
34static struct sockaddr_in6 addr6;
35static uv_getnameinfo_t req;
36
37static void getnameinfo_req(uv_getnameinfo_t* handle,
38                            int status,
39                            const char* hostname,
40                            const char* service) {
41  ASSERT_NOT_NULL(handle);
42  ASSERT_OK(status);
43  ASSERT_NOT_NULL(hostname);
44  ASSERT_NOT_NULL(service);
45}
46
47
48TEST_IMPL(getnameinfo_basic_ip4) {
49/* TODO(gengjiawen): Fix test on QEMU. */
50#if defined(__QEMU__)
51  RETURN_SKIP("Test does not currently work in QEMU");
52#endif
53
54  int r;
55
56  r = uv_ip4_addr(address_ip4, port, &addr4);
57  ASSERT_OK(r);
58
59  r = uv_getnameinfo(uv_default_loop(),
60                     &req,
61                     &getnameinfo_req,
62                     (const struct sockaddr*)&addr4,
63                     0);
64  ASSERT_OK(r);
65
66  uv_run(uv_default_loop(), UV_RUN_DEFAULT);
67
68  MAKE_VALGRIND_HAPPY(uv_default_loop());
69  return 0;
70}
71
72
73TEST_IMPL(getnameinfo_basic_ip4_sync) {
74/* TODO(gengjiawen): Fix test on QEMU. */
75#if defined(__QEMU__)
76  RETURN_SKIP("Test does not currently work in QEMU");
77#endif
78
79  ASSERT_OK(uv_ip4_addr(address_ip4, port, &addr4));
80
81  ASSERT_OK(uv_getnameinfo(uv_default_loop(),
82                           &req,
83                           NULL,
84                           (const struct sockaddr*)&addr4,
85                           0));
86  ASSERT_NE(req.host[0], '\0');
87  ASSERT_NE(req.service[0], '\0');
88
89  MAKE_VALGRIND_HAPPY(uv_default_loop());
90  return 0;
91}
92
93
94TEST_IMPL(getnameinfo_basic_ip6) {
95/* TODO(gengjiawen): Fix test on QEMU. */
96#if defined(__QEMU__)
97  RETURN_SKIP("Test does not currently work in QEMU");
98#endif
99
100  int r;
101
102  r = uv_ip6_addr(address_ip6, port, &addr6);
103  ASSERT_OK(r);
104
105  r = uv_getnameinfo(uv_default_loop(),
106                     &req,
107                     &getnameinfo_req,
108                     (const struct sockaddr*)&addr6,
109                     0);
110  ASSERT_OK(r);
111
112  uv_run(uv_default_loop(), UV_RUN_DEFAULT);
113
114  MAKE_VALGRIND_HAPPY(uv_default_loop());
115  return 0;
116}
117