1*00b67f09SDavid van Moolenbroek /* $NetBSD: geoip_test.c,v 1.3 2015/07/08 17:28:59 christos Exp $ */
2*00b67f09SDavid van Moolenbroek
3*00b67f09SDavid van Moolenbroek /*
4*00b67f09SDavid van Moolenbroek * Copyright (C) 2013, 2014 Internet Systems Consortium, Inc. ("ISC")
5*00b67f09SDavid van Moolenbroek *
6*00b67f09SDavid van Moolenbroek * Permission to use, copy, modify, and/or distribute this software for any
7*00b67f09SDavid van Moolenbroek * purpose with or without fee is hereby granted, provided that the above
8*00b67f09SDavid van Moolenbroek * copyright notice and this permission notice appear in all copies.
9*00b67f09SDavid van Moolenbroek *
10*00b67f09SDavid van Moolenbroek * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
11*00b67f09SDavid van Moolenbroek * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
12*00b67f09SDavid van Moolenbroek * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
13*00b67f09SDavid van Moolenbroek * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
14*00b67f09SDavid van Moolenbroek * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
15*00b67f09SDavid van Moolenbroek * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16*00b67f09SDavid van Moolenbroek * PERFORMANCE OF THIS SOFTWARE.
17*00b67f09SDavid van Moolenbroek */
18*00b67f09SDavid van Moolenbroek
19*00b67f09SDavid van Moolenbroek /* Id */
20*00b67f09SDavid van Moolenbroek
21*00b67f09SDavid van Moolenbroek /*! \file */
22*00b67f09SDavid van Moolenbroek
23*00b67f09SDavid van Moolenbroek #include <config.h>
24*00b67f09SDavid van Moolenbroek
25*00b67f09SDavid van Moolenbroek #include <atf-c.h>
26*00b67f09SDavid van Moolenbroek
27*00b67f09SDavid van Moolenbroek #include <unistd.h>
28*00b67f09SDavid van Moolenbroek
29*00b67f09SDavid van Moolenbroek #include <isc/types.h>
30*00b67f09SDavid van Moolenbroek
31*00b67f09SDavid van Moolenbroek #include <dns/geoip.h>
32*00b67f09SDavid van Moolenbroek
33*00b67f09SDavid van Moolenbroek #include "dnstest.h"
34*00b67f09SDavid van Moolenbroek
35*00b67f09SDavid van Moolenbroek #ifdef HAVE_GEOIP
36*00b67f09SDavid van Moolenbroek #include <GeoIP.h>
37*00b67f09SDavid van Moolenbroek
38*00b67f09SDavid van Moolenbroek /* We use GeoIP databases from the 'geoip' system test */
39*00b67f09SDavid van Moolenbroek #define TEST_GEOIP_DATA "../../../bin/tests/system/geoip/data"
40*00b67f09SDavid van Moolenbroek
41*00b67f09SDavid van Moolenbroek /*
42*00b67f09SDavid van Moolenbroek * Helper functions
43*00b67f09SDavid van Moolenbroek * (Mostly copied from bin/named/geoip.c)
44*00b67f09SDavid van Moolenbroek */
45*00b67f09SDavid van Moolenbroek static dns_geoip_databases_t geoip = {
46*00b67f09SDavid van Moolenbroek NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
47*00b67f09SDavid van Moolenbroek };
48*00b67f09SDavid van Moolenbroek
49*00b67f09SDavid van Moolenbroek static void
init_geoip_db(GeoIP ** dbp,GeoIPDBTypes edition,GeoIPDBTypes fallback,GeoIPOptions method,const char * name)50*00b67f09SDavid van Moolenbroek init_geoip_db(GeoIP **dbp, GeoIPDBTypes edition, GeoIPDBTypes fallback,
51*00b67f09SDavid van Moolenbroek GeoIPOptions method, const char *name)
52*00b67f09SDavid van Moolenbroek {
53*00b67f09SDavid van Moolenbroek char *info;
54*00b67f09SDavid van Moolenbroek GeoIP *db;
55*00b67f09SDavid van Moolenbroek
56*00b67f09SDavid van Moolenbroek REQUIRE(dbp != NULL);
57*00b67f09SDavid van Moolenbroek
58*00b67f09SDavid van Moolenbroek db = *dbp;
59*00b67f09SDavid van Moolenbroek
60*00b67f09SDavid van Moolenbroek if (db != NULL) {
61*00b67f09SDavid van Moolenbroek GeoIP_delete(db);
62*00b67f09SDavid van Moolenbroek db = *dbp = NULL;
63*00b67f09SDavid van Moolenbroek }
64*00b67f09SDavid van Moolenbroek
65*00b67f09SDavid van Moolenbroek if (! GeoIP_db_avail(edition)) {
66*00b67f09SDavid van Moolenbroek fprintf(stderr, "GeoIP %s (type %d) DB not available\n",
67*00b67f09SDavid van Moolenbroek name, edition);
68*00b67f09SDavid van Moolenbroek goto fail;
69*00b67f09SDavid van Moolenbroek }
70*00b67f09SDavid van Moolenbroek
71*00b67f09SDavid van Moolenbroek fprintf(stderr, "initializing GeoIP %s (type %d) DB\n",
72*00b67f09SDavid van Moolenbroek name, edition);
73*00b67f09SDavid van Moolenbroek
74*00b67f09SDavid van Moolenbroek db = GeoIP_open_type(edition, method);
75*00b67f09SDavid van Moolenbroek if (db == NULL) {
76*00b67f09SDavid van Moolenbroek fprintf(stderr,
77*00b67f09SDavid van Moolenbroek "failed to initialize GeoIP %s (type %d) DB%s\n",
78*00b67f09SDavid van Moolenbroek name, edition, fallback == 0
79*00b67f09SDavid van Moolenbroek ? "; geoip matches using this database will fail"
80*00b67f09SDavid van Moolenbroek : "");
81*00b67f09SDavid van Moolenbroek goto fail;
82*00b67f09SDavid van Moolenbroek }
83*00b67f09SDavid van Moolenbroek
84*00b67f09SDavid van Moolenbroek info = GeoIP_database_info(db);
85*00b67f09SDavid van Moolenbroek if (info != NULL)
86*00b67f09SDavid van Moolenbroek fprintf(stderr, "%s\n", info);
87*00b67f09SDavid van Moolenbroek
88*00b67f09SDavid van Moolenbroek *dbp = db;
89*00b67f09SDavid van Moolenbroek return;
90*00b67f09SDavid van Moolenbroek
91*00b67f09SDavid van Moolenbroek fail:
92*00b67f09SDavid van Moolenbroek if (fallback != 0)
93*00b67f09SDavid van Moolenbroek init_geoip_db(dbp, fallback, 0, method, name);
94*00b67f09SDavid van Moolenbroek }
95*00b67f09SDavid van Moolenbroek
96*00b67f09SDavid van Moolenbroek static void
load_geoip(const char * dir)97*00b67f09SDavid van Moolenbroek load_geoip(const char *dir) {
98*00b67f09SDavid van Moolenbroek GeoIPOptions method;
99*00b67f09SDavid van Moolenbroek
100*00b67f09SDavid van Moolenbroek #ifdef _WIN32
101*00b67f09SDavid van Moolenbroek method = GEOIP_STANDARD;
102*00b67f09SDavid van Moolenbroek #else
103*00b67f09SDavid van Moolenbroek method = GEOIP_MMAP_CACHE;
104*00b67f09SDavid van Moolenbroek #endif
105*00b67f09SDavid van Moolenbroek
106*00b67f09SDavid van Moolenbroek if (dir != NULL) {
107*00b67f09SDavid van Moolenbroek char *p;
108*00b67f09SDavid van Moolenbroek DE_CONST(dir, p);
109*00b67f09SDavid van Moolenbroek GeoIP_setup_custom_directory(p);
110*00b67f09SDavid van Moolenbroek }
111*00b67f09SDavid van Moolenbroek
112*00b67f09SDavid van Moolenbroek init_geoip_db(&geoip.country_v4, GEOIP_COUNTRY_EDITION, 0,
113*00b67f09SDavid van Moolenbroek method, "Country (IPv4)");
114*00b67f09SDavid van Moolenbroek #ifdef HAVE_GEOIP_V6
115*00b67f09SDavid van Moolenbroek init_geoip_db(&geoip.country_v6, GEOIP_COUNTRY_EDITION_V6, 0,
116*00b67f09SDavid van Moolenbroek method, "Country (IPv6)");
117*00b67f09SDavid van Moolenbroek #endif
118*00b67f09SDavid van Moolenbroek
119*00b67f09SDavid van Moolenbroek init_geoip_db(&geoip.city_v4, GEOIP_CITY_EDITION_REV1,
120*00b67f09SDavid van Moolenbroek GEOIP_CITY_EDITION_REV0, method, "City (IPv4)");
121*00b67f09SDavid van Moolenbroek #if defined(HAVE_GEOIP_V6) && defined(HAVE_GEOIP_CITY_V6)
122*00b67f09SDavid van Moolenbroek init_geoip_db(&geoip.city_v6, GEOIP_CITY_EDITION_REV1_V6,
123*00b67f09SDavid van Moolenbroek GEOIP_CITY_EDITION_REV0_V6, method, "City (IPv6)");
124*00b67f09SDavid van Moolenbroek #endif
125*00b67f09SDavid van Moolenbroek
126*00b67f09SDavid van Moolenbroek init_geoip_db(&geoip.region, GEOIP_REGION_EDITION_REV1,
127*00b67f09SDavid van Moolenbroek GEOIP_REGION_EDITION_REV0, method, "Region");
128*00b67f09SDavid van Moolenbroek init_geoip_db(&geoip.isp, GEOIP_ISP_EDITION, 0,
129*00b67f09SDavid van Moolenbroek method, "ISP");
130*00b67f09SDavid van Moolenbroek init_geoip_db(&geoip.org, GEOIP_ORG_EDITION, 0,
131*00b67f09SDavid van Moolenbroek method, "Org");
132*00b67f09SDavid van Moolenbroek init_geoip_db(&geoip.as, GEOIP_ASNUM_EDITION, 0,
133*00b67f09SDavid van Moolenbroek method, "AS");
134*00b67f09SDavid van Moolenbroek init_geoip_db(&geoip.domain, GEOIP_DOMAIN_EDITION, 0,
135*00b67f09SDavid van Moolenbroek method, "Domain");
136*00b67f09SDavid van Moolenbroek init_geoip_db(&geoip.netspeed, GEOIP_NETSPEED_EDITION, 0,
137*00b67f09SDavid van Moolenbroek method, "NetSpeed");
138*00b67f09SDavid van Moolenbroek }
139*00b67f09SDavid van Moolenbroek
140*00b67f09SDavid van Moolenbroek static isc_boolean_t
do_lookup_string(const char * addr,dns_geoip_subtype_t subtype,const char * string)141*00b67f09SDavid van Moolenbroek do_lookup_string(const char *addr, dns_geoip_subtype_t subtype,
142*00b67f09SDavid van Moolenbroek const char *string)
143*00b67f09SDavid van Moolenbroek {
144*00b67f09SDavid van Moolenbroek dns_geoip_elem_t elt;
145*00b67f09SDavid van Moolenbroek struct in_addr in4;
146*00b67f09SDavid van Moolenbroek isc_netaddr_t na;
147*00b67f09SDavid van Moolenbroek
148*00b67f09SDavid van Moolenbroek inet_pton(AF_INET, addr, &in4);
149*00b67f09SDavid van Moolenbroek isc_netaddr_fromin(&na, &in4);
150*00b67f09SDavid van Moolenbroek
151*00b67f09SDavid van Moolenbroek elt.subtype = subtype;
152*00b67f09SDavid van Moolenbroek strcpy(elt.as_string, string);
153*00b67f09SDavid van Moolenbroek
154*00b67f09SDavid van Moolenbroek return (dns_geoip_match(&na, &geoip, &elt));
155*00b67f09SDavid van Moolenbroek }
156*00b67f09SDavid van Moolenbroek
157*00b67f09SDavid van Moolenbroek static isc_boolean_t
do_lookup_string_v6(const char * addr,dns_geoip_subtype_t subtype,const char * string)158*00b67f09SDavid van Moolenbroek do_lookup_string_v6(const char *addr, dns_geoip_subtype_t subtype,
159*00b67f09SDavid van Moolenbroek const char *string)
160*00b67f09SDavid van Moolenbroek {
161*00b67f09SDavid van Moolenbroek dns_geoip_elem_t elt;
162*00b67f09SDavid van Moolenbroek struct in6_addr in6;
163*00b67f09SDavid van Moolenbroek isc_netaddr_t na;
164*00b67f09SDavid van Moolenbroek
165*00b67f09SDavid van Moolenbroek inet_pton(AF_INET6, addr, &in6);
166*00b67f09SDavid van Moolenbroek isc_netaddr_fromin6(&na, &in6);
167*00b67f09SDavid van Moolenbroek
168*00b67f09SDavid van Moolenbroek elt.subtype = subtype;
169*00b67f09SDavid van Moolenbroek strcpy(elt.as_string, string);
170*00b67f09SDavid van Moolenbroek
171*00b67f09SDavid van Moolenbroek return (dns_geoip_match(&na, &geoip, &elt));
172*00b67f09SDavid van Moolenbroek }
173*00b67f09SDavid van Moolenbroek
174*00b67f09SDavid van Moolenbroek static isc_boolean_t
do_lookup_int(const char * addr,dns_geoip_subtype_t subtype,int id)175*00b67f09SDavid van Moolenbroek do_lookup_int(const char *addr, dns_geoip_subtype_t subtype, int id) {
176*00b67f09SDavid van Moolenbroek dns_geoip_elem_t elt;
177*00b67f09SDavid van Moolenbroek struct in_addr in4;
178*00b67f09SDavid van Moolenbroek isc_netaddr_t na;
179*00b67f09SDavid van Moolenbroek
180*00b67f09SDavid van Moolenbroek inet_pton(AF_INET, addr, &in4);
181*00b67f09SDavid van Moolenbroek isc_netaddr_fromin(&na, &in4);
182*00b67f09SDavid van Moolenbroek
183*00b67f09SDavid van Moolenbroek elt.subtype = subtype;
184*00b67f09SDavid van Moolenbroek elt.as_int = id;
185*00b67f09SDavid van Moolenbroek
186*00b67f09SDavid van Moolenbroek return (dns_geoip_match(&na, &geoip, &elt));
187*00b67f09SDavid van Moolenbroek }
188*00b67f09SDavid van Moolenbroek
189*00b67f09SDavid van Moolenbroek /*
190*00b67f09SDavid van Moolenbroek * Individual unit tests
191*00b67f09SDavid van Moolenbroek */
192*00b67f09SDavid van Moolenbroek
193*00b67f09SDavid van Moolenbroek /* GeoIP country matching */
194*00b67f09SDavid van Moolenbroek ATF_TC(country);
ATF_TC_HEAD(country,tc)195*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(country, tc) {
196*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "test country database matching");
197*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(country,tc)198*00b67f09SDavid van Moolenbroek ATF_TC_BODY(country, tc) {
199*00b67f09SDavid van Moolenbroek isc_result_t result;
200*00b67f09SDavid van Moolenbroek isc_boolean_t match;
201*00b67f09SDavid van Moolenbroek
202*00b67f09SDavid van Moolenbroek UNUSED(tc);
203*00b67f09SDavid van Moolenbroek
204*00b67f09SDavid van Moolenbroek result = dns_test_begin(NULL, ISC_TRUE);
205*00b67f09SDavid van Moolenbroek ATF_REQUIRE(result == ISC_R_SUCCESS);
206*00b67f09SDavid van Moolenbroek
207*00b67f09SDavid van Moolenbroek /* Use databases from the geoip system test */
208*00b67f09SDavid van Moolenbroek load_geoip(TEST_GEOIP_DATA);
209*00b67f09SDavid van Moolenbroek
210*00b67f09SDavid van Moolenbroek if (geoip.country_v4 == NULL) {
211*00b67f09SDavid van Moolenbroek dns_test_end();
212*00b67f09SDavid van Moolenbroek atf_tc_skip("Database not available");
213*00b67f09SDavid van Moolenbroek }
214*00b67f09SDavid van Moolenbroek
215*00b67f09SDavid van Moolenbroek match = do_lookup_string("10.53.0.1", dns_geoip_country_code, "AU");
216*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
217*00b67f09SDavid van Moolenbroek
218*00b67f09SDavid van Moolenbroek match = do_lookup_string("10.53.0.1",
219*00b67f09SDavid van Moolenbroek dns_geoip_country_code3, "AUS");
220*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
221*00b67f09SDavid van Moolenbroek
222*00b67f09SDavid van Moolenbroek match = do_lookup_string("10.53.0.1",
223*00b67f09SDavid van Moolenbroek dns_geoip_country_name, "Australia");
224*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
225*00b67f09SDavid van Moolenbroek
226*00b67f09SDavid van Moolenbroek dns_test_end();
227*00b67f09SDavid van Moolenbroek }
228*00b67f09SDavid van Moolenbroek
229*00b67f09SDavid van Moolenbroek /* GeoIP country (ipv6) matching */
230*00b67f09SDavid van Moolenbroek ATF_TC(country_v6);
ATF_TC_HEAD(country_v6,tc)231*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(country_v6, tc) {
232*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "test country (ipv6) database matching");
233*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(country_v6,tc)234*00b67f09SDavid van Moolenbroek ATF_TC_BODY(country_v6, tc) {
235*00b67f09SDavid van Moolenbroek isc_result_t result;
236*00b67f09SDavid van Moolenbroek isc_boolean_t match;
237*00b67f09SDavid van Moolenbroek
238*00b67f09SDavid van Moolenbroek UNUSED(tc);
239*00b67f09SDavid van Moolenbroek
240*00b67f09SDavid van Moolenbroek result = dns_test_begin(NULL, ISC_TRUE);
241*00b67f09SDavid van Moolenbroek ATF_REQUIRE(result == ISC_R_SUCCESS);
242*00b67f09SDavid van Moolenbroek
243*00b67f09SDavid van Moolenbroek /* Use databases from the geoip system test */
244*00b67f09SDavid van Moolenbroek load_geoip(TEST_GEOIP_DATA);
245*00b67f09SDavid van Moolenbroek
246*00b67f09SDavid van Moolenbroek if (geoip.country_v6 == NULL) {
247*00b67f09SDavid van Moolenbroek dns_test_end();
248*00b67f09SDavid van Moolenbroek atf_tc_skip("Database not available");
249*00b67f09SDavid van Moolenbroek }
250*00b67f09SDavid van Moolenbroek
251*00b67f09SDavid van Moolenbroek match = do_lookup_string_v6("fd92:7065:b8e:ffff::1",
252*00b67f09SDavid van Moolenbroek dns_geoip_country_code, "AU");
253*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
254*00b67f09SDavid van Moolenbroek
255*00b67f09SDavid van Moolenbroek match = do_lookup_string_v6("fd92:7065:b8e:ffff::1",
256*00b67f09SDavid van Moolenbroek dns_geoip_country_code3, "AUS");
257*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
258*00b67f09SDavid van Moolenbroek
259*00b67f09SDavid van Moolenbroek match = do_lookup_string_v6("fd92:7065:b8e:ffff::1",
260*00b67f09SDavid van Moolenbroek dns_geoip_country_name, "Australia");
261*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
262*00b67f09SDavid van Moolenbroek
263*00b67f09SDavid van Moolenbroek dns_test_end();
264*00b67f09SDavid van Moolenbroek }
265*00b67f09SDavid van Moolenbroek
266*00b67f09SDavid van Moolenbroek /* GeoIP city (ipv4) matching */
267*00b67f09SDavid van Moolenbroek ATF_TC(city);
ATF_TC_HEAD(city,tc)268*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(city, tc) {
269*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "test city database matching");
270*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(city,tc)271*00b67f09SDavid van Moolenbroek ATF_TC_BODY(city, tc) {
272*00b67f09SDavid van Moolenbroek isc_result_t result;
273*00b67f09SDavid van Moolenbroek isc_boolean_t match;
274*00b67f09SDavid van Moolenbroek
275*00b67f09SDavid van Moolenbroek UNUSED(tc);
276*00b67f09SDavid van Moolenbroek
277*00b67f09SDavid van Moolenbroek result = dns_test_begin(NULL, ISC_TRUE);
278*00b67f09SDavid van Moolenbroek ATF_REQUIRE(result == ISC_R_SUCCESS);
279*00b67f09SDavid van Moolenbroek
280*00b67f09SDavid van Moolenbroek /* Use databases from the geoip system test */
281*00b67f09SDavid van Moolenbroek load_geoip(TEST_GEOIP_DATA);
282*00b67f09SDavid van Moolenbroek
283*00b67f09SDavid van Moolenbroek if (geoip.city_v4 == NULL) {
284*00b67f09SDavid van Moolenbroek dns_test_end();
285*00b67f09SDavid van Moolenbroek atf_tc_skip("Database not available");
286*00b67f09SDavid van Moolenbroek }
287*00b67f09SDavid van Moolenbroek
288*00b67f09SDavid van Moolenbroek match = do_lookup_string("10.53.0.1",
289*00b67f09SDavid van Moolenbroek dns_geoip_city_continentcode, "NA");
290*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
291*00b67f09SDavid van Moolenbroek
292*00b67f09SDavid van Moolenbroek match = do_lookup_string("10.53.0.1",
293*00b67f09SDavid van Moolenbroek dns_geoip_city_countrycode, "US");
294*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
295*00b67f09SDavid van Moolenbroek
296*00b67f09SDavid van Moolenbroek match = do_lookup_string("10.53.0.1",
297*00b67f09SDavid van Moolenbroek dns_geoip_city_countrycode3, "USA");
298*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
299*00b67f09SDavid van Moolenbroek
300*00b67f09SDavid van Moolenbroek match = do_lookup_string("10.53.0.1",
301*00b67f09SDavid van Moolenbroek dns_geoip_city_countryname, "United States");
302*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
303*00b67f09SDavid van Moolenbroek
304*00b67f09SDavid van Moolenbroek match = do_lookup_string("10.53.0.1",
305*00b67f09SDavid van Moolenbroek dns_geoip_city_region, "CA");
306*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
307*00b67f09SDavid van Moolenbroek
308*00b67f09SDavid van Moolenbroek match = do_lookup_string("10.53.0.1",
309*00b67f09SDavid van Moolenbroek dns_geoip_city_regionname, "California");
310*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
311*00b67f09SDavid van Moolenbroek
312*00b67f09SDavid van Moolenbroek match = do_lookup_string("10.53.0.1",
313*00b67f09SDavid van Moolenbroek dns_geoip_city_name, "Redwood City");
314*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
315*00b67f09SDavid van Moolenbroek
316*00b67f09SDavid van Moolenbroek match = do_lookup_string("10.53.0.1",
317*00b67f09SDavid van Moolenbroek dns_geoip_city_postalcode, "94063");
318*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
319*00b67f09SDavid van Moolenbroek
320*00b67f09SDavid van Moolenbroek match = do_lookup_int("10.53.0.1", dns_geoip_city_areacode, 650);
321*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
322*00b67f09SDavid van Moolenbroek
323*00b67f09SDavid van Moolenbroek match = do_lookup_int("10.53.0.1", dns_geoip_city_metrocode, 807);
324*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
325*00b67f09SDavid van Moolenbroek
326*00b67f09SDavid van Moolenbroek dns_test_end();
327*00b67f09SDavid van Moolenbroek }
328*00b67f09SDavid van Moolenbroek
329*00b67f09SDavid van Moolenbroek /* GeoIP city (ipv6) matching */
330*00b67f09SDavid van Moolenbroek ATF_TC(city_v6);
ATF_TC_HEAD(city_v6,tc)331*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(city_v6, tc) {
332*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "test city (ipv6) database matching");
333*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(city_v6,tc)334*00b67f09SDavid van Moolenbroek ATF_TC_BODY(city_v6, tc) {
335*00b67f09SDavid van Moolenbroek isc_result_t result;
336*00b67f09SDavid van Moolenbroek isc_boolean_t match;
337*00b67f09SDavid van Moolenbroek
338*00b67f09SDavid van Moolenbroek UNUSED(tc);
339*00b67f09SDavid van Moolenbroek
340*00b67f09SDavid van Moolenbroek result = dns_test_begin(NULL, ISC_TRUE);
341*00b67f09SDavid van Moolenbroek ATF_REQUIRE(result == ISC_R_SUCCESS);
342*00b67f09SDavid van Moolenbroek
343*00b67f09SDavid van Moolenbroek /* Use databases from the geoip system test */
344*00b67f09SDavid van Moolenbroek load_geoip(TEST_GEOIP_DATA);
345*00b67f09SDavid van Moolenbroek
346*00b67f09SDavid van Moolenbroek if (geoip.city_v6 == NULL) {
347*00b67f09SDavid van Moolenbroek dns_test_end();
348*00b67f09SDavid van Moolenbroek atf_tc_skip("Database not available");
349*00b67f09SDavid van Moolenbroek }
350*00b67f09SDavid van Moolenbroek
351*00b67f09SDavid van Moolenbroek match = do_lookup_string_v6("fd92:7065:b8e:ffff::1",
352*00b67f09SDavid van Moolenbroek dns_geoip_city_continentcode, "NA");
353*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
354*00b67f09SDavid van Moolenbroek
355*00b67f09SDavid van Moolenbroek match = do_lookup_string_v6("fd92:7065:b8e:ffff::1",
356*00b67f09SDavid van Moolenbroek dns_geoip_city_countrycode, "US");
357*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
358*00b67f09SDavid van Moolenbroek
359*00b67f09SDavid van Moolenbroek match = do_lookup_string_v6("fd92:7065:b8e:ffff::1",
360*00b67f09SDavid van Moolenbroek dns_geoip_city_countrycode3, "USA");
361*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
362*00b67f09SDavid van Moolenbroek
363*00b67f09SDavid van Moolenbroek match = do_lookup_string_v6("fd92:7065:b8e:ffff::1",
364*00b67f09SDavid van Moolenbroek dns_geoip_city_countryname,
365*00b67f09SDavid van Moolenbroek "United States");
366*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
367*00b67f09SDavid van Moolenbroek
368*00b67f09SDavid van Moolenbroek match = do_lookup_string_v6("fd92:7065:b8e:ffff::1",
369*00b67f09SDavid van Moolenbroek dns_geoip_city_region, "CA");
370*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
371*00b67f09SDavid van Moolenbroek
372*00b67f09SDavid van Moolenbroek match = do_lookup_string_v6("fd92:7065:b8e:ffff::1",
373*00b67f09SDavid van Moolenbroek dns_geoip_city_regionname, "California");
374*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
375*00b67f09SDavid van Moolenbroek
376*00b67f09SDavid van Moolenbroek match = do_lookup_string_v6("fd92:7065:b8e:ffff::1",
377*00b67f09SDavid van Moolenbroek dns_geoip_city_name, "Redwood City");
378*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
379*00b67f09SDavid van Moolenbroek
380*00b67f09SDavid van Moolenbroek match = do_lookup_string_v6("fd92:7065:b8e:ffff::1",
381*00b67f09SDavid van Moolenbroek dns_geoip_city_postalcode, "94063");
382*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
383*00b67f09SDavid van Moolenbroek
384*00b67f09SDavid van Moolenbroek dns_test_end();
385*00b67f09SDavid van Moolenbroek }
386*00b67f09SDavid van Moolenbroek
387*00b67f09SDavid van Moolenbroek
388*00b67f09SDavid van Moolenbroek /* GeoIP region matching */
389*00b67f09SDavid van Moolenbroek ATF_TC(region);
ATF_TC_HEAD(region,tc)390*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(region, tc) {
391*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "test region database matching");
392*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(region,tc)393*00b67f09SDavid van Moolenbroek ATF_TC_BODY(region, tc) {
394*00b67f09SDavid van Moolenbroek isc_result_t result;
395*00b67f09SDavid van Moolenbroek isc_boolean_t match;
396*00b67f09SDavid van Moolenbroek
397*00b67f09SDavid van Moolenbroek UNUSED(tc);
398*00b67f09SDavid van Moolenbroek
399*00b67f09SDavid van Moolenbroek result = dns_test_begin(NULL, ISC_TRUE);
400*00b67f09SDavid van Moolenbroek ATF_REQUIRE(result == ISC_R_SUCCESS);
401*00b67f09SDavid van Moolenbroek
402*00b67f09SDavid van Moolenbroek /* Use databases from the geoip system test */
403*00b67f09SDavid van Moolenbroek load_geoip(TEST_GEOIP_DATA);
404*00b67f09SDavid van Moolenbroek
405*00b67f09SDavid van Moolenbroek if (geoip.region == NULL) {
406*00b67f09SDavid van Moolenbroek dns_test_end();
407*00b67f09SDavid van Moolenbroek atf_tc_skip("Database not available");
408*00b67f09SDavid van Moolenbroek }
409*00b67f09SDavid van Moolenbroek
410*00b67f09SDavid van Moolenbroek match = do_lookup_string("10.53.0.1",
411*00b67f09SDavid van Moolenbroek dns_geoip_region_code, "CA");
412*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
413*00b67f09SDavid van Moolenbroek
414*00b67f09SDavid van Moolenbroek match = do_lookup_string("10.53.0.1",
415*00b67f09SDavid van Moolenbroek dns_geoip_region_name, "California");
416*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
417*00b67f09SDavid van Moolenbroek
418*00b67f09SDavid van Moolenbroek match = do_lookup_string("10.53.0.1",
419*00b67f09SDavid van Moolenbroek dns_geoip_region_countrycode, "US");
420*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
421*00b67f09SDavid van Moolenbroek
422*00b67f09SDavid van Moolenbroek dns_test_end();
423*00b67f09SDavid van Moolenbroek }
424*00b67f09SDavid van Moolenbroek
425*00b67f09SDavid van Moolenbroek /*
426*00b67f09SDavid van Moolenbroek * GeoIP best-database matching
427*00b67f09SDavid van Moolenbroek * (With no specified databse and a city database available, answers
428*00b67f09SDavid van Moolenbroek * should come from city database. With city database unavailable, region
429*00b67f09SDavid van Moolenbroek * database. Region database unavailable, country database.)
430*00b67f09SDavid van Moolenbroek */
431*00b67f09SDavid van Moolenbroek ATF_TC(best);
ATF_TC_HEAD(best,tc)432*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(best, tc) {
433*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "test best database matching");
434*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(best,tc)435*00b67f09SDavid van Moolenbroek ATF_TC_BODY(best, tc) {
436*00b67f09SDavid van Moolenbroek isc_result_t result;
437*00b67f09SDavid van Moolenbroek isc_boolean_t match;
438*00b67f09SDavid van Moolenbroek
439*00b67f09SDavid van Moolenbroek UNUSED(tc);
440*00b67f09SDavid van Moolenbroek
441*00b67f09SDavid van Moolenbroek result = dns_test_begin(NULL, ISC_TRUE);
442*00b67f09SDavid van Moolenbroek ATF_REQUIRE(result == ISC_R_SUCCESS);
443*00b67f09SDavid van Moolenbroek
444*00b67f09SDavid van Moolenbroek /* Use databases from the geoip system test */
445*00b67f09SDavid van Moolenbroek load_geoip(TEST_GEOIP_DATA);
446*00b67f09SDavid van Moolenbroek
447*00b67f09SDavid van Moolenbroek if (geoip.region == NULL) {
448*00b67f09SDavid van Moolenbroek dns_test_end();
449*00b67f09SDavid van Moolenbroek atf_tc_skip("Database not available");
450*00b67f09SDavid van Moolenbroek }
451*00b67f09SDavid van Moolenbroek
452*00b67f09SDavid van Moolenbroek match = do_lookup_string("10.53.0.4",
453*00b67f09SDavid van Moolenbroek dns_geoip_countrycode, "US");
454*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
455*00b67f09SDavid van Moolenbroek
456*00b67f09SDavid van Moolenbroek match = do_lookup_string("10.53.0.4",
457*00b67f09SDavid van Moolenbroek dns_geoip_countrycode3, "USA");
458*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
459*00b67f09SDavid van Moolenbroek
460*00b67f09SDavid van Moolenbroek match = do_lookup_string("10.53.0.4",
461*00b67f09SDavid van Moolenbroek dns_geoip_countryname, "United States");
462*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
463*00b67f09SDavid van Moolenbroek
464*00b67f09SDavid van Moolenbroek match = do_lookup_string("10.53.0.4",
465*00b67f09SDavid van Moolenbroek dns_geoip_regionname, "Virginia");
466*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
467*00b67f09SDavid van Moolenbroek
468*00b67f09SDavid van Moolenbroek match = do_lookup_string("10.53.0.4",
469*00b67f09SDavid van Moolenbroek dns_geoip_region, "VA");
470*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
471*00b67f09SDavid van Moolenbroek
472*00b67f09SDavid van Moolenbroek GeoIP_delete(geoip.city_v4);
473*00b67f09SDavid van Moolenbroek geoip.city_v4 = NULL;
474*00b67f09SDavid van Moolenbroek
475*00b67f09SDavid van Moolenbroek match = do_lookup_string("10.53.0.4",
476*00b67f09SDavid van Moolenbroek dns_geoip_countrycode, "AU");
477*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
478*00b67f09SDavid van Moolenbroek
479*00b67f09SDavid van Moolenbroek /*
480*00b67f09SDavid van Moolenbroek * Note, region doesn't support code3 or countryname, so
481*00b67f09SDavid van Moolenbroek * the next two would be answered from the country database instead
482*00b67f09SDavid van Moolenbroek */
483*00b67f09SDavid van Moolenbroek match = do_lookup_string("10.53.0.4",
484*00b67f09SDavid van Moolenbroek dns_geoip_countrycode3, "CAN");
485*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
486*00b67f09SDavid van Moolenbroek
487*00b67f09SDavid van Moolenbroek match = do_lookup_string("10.53.0.4",
488*00b67f09SDavid van Moolenbroek dns_geoip_countryname, "Canada");
489*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
490*00b67f09SDavid van Moolenbroek
491*00b67f09SDavid van Moolenbroek GeoIP_delete(geoip.region);
492*00b67f09SDavid van Moolenbroek geoip.region = NULL;
493*00b67f09SDavid van Moolenbroek
494*00b67f09SDavid van Moolenbroek match = do_lookup_string("10.53.0.4",
495*00b67f09SDavid van Moolenbroek dns_geoip_countrycode, "CA");
496*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
497*00b67f09SDavid van Moolenbroek
498*00b67f09SDavid van Moolenbroek match = do_lookup_string("10.53.0.4",
499*00b67f09SDavid van Moolenbroek dns_geoip_countrycode3, "CAN");
500*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
501*00b67f09SDavid van Moolenbroek
502*00b67f09SDavid van Moolenbroek match = do_lookup_string("10.53.0.4",
503*00b67f09SDavid van Moolenbroek dns_geoip_countryname, "Canada");
504*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
505*00b67f09SDavid van Moolenbroek
506*00b67f09SDavid van Moolenbroek dns_test_end();
507*00b67f09SDavid van Moolenbroek }
508*00b67f09SDavid van Moolenbroek
509*00b67f09SDavid van Moolenbroek
510*00b67f09SDavid van Moolenbroek /* GeoIP asnum matching */
511*00b67f09SDavid van Moolenbroek ATF_TC(asnum);
ATF_TC_HEAD(asnum,tc)512*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(asnum, tc) {
513*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "test asnum database matching");
514*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(asnum,tc)515*00b67f09SDavid van Moolenbroek ATF_TC_BODY(asnum, tc) {
516*00b67f09SDavid van Moolenbroek isc_result_t result;
517*00b67f09SDavid van Moolenbroek isc_boolean_t match;
518*00b67f09SDavid van Moolenbroek
519*00b67f09SDavid van Moolenbroek UNUSED(tc);
520*00b67f09SDavid van Moolenbroek
521*00b67f09SDavid van Moolenbroek result = dns_test_begin(NULL, ISC_TRUE);
522*00b67f09SDavid van Moolenbroek ATF_REQUIRE(result == ISC_R_SUCCESS);
523*00b67f09SDavid van Moolenbroek
524*00b67f09SDavid van Moolenbroek /* Use databases from the geoip system test */
525*00b67f09SDavid van Moolenbroek load_geoip(TEST_GEOIP_DATA);
526*00b67f09SDavid van Moolenbroek
527*00b67f09SDavid van Moolenbroek if (geoip.as == NULL) {
528*00b67f09SDavid van Moolenbroek dns_test_end();
529*00b67f09SDavid van Moolenbroek atf_tc_skip("Database not available");
530*00b67f09SDavid van Moolenbroek }
531*00b67f09SDavid van Moolenbroek
532*00b67f09SDavid van Moolenbroek
533*00b67f09SDavid van Moolenbroek match = do_lookup_string("10.53.0.3", dns_geoip_as_asnum,
534*00b67f09SDavid van Moolenbroek "AS100003 Three Network Labs");
535*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
536*00b67f09SDavid van Moolenbroek
537*00b67f09SDavid van Moolenbroek dns_test_end();
538*00b67f09SDavid van Moolenbroek }
539*00b67f09SDavid van Moolenbroek
540*00b67f09SDavid van Moolenbroek /* GeoIP isp matching */
541*00b67f09SDavid van Moolenbroek ATF_TC(isp);
ATF_TC_HEAD(isp,tc)542*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(isp, tc) {
543*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "test isp database matching");
544*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(isp,tc)545*00b67f09SDavid van Moolenbroek ATF_TC_BODY(isp, tc) {
546*00b67f09SDavid van Moolenbroek isc_result_t result;
547*00b67f09SDavid van Moolenbroek isc_boolean_t match;
548*00b67f09SDavid van Moolenbroek
549*00b67f09SDavid van Moolenbroek UNUSED(tc);
550*00b67f09SDavid van Moolenbroek
551*00b67f09SDavid van Moolenbroek result = dns_test_begin(NULL, ISC_TRUE);
552*00b67f09SDavid van Moolenbroek ATF_REQUIRE(result == ISC_R_SUCCESS);
553*00b67f09SDavid van Moolenbroek
554*00b67f09SDavid van Moolenbroek /* Use databases from the geoip system test */
555*00b67f09SDavid van Moolenbroek load_geoip(TEST_GEOIP_DATA);
556*00b67f09SDavid van Moolenbroek
557*00b67f09SDavid van Moolenbroek if (geoip.isp == NULL) {
558*00b67f09SDavid van Moolenbroek dns_test_end();
559*00b67f09SDavid van Moolenbroek atf_tc_skip("Database not available");
560*00b67f09SDavid van Moolenbroek }
561*00b67f09SDavid van Moolenbroek
562*00b67f09SDavid van Moolenbroek match = do_lookup_string("10.53.0.1", dns_geoip_isp_name,
563*00b67f09SDavid van Moolenbroek "One Systems, Inc.");
564*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
565*00b67f09SDavid van Moolenbroek
566*00b67f09SDavid van Moolenbroek dns_test_end();
567*00b67f09SDavid van Moolenbroek }
568*00b67f09SDavid van Moolenbroek
569*00b67f09SDavid van Moolenbroek /* GeoIP org matching */
570*00b67f09SDavid van Moolenbroek ATF_TC(org);
ATF_TC_HEAD(org,tc)571*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(org, tc) {
572*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "test org database matching");
573*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(org,tc)574*00b67f09SDavid van Moolenbroek ATF_TC_BODY(org, tc) {
575*00b67f09SDavid van Moolenbroek isc_result_t result;
576*00b67f09SDavid van Moolenbroek isc_boolean_t match;
577*00b67f09SDavid van Moolenbroek
578*00b67f09SDavid van Moolenbroek UNUSED(tc);
579*00b67f09SDavid van Moolenbroek
580*00b67f09SDavid van Moolenbroek result = dns_test_begin(NULL, ISC_TRUE);
581*00b67f09SDavid van Moolenbroek ATF_REQUIRE(result == ISC_R_SUCCESS);
582*00b67f09SDavid van Moolenbroek
583*00b67f09SDavid van Moolenbroek /* Use databases from the geoip system test */
584*00b67f09SDavid van Moolenbroek load_geoip(TEST_GEOIP_DATA);
585*00b67f09SDavid van Moolenbroek
586*00b67f09SDavid van Moolenbroek if (geoip.org == NULL) {
587*00b67f09SDavid van Moolenbroek dns_test_end();
588*00b67f09SDavid van Moolenbroek atf_tc_skip("Database not available");
589*00b67f09SDavid van Moolenbroek }
590*00b67f09SDavid van Moolenbroek
591*00b67f09SDavid van Moolenbroek match = do_lookup_string("10.53.0.2", dns_geoip_org_name,
592*00b67f09SDavid van Moolenbroek "Two Technology Ltd.");
593*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
594*00b67f09SDavid van Moolenbroek
595*00b67f09SDavid van Moolenbroek dns_test_end();
596*00b67f09SDavid van Moolenbroek }
597*00b67f09SDavid van Moolenbroek
598*00b67f09SDavid van Moolenbroek /* GeoIP domain matching */
599*00b67f09SDavid van Moolenbroek ATF_TC(domain);
ATF_TC_HEAD(domain,tc)600*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(domain, tc) {
601*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "test domain database matching");
602*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(domain,tc)603*00b67f09SDavid van Moolenbroek ATF_TC_BODY(domain, tc) {
604*00b67f09SDavid van Moolenbroek isc_result_t result;
605*00b67f09SDavid van Moolenbroek isc_boolean_t match;
606*00b67f09SDavid van Moolenbroek
607*00b67f09SDavid van Moolenbroek UNUSED(tc);
608*00b67f09SDavid van Moolenbroek
609*00b67f09SDavid van Moolenbroek result = dns_test_begin(NULL, ISC_TRUE);
610*00b67f09SDavid van Moolenbroek ATF_REQUIRE(result == ISC_R_SUCCESS);
611*00b67f09SDavid van Moolenbroek
612*00b67f09SDavid van Moolenbroek /* Use databases from the geoip system test */
613*00b67f09SDavid van Moolenbroek load_geoip(TEST_GEOIP_DATA);
614*00b67f09SDavid van Moolenbroek
615*00b67f09SDavid van Moolenbroek if (geoip.domain == NULL) {
616*00b67f09SDavid van Moolenbroek dns_test_end();
617*00b67f09SDavid van Moolenbroek atf_tc_skip("Database not available");
618*00b67f09SDavid van Moolenbroek }
619*00b67f09SDavid van Moolenbroek
620*00b67f09SDavid van Moolenbroek match = do_lookup_string("10.53.0.4",
621*00b67f09SDavid van Moolenbroek dns_geoip_domain_name, "four.com");
622*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
623*00b67f09SDavid van Moolenbroek
624*00b67f09SDavid van Moolenbroek dns_test_end();
625*00b67f09SDavid van Moolenbroek }
626*00b67f09SDavid van Moolenbroek
627*00b67f09SDavid van Moolenbroek /* GeoIP netspeed matching */
628*00b67f09SDavid van Moolenbroek ATF_TC(netspeed);
ATF_TC_HEAD(netspeed,tc)629*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(netspeed, tc) {
630*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "test netspeed database matching");
631*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(netspeed,tc)632*00b67f09SDavid van Moolenbroek ATF_TC_BODY(netspeed, tc) {
633*00b67f09SDavid van Moolenbroek isc_result_t result;
634*00b67f09SDavid van Moolenbroek isc_boolean_t match;
635*00b67f09SDavid van Moolenbroek
636*00b67f09SDavid van Moolenbroek UNUSED(tc);
637*00b67f09SDavid van Moolenbroek
638*00b67f09SDavid van Moolenbroek result = dns_test_begin(NULL, ISC_TRUE);
639*00b67f09SDavid van Moolenbroek ATF_REQUIRE(result == ISC_R_SUCCESS);
640*00b67f09SDavid van Moolenbroek
641*00b67f09SDavid van Moolenbroek /* Use databases from the geoip system test */
642*00b67f09SDavid van Moolenbroek load_geoip(TEST_GEOIP_DATA);
643*00b67f09SDavid van Moolenbroek
644*00b67f09SDavid van Moolenbroek if (geoip.netspeed == NULL) {
645*00b67f09SDavid van Moolenbroek dns_test_end();
646*00b67f09SDavid van Moolenbroek atf_tc_skip("Database not available");
647*00b67f09SDavid van Moolenbroek }
648*00b67f09SDavid van Moolenbroek
649*00b67f09SDavid van Moolenbroek match = do_lookup_int("10.53.0.1", dns_geoip_netspeed_id, 0);
650*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
651*00b67f09SDavid van Moolenbroek
652*00b67f09SDavid van Moolenbroek match = do_lookup_int("10.53.0.2", dns_geoip_netspeed_id, 1);
653*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
654*00b67f09SDavid van Moolenbroek
655*00b67f09SDavid van Moolenbroek match = do_lookup_int("10.53.0.3", dns_geoip_netspeed_id, 2);
656*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
657*00b67f09SDavid van Moolenbroek
658*00b67f09SDavid van Moolenbroek match = do_lookup_int("10.53.0.4", dns_geoip_netspeed_id, 3);
659*00b67f09SDavid van Moolenbroek ATF_CHECK(match);
660*00b67f09SDavid van Moolenbroek
661*00b67f09SDavid van Moolenbroek dns_test_end();
662*00b67f09SDavid van Moolenbroek }
663*00b67f09SDavid van Moolenbroek #else
664*00b67f09SDavid van Moolenbroek ATF_TC(untested);
ATF_TC_HEAD(untested,tc)665*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(untested, tc) {
666*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "skipping geoip test");
667*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(untested,tc)668*00b67f09SDavid van Moolenbroek ATF_TC_BODY(untested, tc) {
669*00b67f09SDavid van Moolenbroek UNUSED(tc);
670*00b67f09SDavid van Moolenbroek atf_tc_skip("GeoIP not available");
671*00b67f09SDavid van Moolenbroek }
672*00b67f09SDavid van Moolenbroek #endif
673*00b67f09SDavid van Moolenbroek
674*00b67f09SDavid van Moolenbroek /*
675*00b67f09SDavid van Moolenbroek * Main
676*00b67f09SDavid van Moolenbroek */
ATF_TP_ADD_TCS(tp)677*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TCS(tp) {
678*00b67f09SDavid van Moolenbroek #ifdef HAVE_GEOIP
679*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, country);
680*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, country_v6);
681*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, city);
682*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, city_v6);
683*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, region);
684*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, best);
685*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, asnum);
686*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, isp);
687*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, org);
688*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, domain);
689*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, netspeed);
690*00b67f09SDavid van Moolenbroek #else
691*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, untested);
692*00b67f09SDavid van Moolenbroek #endif
693*00b67f09SDavid van Moolenbroek
694*00b67f09SDavid van Moolenbroek return (atf_no_error());
695*00b67f09SDavid van Moolenbroek }
696*00b67f09SDavid van Moolenbroek
697