@@ -67,6 +67,14 @@ var tests = []networkTest{
6767 "1.1.1.32/32" ,
6868 },
6969 },
70+ networkTest {
71+ Network : "1.1.1.1/30" ,
72+ Database : "ipv4" ,
73+ Expected : []string {
74+ "1.1.1.1/32" ,
75+ "1.1.1.2/31" ,
76+ },
77+ },
7078 networkTest {
7179 Network : "1.1.1.1/32" ,
7280 Database : "ipv4" ,
@@ -99,6 +107,15 @@ var tests = []networkTest{
99107 "::2:0:58/127" ,
100108 },
101109 },
110+ networkTest {
111+ Network : "::2:0:40/123" ,
112+ Database : "ipv6" ,
113+ Expected : []string {
114+ "::2:0:40/124" ,
115+ "::2:0:50/125" ,
116+ "::2:0:58/127" ,
117+ },
118+ },
102119 networkTest {
103120 Network : "0.0.0.0/0" ,
104121 Database : "mixed" ,
@@ -111,6 +128,13 @@ var tests = []networkTest{
111128 "1.1.1.32/32" ,
112129 },
113130 },
131+ networkTest {
132+ Network : "1.1.1.16/28" ,
133+ Database : "mixed" ,
134+ Expected : []string {
135+ "1.1.1.16/28" ,
136+ },
137+ },
114138 networkTest {
115139 Network : "::/0" ,
116140 Database : "ipv4" ,
@@ -123,6 +147,13 @@ var tests = []networkTest{
123147 "101:120::/32" ,
124148 },
125149 },
150+ networkTest {
151+ Network : "101:104::/30" ,
152+ Database : "ipv4" ,
153+ Expected : []string {
154+ "101:104::/30" ,
155+ },
156+ },
126157}
127158
128159func TestNetworksWithin (t * testing.T ) {
@@ -152,3 +183,41 @@ func TestNetworksWithin(t *testing.T) {
152183 }
153184 }
154185}
186+
187+ var geoIPTests = []networkTest {
188+ networkTest {
189+ Network : "81.2.69.128/26" ,
190+ Database : "GeoIP2-Country-Test.mmdb" ,
191+ Expected : []string {
192+ "81.2.69.142/31" ,
193+ "81.2.69.144/28" ,
194+ "81.2.69.160/27" ,
195+ },
196+ },
197+ }
198+
199+ func TestGeoIPNetworksWithin (t * testing.T ) {
200+ for _ , v := range geoIPTests {
201+ fileName := testFile (v .Database )
202+ reader , err := Open (fileName )
203+ require .Nil (t , err , "unexpected error while opening database: %v" , err )
204+ defer reader .Close ()
205+
206+ _ , network , err := net .ParseCIDR (v .Network )
207+ assert .Nil (t , err )
208+ n := reader .NetworksWithin (network )
209+ var innerIPs []string
210+
211+ for n .Next () {
212+ record := struct {
213+ IP string `maxminddb:"ip"`
214+ }{}
215+ network , err := n .Network (& record )
216+ assert .Nil (t , err )
217+ innerIPs = append (innerIPs , network .String ())
218+ }
219+
220+ assert .Equal (t , v .Expected , innerIPs )
221+ assert .Nil (t , n .Err ())
222+ }
223+ }
0 commit comments