annotate geoip.t @ 1427:eb1d883305ea

Tests: avoid edge cases in upstream random two test. Unavailable servers contribute to the number of attempts, if selected, before the balancer would fall back to the default round-robin method. This means that it's quite possible to get server with more connections. To facilitate with selecting two alive servers, down server was removed from the upstream configuration at the cost of slightly worse coverage.
author Sergey Kandaurov <pluknet@nginx.com>
date Thu, 10 Jan 2019 17:42:34 +0300
parents cf14cfe9ec8c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1061
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
2
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
3 # (C) Andrey Zelenkov
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
5
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
6 # Tests for geoip module.
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
7
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
8 ###############################################################################
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
9
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
10 use warnings;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
11 use strict;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
12
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
13 use Test::More;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
14
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
16
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
17 use lib 'lib';
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
18 use Test::Nginx;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
19
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
20 ###############################################################################
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
21
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
22 select STDERR; $| = 1;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
23 select STDOUT; $| = 1;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
24
1170
cf14cfe9ec8c Tests: dropped obsolete ipv6 prerequisite.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1064
diff changeset
25 my $t = Test::Nginx->new()->has(qw/http http_geoip/)
1061
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
26 ->write_file_expand('nginx.conf', <<'EOF');
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
27
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
28 %%TEST_GLOBALS%%
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
29
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
30 daemon off;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
31
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
32 events {
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
33 }
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
34
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
35 http {
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
36 %%TEST_GLOBALS_HTTP%%
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
37
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
38 geoip_proxy 127.0.0.1/32;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
39
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
40 geoip_country %%TESTDIR%%/country.dat;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
41 geoip_city %%TESTDIR%%/city.dat;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
42 geoip_org %%TESTDIR%%/org.dat;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
43
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
44 server {
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
45 listen 127.0.0.1:8080;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
46 server_name localhost;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
47
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
48 location / {
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
49 add_header X-Country-Code $geoip_country_code;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
50 add_header X-Country-Code3 $geoip_country_code3;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
51 add_header X-Country-Name $geoip_country_name;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
52
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
53 add_header X-Area-Code $geoip_area_code;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
54 add_header X-C-Continent-Code $geoip_city_continent_code;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
55 add_header X-C-Country-Code $geoip_city_country_code;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
56 add_header X-C-Country-Code3 $geoip_city_country_code3;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
57 add_header X-C-Country-Name $geoip_city_country_name;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
58 add_header X-Dma-Code $geoip_dma_code;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
59 add_header X-Latitude $geoip_latitude;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
60 add_header X-Longitude $geoip_longitude;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
61 add_header X-Region $geoip_region;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
62 add_header X-Region-Name $geoip_region_name;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
63 add_header X-City $geoip_city;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
64 add_header X-Postal-Code $geoip_postal_code;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
65
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
66 add_header X-Org $geoip_org;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
67 }
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
68 }
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
69 }
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
70
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
71 EOF
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
72
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
73 my $d = $t->testdir();
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
74
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
75 # country database:
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
76 #
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
77 # "10.0.0.1","10.0.0.1","RU","Russian Federation"
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
78 # "2001:db8::","2001:db8::","US","United States"
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
79
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
80 my $data = '';
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
81
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
82 for my $i (0 .. 156) {
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
83 # skip to offset 32 if 1st bit set in ipv6 address wins
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
84 $data .= pack_node($i + 1) . pack_node(32), next if $i == 2;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
85 # otherwise default to RU
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
86 $data .= pack_node(0xffffb9) . pack_node(0xffff00), next if $i == 31;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
87 # continue checking bits set in ipv6 address
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
88 $data .= pack_node(0xffff00) . pack_node($i + 1), next
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
89 if grep $_ == $i, (44, 49, 50, 52, 53, 55, 56, 57);
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
90 # last bit set in ipv6 address
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
91 $data .= pack_node(0xffffe1) . pack_node(0xffff00), next if $i == 156;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
92 $data .= pack_node($i + 1) . pack_node(0xffff00);
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
93 }
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
94
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
95 $data .= chr(0x00) x 3;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
96 $data .= chr(0xFF) x 3;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
97 $data .= chr(12);
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
98
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
99 $t->write_file('country.dat', $data);
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
100
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
101 # city database:
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
102 #
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
103 # "167772161","167772161","RU","48","Moscow","119034","55.7543",37.6202",,
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
104
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
105 $data = '';
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
106
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
107 for my $i (0 .. 31) {
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
108 $data .= pack_node(32) . pack_node($i + 1), next if $i == 4 or $i == 6;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
109 $data .= pack_node(32) . pack_node($i + 2), next if $i == 31;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
110 $data .= pack_node($i + 1) . pack_node(32);
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
111 }
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
112
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
113 $data .= chr(42);
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
114 $data .= chr(185);
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
115 $data .= pack('Z*', 48);
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
116 $data .= pack('Z*', 'Moscow');
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
117 $data .= pack('Z*', 119034);
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
118 $data .= pack_node(int((55.7543 + 180) * 10000));
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
119 $data .= pack_node(int((37.6202 + 180) * 10000));
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
120 $data .= chr(0) x 3;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
121 $data .= chr(0xFF) x 3;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
122 $data .= chr(2);
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
123 $data .= pack_node(32);
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
124
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
125 $t->write_file('city.dat', $data);
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
126
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
127 # organization database:
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
128 #
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
129 # "167772161","167772161","Nginx"
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
130
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
131 $data = '';
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
132
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
133 for my $i (0 .. 31) {
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
134 $data .= pack_org(32) . pack_org($i + 1), next if $i == 4 or $i == 6;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
135 $data .= pack_org(32) . pack_org($i + 2), next if $i == 31;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
136 $data .= pack_org($i + 1) . pack_org(32);
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
137 }
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
138
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
139 $data .= chr(42);
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
140 $data .= pack('Z*', 'Nginx');
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
141 $data .= chr(0xFF) x 3;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
142 $data .= chr(5);
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
143 $data .= pack_node(32);
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
144
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
145 $t->write_file('org.dat', $data);
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
146 $t->write_file('index.html', '');
1064
6508aa1cf9cb Tests: skip geoip tests on hosts without GeoIP IPv6 support.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1061
diff changeset
147 $t->try_run('no inet6 support')->plan(20);
1061
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
148
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
149 ###############################################################################
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
150
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
151 my $r = http_xff('10.0.0.1');
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
152 like($r, qr/X-Country-Code: RU/, 'geoip country code');
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
153 like($r, qr/X-Country-Code3: RUS/, 'geoip country code 3');
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
154 like($r, qr/X-Country-Name: Russian Federation/, 'geoip country name');
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
155
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
156 like($r, qr/X-Area-Code: 0/, 'geoip area code');
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
157 like($r, qr/X-C-Continent-Code: EU/, 'geoip city continent code');
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
158 like($r, qr/X-C-Country-Code: RU/, 'geoip city country code');
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
159 like($r, qr/X-C-Country-Code3: RUS/, 'geoip city country code 3');
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
160 like($r, qr/X-C-Country-Name: Russian Federation/, 'geoip city country name');
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
161 like($r, qr/X-Dma-Code: 0/, 'geoip dma code');
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
162 like($r, qr/X-Latitude: 55.7543/, 'geoip latitude');
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
163 like($r, qr/X-Longitude: 37.6202/, 'geoip longitude');
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
164 like($r, qr/X-Region: 48/, 'geoip region');
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
165 like($r, qr/X-Region-Name: Moscow City/, 'geoip region name');
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
166 like($r, qr/X-City: Moscow/, 'geoip city');
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
167 like($r, qr/X-Postal-Code: 119034/, 'geoip postal code');
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
168
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
169 like($r, qr/X-Org: Nginx/, 'geoip org');
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
170
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
171 like(http_xff('::ffff:10.0.0.1'), qr/X-Org: Nginx/, 'geoip ipv6 ipv4-mapped');
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
172
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
173 $r = http_xff('2001:db8::');
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
174 like($r, qr/X-Country-Code: US/, 'geoip ipv6 country code');
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
175 like($r, qr/X-Country-Code3: USA/, 'geoip ipv6 country code 3');
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
176 like($r, qr/X-Country-Name: United States/, 'geoip ipv6 country name');
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
177
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
178 ###############################################################################
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
179
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
180 sub http_xff {
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
181 my ($xff) = @_;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
182 return http(<<EOF);
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
183 GET / HTTP/1.0
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
184 Host: localhost
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
185 X-Forwarded-For: $xff
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
186
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
187 EOF
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
188 }
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
189
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
190 sub pack_node {
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
191 substr pack('V', shift), 0, 3;
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
192 }
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
193
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
194 sub pack_org {
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
195 pack('V', shift);
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
196 }
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
197
83357211563e Tests: basic tests for geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
198 ###############################################################################