annotate stream_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 3fc6817cd84a
children f3ba4c74de31
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1062
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
2
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
3 # (C) Andrey Zelenkov
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
5
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
6 # Tests for stream geoip module.
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
7
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
8 ###############################################################################
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
9
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
10 use warnings;
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
11 use strict;
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
12
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
13 use Test::More;
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
14
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
15 use Socket qw/ $CRLF /;
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
16
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
17 BEGIN { use FindBin; chdir($FindBin::Bin); }
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
18
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
19 use lib 'lib';
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
20 use Test::Nginx;
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
21 use Test::Nginx::Stream qw/ stream /;
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
22
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
23 ###############################################################################
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
24
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
25 select STDERR; $| = 1;
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
26 select STDOUT; $| = 1;
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
27
1170
cf14cfe9ec8c Tests: dropped obsolete ipv6 prerequisite.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1064
diff changeset
28 my $t = Test::Nginx->new()->has(qw/stream stream_geoip stream_return/)
1064
6508aa1cf9cb Tests: skip geoip tests on hosts without GeoIP IPv6 support.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1062
diff changeset
29 ->has('stream_realip');
1062
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
30
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
31 $t->write_file_expand('nginx.conf', <<'EOF');
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
32
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
33 %%TEST_GLOBALS%%
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
34
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
35 daemon off;
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
36
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
37 events {
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
38 }
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
39
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
40 stream {
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
41 set_real_ip_from 127.0.0.1/32;
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
42
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
43 geoip_country %%TESTDIR%%/country.dat;
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
44 geoip_city %%TESTDIR%%/city.dat;
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
45 geoip_org %%TESTDIR%%/org.dat;
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
46
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
47 server {
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
48 listen 127.0.0.1:8080 proxy_protocol;
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
49 return "country_code:$geoip_country_code
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
50 country_code3:$geoip_country_code3
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
51 country_name:$geoip_country_name
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
52
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
53 area_code:$geoip_area_code
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
54 city_continent_code:$geoip_city_continent_code
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
55 city_country_code:$geoip_city_country_code
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
56 city_country_code3:$geoip_city_country_code3
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
57 city_country_name:$geoip_city_country_name
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
58 dma_code:$geoip_dma_code
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
59 latitude:$geoip_latitude
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
60 longitude:$geoip_longitude
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
61 region:$geoip_region
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
62 region_name:$geoip_region_name
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
63 city:$geoip_city
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
64 postal_code:$geoip_postal_code
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
65
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
66 org:$geoip_org";
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
67 }
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
68 }
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
69
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
70 EOF
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
71
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
72 my $d = $t->testdir();
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
73
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
74 # country database:
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
75 #
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
76 # "10.0.0.1","10.0.0.1","RU","Russian Federation"
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
77 # "2001:db8::","2001:db8::","US","United States"
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
78
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
79 my $data = '';
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
80
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
81 for my $i (0 .. 156) {
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
82 # skip to offset 32 if 1st bit set in ipv6 address wins
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
83 $data .= pack_node($i + 1) . pack_node(32), next if $i == 2;
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
84 # otherwise default to RU
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
85 $data .= pack_node(0xffffb9) . pack_node(0xffff00), next if $i == 31;
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
86 # continue checking bits set in ipv6 address
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
87 $data .= pack_node(0xffff00) . pack_node($i + 1), next
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
88 if grep $_ == $i, (44, 49, 50, 52, 53, 55, 56, 57);
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
89 # last bit set in ipv6 address
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
90 $data .= pack_node(0xffffe1) . pack_node(0xffff00), next if $i == 156;
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
91 $data .= pack_node($i + 1) . pack_node(0xffff00);
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
92 }
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
93
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
94 $data .= chr(0x00) x 3;
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
95 $data .= chr(0xFF) x 3;
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
96 $data .= chr(12);
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
97
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
98 $t->write_file('country.dat', $data);
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
99
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
100 # city database:
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
101 #
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
102 # "167772161","167772161","RU","48","Moscow","119034","55.7543",37.6202",,
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
103
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
104 $data = '';
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
105
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
106 for my $i (0 .. 31) {
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
107 $data .= pack_node(32) . pack_node($i + 1), next if $i == 4 or $i == 6;
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
108 $data .= pack_node(32) . pack_node($i + 2), next if $i == 31;
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
109 $data .= pack_node($i + 1) . pack_node(32);
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
110 }
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
111
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
112 $data .= chr(42);
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
113 $data .= chr(185);
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
114 $data .= pack('Z*', 48);
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
115 $data .= pack('Z*', 'Moscow');
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
116 $data .= pack('Z*', 119034);
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
117 $data .= pack_node(int((55.7543 + 180) * 10000));
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
118 $data .= pack_node(int((37.6202 + 180) * 10000));
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
119 $data .= chr(0) x 3;
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
120 $data .= chr(0xFF) x 3;
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
121 $data .= chr(2);
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
122 $data .= pack_node(32);
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
123
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
124 $t->write_file('city.dat', $data);
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
125
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
126 # organization database:
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
127 #
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
128 # "167772161","167772161","Nginx"
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
129
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
130 $data = '';
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
131
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
132 for my $i (0 .. 31) {
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
133 $data .= pack_org(32) . pack_org($i + 1), next if $i == 4 or $i == 6;
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
134 $data .= pack_org(32) . pack_org($i + 2), next if $i == 31;
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
135 $data .= pack_org($i + 1) . pack_org(32);
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
136 }
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
137
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
138 $data .= chr(42);
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
139 $data .= pack('Z*', 'Nginx');
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
140 $data .= chr(0xFF) x 3;
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
141 $data .= chr(5);
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
142 $data .= pack_node(32);
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
143
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
144 $t->write_file('org.dat', $data);
1064
6508aa1cf9cb Tests: skip geoip tests on hosts without GeoIP IPv6 support.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1062
diff changeset
145 $t->try_run('no inet6 support')->plan(20);
1062
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
146
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
147 ###############################################################################
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
148
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
149 my %data = stream_pp('10.0.0.1') =~ /(\w+):(.*)/g;
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
150 is($data{country_code}, 'RU', 'geoip country code');
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
151 is($data{country_code3}, 'RUS', 'geoip country code 3');
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
152 is($data{country_name}, 'Russian Federation', 'geoip country name');
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
153
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
154 is($data{area_code}, 0, 'geoip area code');
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
155 is($data{city_continent_code}, 'EU', 'geoip city continent code');
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
156 is($data{city_country_code}, 'RU', 'geoip city country code');
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
157 is($data{city_country_code3}, 'RUS', 'geoip city country code 3');
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
158 is($data{city_country_name}, 'Russian Federation', 'geoip city country name');
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
159 is($data{dma_code}, 0, 'geoip dma code');
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
160 is($data{latitude}, 55.7543, 'geoip latitude');
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
161 is($data{longitude}, 37.6202, 'geoip longitude');
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
162 is($data{region}, 48, 'geoip region');
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
163 is($data{region_name}, 'Moscow City', 'geoip region name');
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
164 is($data{city}, 'Moscow', 'geoip city');
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
165 is($data{postal_code}, 119034, 'geoip postal code');
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
166
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
167 is($data{org}, 'Nginx', 'geoip org');
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
168
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
169 like(stream_pp('::ffff:10.0.0.1'), qr/org:Nginx/, 'geoip ipv6 ipv4-mapped');
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
170
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
171 %data = stream_pp('2001:db8::') =~ /(\w+):(.*)/g;
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
172 is($data{country_code}, 'US', 'geoip ipv6 country code');
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
173 is($data{country_code3}, 'USA', 'geoip ipv6 country code 3');
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
174 is($data{country_name}, 'United States', 'geoip ipv6 country name');
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
175
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
176 ###############################################################################
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
177
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
178 sub stream_pp {
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
179 my ($ip) = @_;
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
180 my $type = ($ip =~ ':' ? 'TCP6' : 'TCP4');
1235
3fc6817cd84a Tests: explicit peer port in stream tests now required.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1170
diff changeset
181 return stream('127.0.0.1:' . port(8080))
3fc6817cd84a Tests: explicit peer port in stream tests now required.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1170
diff changeset
182 ->io("PROXY $type $ip 127.0.0.1 8080 8080${CRLF}");
1062
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
183 }
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
184
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
185 sub pack_node {
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
186 substr pack('V', shift), 0, 3;
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
187 }
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
188
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
189 sub pack_org {
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
190 pack('V', shift);
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
191 }
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
192
f1cc64e4e67d Tests: basic tests for stream geoip module.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
193 ###############################################################################