@@ -2,6 +2,7 @@ package maxminddb
22
33import (
44 "fmt"
5+ "net"
56 "testing"
67
78 "github.com/stretchr/testify/assert"
@@ -46,3 +47,75 @@ func TestNetworksWithInvalidSearchTree(t *testing.T) {
4647 assert .NotNil (t , n .Err (), "no error received when traversing an broken search tree" )
4748 assert .Equal (t , n .Err ().Error (), "invalid search tree at 128.128.128.128/32" )
4849}
50+ func TestNetworksWithin (t * testing.T ) {
51+ _ , network , error := net .ParseCIDR ("1.1.1.0/24" )
52+
53+ assert .Nil (t , error )
54+
55+ for _ , recordSize := range []uint {24 , 28 , 32 } {
56+ fileName := testFile (fmt .Sprintf ("MaxMind-DB-test-ipv4-%d.mmdb" , recordSize ))
57+ reader , err := Open (fileName )
58+ require .Nil (t , err , "unexpected error while opening database: %v" , err )
59+ defer reader .Close ()
60+
61+ n := reader .NetworksWithin (network )
62+ var innerIPs []string
63+
64+ for n .Next () {
65+ record := struct {
66+ IP string `maxminddb:"ip"`
67+ }{}
68+ network , err := n .Network (& record )
69+ assert .Nil (t , err )
70+ assert .Equal (t , record .IP , network .IP .String (),
71+ "expected %s got %s" , record .IP , network .IP .String (),
72+ )
73+ innerIPs = append (innerIPs , record .IP )
74+ }
75+
76+ expectedIPs := []string {
77+ "1.1.1.1" ,
78+ "1.1.1.2" ,
79+ "1.1.1.4" ,
80+ "1.1.1.8" ,
81+ "1.1.1.16" ,
82+ "1.1.1.32" ,
83+ }
84+
85+ assert .Equal (t , expectedIPs , innerIPs )
86+ assert .Nil (t , n .Err ())
87+ }
88+ }
89+
90+ func TestNetworksWithinSlash32 (t * testing.T ) {
91+ _ , network , error := net .ParseCIDR ("1.1.1.32/32" )
92+
93+ assert .Nil (t , error )
94+
95+ for _ , recordSize := range []uint {24 , 28 , 32 } {
96+ fileName := testFile (fmt .Sprintf ("MaxMind-DB-test-ipv4-%d.mmdb" , recordSize ))
97+ reader , err := Open (fileName )
98+ require .Nil (t , err , "unexpected error while opening database: %v" , err )
99+ defer reader .Close ()
100+
101+ n := reader .NetworksWithin (network )
102+ var innerIPs []string
103+
104+ for n .Next () {
105+ record := struct {
106+ IP string `maxminddb:"ip"`
107+ }{}
108+ network , err := n .Network (& record )
109+ assert .Nil (t , err )
110+ assert .Equal (t , record .IP , network .IP .String (),
111+ "expected %s got %s" , record .IP , network .IP .String (),
112+ )
113+ innerIPs = append (innerIPs , record .IP )
114+ }
115+
116+ expectedIPs := []string ([]string {"1.1.1.32" })
117+
118+ assert .Equal (t , expectedIPs , innerIPs )
119+ assert .Nil (t , n .Err ())
120+ }
121+ }
0 commit comments