@@ -48,261 +48,107 @@ func TestNetworksWithInvalidSearchTree(t *testing.T) {
4848 assert .Equal (t , n .Err ().Error (), "invalid search tree at 128.128.128.128/32" )
4949}
5050
51- func TestNetworksWithinV4SearchInV4Db (t * testing.T ) {
52- var network = & net.IPNet {IP : make (net.IP , 4 ), Mask : net .CIDRMask (0 , 32 )}
53-
54- for _ , recordSize := range []uint {24 , 28 , 32 } {
55- fileName := testFile (fmt .Sprintf ("MaxMind-DB-test-ipv4-%d.mmdb" , recordSize ))
56- reader , err := Open (fileName )
57- require .Nil (t , err , "unexpected error while opening database: %v" , err )
58- defer reader .Close ()
59-
60- n := reader .NetworksWithin (network )
61- var innerIPs []string
62-
63- for n .Next () {
64- record := struct {
65- IP string `maxminddb:"ip"`
66- }{}
67- network , err := n .Network (& record )
68- assert .Nil (t , err )
69- assert .Equal (t , record .IP , network .IP .String (),
70- "expected %s got %s" , record .IP , network .IP .String (),
71- )
72- innerIPs = append (innerIPs , network .String ())
73- }
51+ type networkTest struct {
52+ Network string
53+ Database string
54+ Expected []string
55+ }
7456
75- expectedIPs := []string {
57+ var tests = []networkTest {
58+ networkTest {
59+ Network : "0.0.0.0/0" ,
60+ Database : "ipv4" ,
61+ Expected : []string {
7662 "1.1.1.1/32" ,
7763 "1.1.1.2/31" ,
7864 "1.1.1.4/30" ,
7965 "1.1.1.8/29" ,
8066 "1.1.1.16/28" ,
8167 "1.1.1.32/32" ,
82- }
83-
84- assert .Equal (t , expectedIPs , innerIPs )
85- assert .Nil (t , n .Err ())
86- }
87- }
88-
89- func TestNetworksWithinSlash32V4SearchInV4Db (t * testing.T ) {
90- _ , network , err := net .ParseCIDR ("1.1.1.1/32" )
91- assert .Nil (t , err )
92-
93- for _ , recordSize := range []uint {24 , 28 , 32 } {
94- fileName := testFile (fmt .Sprintf ("MaxMind-DB-test-ipv4-%d.mmdb" , recordSize ))
95- reader , err := Open (fileName )
96- require .Nil (t , err , "unexpected error while opening database: %v" , err )
97- defer reader .Close ()
98-
99- n := reader .NetworksWithin (network )
100- var innerIPs []string
101-
102- for n .Next () {
103- record := struct {
104- IP string `maxminddb:"ip"`
105- }{}
106- network , err := n .Network (& record )
107- assert .Nil (t , err )
108- assert .Equal (t , record .IP , network .IP .String (),
109- "expected %s got %s" , record .IP , network .IP .String (),
110- )
111- innerIPs = append (innerIPs , network .String ())
112- }
113-
114- expectedIPs := []string {
68+ },
69+ },
70+ networkTest {
71+ Network : "1.1.1.1/32" ,
72+ Database : "ipv4" ,
73+ Expected : []string {
11574 "1.1.1.1/32" ,
116- }
117-
118- assert .Equal (t , expectedIPs , innerIPs )
119- assert .Nil (t , n .Err ())
120- }
121- }
122-
123- func TestNetworksWithinSlash32V4SearchInV6Db (t * testing.T ) {
124- _ , network , err := net .ParseCIDR ("1.1.1.1/32" )
125- assert .Nil (t , err )
126-
127- for _ , recordSize := range []uint {24 , 28 , 32 } {
128- fileName := testFile (fmt .Sprintf ("MaxMind-DB-test-mixed-%d.mmdb" , recordSize ))
129- reader , err := Open (fileName )
130- require .Nil (t , err , "unexpected error while opening database: %v" , err )
131- defer reader .Close ()
132-
133- n := reader .NetworksWithin (network )
134- var innerIPs []string
135-
136- for n .Next () {
137- record := struct {
138- IP string `maxminddb:"ip"`
139- }{}
140- network , err := n .Network (& record )
141- assert .Nil (t , err )
142- innerIPs = append (innerIPs , network .String ())
143- }
144-
145- expectedIPs := []string {
75+ },
76+ },
77+ networkTest {
78+ Network : "1.1.1.1/32" ,
79+ Database : "mixed" ,
80+ Expected : []string {
14681 "1.1.1.1/32" ,
147- }
148-
149- assert .Equal (t , expectedIPs , innerIPs )
150- assert .Nil (t , n .Err ())
151- }
152-
153- }
154- func TestNetworksWithinSlash128V6SearchInV6Db (t * testing.T ) {
155- _ , network , err := net .ParseCIDR ("::1:ffff:ffff/128" )
156- assert .Nil (t , err )
157-
158- for _ , recordSize := range []uint {24 , 28 , 32 } {
159- fileName := testFile (fmt .Sprintf ("MaxMind-DB-test-ipv6-%d.mmdb" , recordSize ))
160- reader , err := Open (fileName )
161- require .Nil (t , err , "unexpected error while opening database: %v" , err )
162- defer reader .Close ()
163-
164- n := reader .NetworksWithin (network )
165- var innerIPs []string
166-
167- for n .Next () {
168- record := struct {
169- IP string `maxminddb:"ip"`
170- }{}
171- network , err := n .Network (& record )
172- assert .Nil (t , err )
173- assert .Equal (t , record .IP , network .IP .String (),
174- "expected %s got %s" , record .IP , network .IP .String (),
175- )
176- innerIPs = append (innerIPs , network .String ())
177- }
178-
179- expectedIPs := []string {
82+ },
83+ },
84+ networkTest {
85+ Network : "::1:ffff:ffff/128" ,
86+ Database : "ipv6" ,
87+ Expected : []string {
18088 "::1:ffff:ffff/128" ,
181- }
182-
183- assert .Equal (t , expectedIPs , innerIPs )
184- assert .Nil (t , n .Err ())
185- }
186- }
187-
188- func TestNetworksWithinV6SearchInV6Db (t * testing.T ) {
189- var network = & net.IPNet {IP : make (net.IP , 16 ), Mask : net .CIDRMask (0 , 128 )}
190-
191- for _ , recordSize := range []uint {24 , 28 , 32 } {
192- fileName := testFile (fmt .Sprintf ("MaxMind-DB-test-ipv6-%d.mmdb" , recordSize ))
193- reader , err := Open (fileName )
194- require .Nil (t , err , "unexpected error while opening database: %v" , err )
195- defer reader .Close ()
196-
197- n := reader .NetworksWithin (network )
198- var innerIPs []string
199-
200- for n .Next () {
201- record := struct {
202- IP string `maxminddb:"ip"`
203- }{}
204- network , err := n .Network (& record )
205- assert .Nil (t , err )
206- assert .Equal (t , record .IP , network .IP .String (),
207- "expected %s got %s" , record .IP , network .IP .String (),
208- )
209- innerIPs = append (innerIPs , network .String ())
210- }
211-
212- expectedIPs := []string {
89+ },
90+ },
91+ networkTest {
92+ Network : "::/0" ,
93+ Database : "ipv6" ,
94+ Expected : []string {
21395 "::1:ffff:ffff/128" ,
21496 "::2:0:0/122" ,
21597 "::2:0:40/124" ,
21698 "::2:0:50/125" ,
21799 "::2:0:58/127" ,
218- }
219-
220- assert .Equal (
221- t ,
222- expectedIPs ,
223- innerIPs ,
224- fmt .Sprintf ("inner IPs for %v" , fileName ),
225- )
226- assert .Nil (t , n .Err ())
227- }
228- }
229-
230- func TestNetworksWithinV4SearchInV6Db (t * testing.T ) {
231- var network = & net.IPNet {IP : make (net.IP , 4 ), Mask : net .CIDRMask (0 , 32 )}
232-
233- for _ , recordSize := range []uint {24 , 28 , 32 } {
234- fileName := testFile (fmt .Sprintf ("MaxMind-DB-test-mixed-%d.mmdb" , recordSize ))
235- reader , err := Open (fileName )
236- require .Nil (t , err , "unexpected error while opening database: %v" , err )
237- defer reader .Close ()
238-
239- n := reader .NetworksWithin (network )
240- var innerIPs []string
241-
242- for n .Next () {
243- record := struct {
244- IP string `maxminddb:"ip"`
245- }{}
246- network , err := n .Network (& record )
247- assert .Nil (t , err )
248- innerIPs = append (innerIPs , network .String ())
249- }
250-
251- expectedIPs := []string {
100+ },
101+ },
102+ networkTest {
103+ Network : "0.0.0.0/0" ,
104+ Database : "mixed" ,
105+ Expected : []string {
252106 "1.1.1.1/32" ,
253107 "1.1.1.2/31" ,
254108 "1.1.1.4/30" ,
255109 "1.1.1.8/29" ,
256110 "1.1.1.16/28" ,
257111 "1.1.1.32/32" ,
258- }
259-
260- assert .Equal (
261- t ,
262- expectedIPs ,
263- innerIPs ,
264- fmt .Sprintf ("inner IPs for %v" , fileName ),
265- )
266- assert .Nil (t , n .Err ())
267- }
268- }
269-
270- func TestNetworksWithinV6SearchInV4Db (t * testing.T ) {
271- var network = & net.IPNet {IP : make (net.IP , 16 ), Mask : net .CIDRMask (0 , 128 )}
272-
273- for _ , recordSize := range []uint {24 , 28 , 32 } {
274- fileName := testFile (fmt .Sprintf ("MaxMind-DB-test-ipv4-%d.mmdb" , recordSize ))
275- reader , err := Open (fileName )
276- require .Nil (t , err , "unexpected error while opening database: %v" , err )
277- defer reader .Close ()
278-
279- n := reader .NetworksWithin (network )
280- var innerIPs []string
281-
282- for n .Next () {
283- record := struct {
284- IP string `maxminddb:"ip"`
285- }{}
286- network , err := n .Network (& record )
287- assert .Nil (t , err )
288- innerIPs = append (innerIPs , network .String ())
289- }
290-
291- expectedIPs := []string {
112+ },
113+ },
114+ networkTest {
115+ Network : "::/0" ,
116+ Database : "ipv4" ,
117+ Expected : []string {
292118 "101:101::/32" ,
293119 "101:102::/31" ,
294120 "101:104::/30" ,
295121 "101:108::/29" ,
296122 "101:110::/28" ,
297123 "101:120::/32" ,
298- }
124+ },
125+ },
126+ }
127+
128+ func TestNetworksWithin (t * testing.T ) {
129+ for _ , v := range tests {
130+ for _ , recordSize := range []uint {24 , 28 , 32 } {
131+ fileName := testFile (fmt .Sprintf ("MaxMind-DB-test-%s-%d.mmdb" , v .Database , recordSize ))
132+ reader , err := Open (fileName )
133+ require .Nil (t , err , "unexpected error while opening database: %v" , err )
134+ defer reader .Close ()
299135
300- assert .Equal (
301- t ,
302- expectedIPs ,
303- innerIPs ,
304- fmt .Sprintf ("inner IPs for %v" , fileName ),
305- )
306- assert .Nil (t , n .Err ())
136+ _ , network , err := net .ParseCIDR (v .Network )
137+ assert .Nil (t , err )
138+ n := reader .NetworksWithin (network )
139+ var innerIPs []string
140+
141+ for n .Next () {
142+ record := struct {
143+ IP string `maxminddb:"ip"`
144+ }{}
145+ network , err := n .Network (& record )
146+ assert .Nil (t , err )
147+ innerIPs = append (innerIPs , network .String ())
148+ }
149+
150+ assert .Equal (t , v .Expected , innerIPs )
151+ assert .Nil (t , n .Err ())
152+ }
307153 }
308154}
0 commit comments