xref: /netbsd-src/tests/lib/libc/inet/t_inet_addr.c (revision 81ed1247be8cefa44b671c79ed333961ac6d0f9d)
1*81ed1247Srillig /* $NetBSD: t_inet_addr.c,v 1.2 2022/01/16 10:38:59 rillig Exp $ */
2679713aaSginsbach 
3679713aaSginsbach /*
4679713aaSginsbach  * Copyright (c) 2011 The NetBSD Foundation, Inc.
5679713aaSginsbach  * All rights reserved.
6679713aaSginsbach  *
7679713aaSginsbach  * This code is derived from software contributed to The NetBSD Foundation
8679713aaSginsbach  *
9679713aaSginsbach  * Redistribution and use in source and binary forms, with or without
10679713aaSginsbach  * modification, are permitted provided that the following conditions
11679713aaSginsbach  * are met:
12679713aaSginsbach  * 1. Redistributions of source code must retain the above copyright
13679713aaSginsbach  *    notice, this list of conditions and the following disclaimer.
14679713aaSginsbach  * 2. Redistributions in binary form must reproduce the above copyright
15679713aaSginsbach  *    notice, this list of conditions and the following disclaimer in the
16679713aaSginsbach  *    documentation and/or other materials provided with the distribution.
17679713aaSginsbach  *
18679713aaSginsbach  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
19679713aaSginsbach  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
20679713aaSginsbach  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21679713aaSginsbach  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
22679713aaSginsbach  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23679713aaSginsbach  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24679713aaSginsbach  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25679713aaSginsbach  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26679713aaSginsbach  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27679713aaSginsbach  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28679713aaSginsbach  * POSSIBILITY OF SUCH DAMAGE.
29679713aaSginsbach  */
30679713aaSginsbach 
31679713aaSginsbach #include <sys/cdefs.h>
32679713aaSginsbach __COPYRIGHT("@(#) Copyright (c) 2011\
33679713aaSginsbach  The NetBSD Foundation, inc. All rights reserved.");
34*81ed1247Srillig __RCSID("$NetBSD: t_inet_addr.c,v 1.2 2022/01/16 10:38:59 rillig Exp $");
35679713aaSginsbach 
36679713aaSginsbach #include <arpa/inet.h>
37679713aaSginsbach 
38679713aaSginsbach #include <atf-c.h>
39679713aaSginsbach #include <stdio.h>
40679713aaSginsbach #include <string.h>
41679713aaSginsbach 
42679713aaSginsbach ATF_TC(inet_addr_basic);
ATF_TC_HEAD(inet_addr_basic,tc)43679713aaSginsbach ATF_TC_HEAD(inet_addr_basic, tc)
44679713aaSginsbach {
45679713aaSginsbach 	atf_tc_set_md_var(tc, "descr", "Checks inet_addr(3)");
46679713aaSginsbach }
47679713aaSginsbach 
ATF_TC_BODY(inet_addr_basic,tc)48679713aaSginsbach ATF_TC_BODY(inet_addr_basic, tc)
49679713aaSginsbach {
50679713aaSginsbach 	static const char *addrs[] = {
51679713aaSginsbach 		"127.0.0.1", "99.99.99.99", "0.0.0.0", "255.255.255.255" };
52679713aaSginsbach 
53679713aaSginsbach 	struct in_addr ia;
54679713aaSginsbach 	const char *ian;
55679713aaSginsbach 	in_addr_t addr;
56679713aaSginsbach 	size_t i;
57679713aaSginsbach 
58679713aaSginsbach 	for (i = 0; i < __arraycount(addrs); i++) {
59679713aaSginsbach 
60*81ed1247Srillig 		(void)fprintf(stderr, "checking %s\n", addrs[i]);
61679713aaSginsbach 
62679713aaSginsbach 		addr = inet_addr(addrs[i]);
63679713aaSginsbach 		ia.s_addr = addr;
64679713aaSginsbach 		ian = inet_ntoa(ia);
65679713aaSginsbach 
66679713aaSginsbach 		ATF_REQUIRE(ian != NULL);
67679713aaSginsbach 		ATF_CHECK(strcmp(ian, addrs[i]) == 0);
68679713aaSginsbach 	}
69679713aaSginsbach }
70679713aaSginsbach 
71679713aaSginsbach ATF_TC(inet_addr_err);
ATF_TC_HEAD(inet_addr_err,tc)72679713aaSginsbach ATF_TC_HEAD(inet_addr_err, tc)
73679713aaSginsbach {
74679713aaSginsbach 	atf_tc_set_md_var(tc, "descr", "Invalid addresses with inet_addr(3)");
75679713aaSginsbach }
76679713aaSginsbach 
ATF_TC_BODY(inet_addr_err,tc)77679713aaSginsbach ATF_TC_BODY(inet_addr_err, tc)
78679713aaSginsbach {
79679713aaSginsbach 	static const char *addrs[] = {
80679713aaSginsbach 		". . . .", "1.2.3.", "0.0.0.256", "255.255.255.256",
81679713aaSginsbach 		"................................................",
82679713aaSginsbach 		"a.b.c.d", "0x0.0x1.0x2.0x3", "-1.-1.-1.-1", "", " "};
83679713aaSginsbach 
84679713aaSginsbach 	struct in_addr ia;
85679713aaSginsbach 	const char *ian;
86679713aaSginsbach 	in_addr_t addr;
87679713aaSginsbach 	size_t i;
88679713aaSginsbach 
89679713aaSginsbach 	for (i = 0; i < __arraycount(addrs); i++) {
90679713aaSginsbach 
91*81ed1247Srillig 		(void)fprintf(stderr, "checking %s\n", addrs[i]);
92679713aaSginsbach 
93679713aaSginsbach 		addr = inet_addr(addrs[i]);
94679713aaSginsbach 		ia.s_addr = addr;
95679713aaSginsbach 		ian = inet_ntoa(ia);
96679713aaSginsbach 
97679713aaSginsbach 		ATF_REQUIRE(ian != NULL);
98679713aaSginsbach 		ATF_CHECK(strcmp(ian, addrs[i]) != 0);
99679713aaSginsbach 	}
100679713aaSginsbach }
101679713aaSginsbach 
ATF_TP_ADD_TCS(tp)102679713aaSginsbach ATF_TP_ADD_TCS(tp)
103679713aaSginsbach {
104679713aaSginsbach 
105679713aaSginsbach 	ATF_TP_ADD_TC(tp, inet_addr_basic);
106679713aaSginsbach 	ATF_TP_ADD_TC(tp, inet_addr_err);
107679713aaSginsbach 
108679713aaSginsbach 	return atf_no_error();
109679713aaSginsbach }
110