@@ -100,95 +100,95 @@ func TestLookupNetwork(t *testing.T) {
100100 }
101101
102102 tests := []struct {
103- IP netip.Addr
104- DBFile string
105- ExpectedCIDR string
106- ExpectedRecord any
107- ExpectedOK bool
103+ IP netip.Addr
104+ DBFile string
105+ ExpectedNetwork string
106+ ExpectedRecord any
107+ ExpectedFound bool
108108 }{
109109 {
110- IP : netip .MustParseAddr ("1.1.1.1" ),
111- DBFile : "MaxMind-DB-test-ipv6-32.mmdb" ,
112- ExpectedCIDR : "1.0.0.0/8" ,
113- ExpectedRecord : nil ,
114- ExpectedOK : false ,
110+ IP : netip .MustParseAddr ("1.1.1.1" ),
111+ DBFile : "MaxMind-DB-test-ipv6-32.mmdb" ,
112+ ExpectedNetwork : "1.0.0.0/8" ,
113+ ExpectedRecord : nil ,
114+ ExpectedFound : false ,
115115 },
116116 {
117- IP : netip .MustParseAddr ("::1:ffff:ffff" ),
118- DBFile : "MaxMind-DB-test-ipv6-24.mmdb" ,
119- ExpectedCIDR : "::1:ffff:ffff/128" ,
120- ExpectedRecord : map [string ]any {"ip" : "::1:ffff:ffff" },
121- ExpectedOK : true ,
117+ IP : netip .MustParseAddr ("::1:ffff:ffff" ),
118+ DBFile : "MaxMind-DB-test-ipv6-24.mmdb" ,
119+ ExpectedNetwork : "::1:ffff:ffff/128" ,
120+ ExpectedRecord : map [string ]any {"ip" : "::1:ffff:ffff" },
121+ ExpectedFound : true ,
122122 },
123123 {
124- IP : netip .MustParseAddr ("::2:0:1" ),
125- DBFile : "MaxMind-DB-test-ipv6-24.mmdb" ,
126- ExpectedCIDR : "::2:0:0/122" ,
127- ExpectedRecord : map [string ]any {"ip" : "::2:0:0" },
128- ExpectedOK : true ,
124+ IP : netip .MustParseAddr ("::2:0:1" ),
125+ DBFile : "MaxMind-DB-test-ipv6-24.mmdb" ,
126+ ExpectedNetwork : "::2:0:0/122" ,
127+ ExpectedRecord : map [string ]any {"ip" : "::2:0:0" },
128+ ExpectedFound : true ,
129129 },
130130 {
131- IP : netip .MustParseAddr ("1.1.1.1" ),
132- DBFile : "MaxMind-DB-test-ipv4-24.mmdb" ,
133- ExpectedCIDR : "1.1.1.1/32" ,
134- ExpectedRecord : map [string ]any {"ip" : "1.1.1.1" },
135- ExpectedOK : true ,
131+ IP : netip .MustParseAddr ("1.1.1.1" ),
132+ DBFile : "MaxMind-DB-test-ipv4-24.mmdb" ,
133+ ExpectedNetwork : "1.1.1.1/32" ,
134+ ExpectedRecord : map [string ]any {"ip" : "1.1.1.1" },
135+ ExpectedFound : true ,
136136 },
137137 {
138- IP : netip .MustParseAddr ("1.1.1.3" ),
139- DBFile : "MaxMind-DB-test-ipv4-24.mmdb" ,
140- ExpectedCIDR : "1.1.1.2/31" ,
141- ExpectedRecord : map [string ]any {"ip" : "1.1.1.2" },
142- ExpectedOK : true ,
138+ IP : netip .MustParseAddr ("1.1.1.3" ),
139+ DBFile : "MaxMind-DB-test-ipv4-24.mmdb" ,
140+ ExpectedNetwork : "1.1.1.2/31" ,
141+ ExpectedRecord : map [string ]any {"ip" : "1.1.1.2" },
142+ ExpectedFound : true ,
143143 },
144144 {
145- IP : netip .MustParseAddr ("1.1.1.3" ),
146- DBFile : "MaxMind-DB-test-decoder.mmdb" ,
147- ExpectedCIDR : "1.1.1.0/24" ,
148- ExpectedRecord : decoderRecord ,
149- ExpectedOK : true ,
145+ IP : netip .MustParseAddr ("1.1.1.3" ),
146+ DBFile : "MaxMind-DB-test-decoder.mmdb" ,
147+ ExpectedNetwork : "1.1.1.0/24" ,
148+ ExpectedRecord : decoderRecord ,
149+ ExpectedFound : true ,
150150 },
151151 {
152- IP : netip .MustParseAddr ("::ffff:1.1.1.128" ),
153- DBFile : "MaxMind-DB-test-decoder.mmdb" ,
154- ExpectedCIDR : "::ffff:1.1.1.0/120" ,
155- ExpectedRecord : decoderRecord ,
156- ExpectedOK : true ,
152+ IP : netip .MustParseAddr ("::ffff:1.1.1.128" ),
153+ DBFile : "MaxMind-DB-test-decoder.mmdb" ,
154+ ExpectedNetwork : "::ffff:1.1.1.0/120" ,
155+ ExpectedRecord : decoderRecord ,
156+ ExpectedFound : true ,
157157 },
158158 {
159- IP : netip .MustParseAddr ("::1.1.1.128" ),
160- DBFile : "MaxMind-DB-test-decoder.mmdb" ,
161- ExpectedCIDR : "::101:100/120" ,
162- ExpectedRecord : decoderRecord ,
163- ExpectedOK : true ,
159+ IP : netip .MustParseAddr ("::1.1.1.128" ),
160+ DBFile : "MaxMind-DB-test-decoder.mmdb" ,
161+ ExpectedNetwork : "::101:100/120" ,
162+ ExpectedRecord : decoderRecord ,
163+ ExpectedFound : true ,
164164 },
165165 {
166- IP : netip .MustParseAddr ("200.0.2.1" ),
167- DBFile : "MaxMind-DB-no-ipv4-search-tree.mmdb" ,
168- ExpectedCIDR : "::/64" ,
169- ExpectedRecord : "::0/64" ,
170- ExpectedOK : true ,
166+ IP : netip .MustParseAddr ("200.0.2.1" ),
167+ DBFile : "MaxMind-DB-no-ipv4-search-tree.mmdb" ,
168+ ExpectedNetwork : "::/64" ,
169+ ExpectedRecord : "::0/64" ,
170+ ExpectedFound : true ,
171171 },
172172 {
173- IP : netip .MustParseAddr ("::200.0.2.1" ),
174- DBFile : "MaxMind-DB-no-ipv4-search-tree.mmdb" ,
175- ExpectedCIDR : "::/64" ,
176- ExpectedRecord : "::0/64" ,
177- ExpectedOK : true ,
173+ IP : netip .MustParseAddr ("::200.0.2.1" ),
174+ DBFile : "MaxMind-DB-no-ipv4-search-tree.mmdb" ,
175+ ExpectedNetwork : "::/64" ,
176+ ExpectedRecord : "::0/64" ,
177+ ExpectedFound : true ,
178178 },
179179 {
180- IP : netip .MustParseAddr ("0:0:0:0:ffff:ffff:ffff:ffff" ),
181- DBFile : "MaxMind-DB-no-ipv4-search-tree.mmdb" ,
182- ExpectedCIDR : "::/64" ,
183- ExpectedRecord : "::0/64" ,
184- ExpectedOK : true ,
180+ IP : netip .MustParseAddr ("0:0:0:0:ffff:ffff:ffff:ffff" ),
181+ DBFile : "MaxMind-DB-no-ipv4-search-tree.mmdb" ,
182+ ExpectedNetwork : "::/64" ,
183+ ExpectedRecord : "::0/64" ,
184+ ExpectedFound : true ,
185185 },
186186 {
187- IP : netip .MustParseAddr ("ef00::" ),
188- DBFile : "MaxMind-DB-no-ipv4-search-tree.mmdb" ,
189- ExpectedCIDR : "8000::/1" ,
190- ExpectedRecord : nil ,
191- ExpectedOK : false ,
187+ IP : netip .MustParseAddr ("ef00::" ),
188+ DBFile : "MaxMind-DB-no-ipv4-search-tree.mmdb" ,
189+ ExpectedNetwork : "8000::/1" ,
190+ ExpectedRecord : nil ,
191+ ExpectedFound : false ,
192192 },
193193 }
194194
@@ -198,10 +198,12 @@ func TestLookupNetwork(t *testing.T) {
198198 reader , err := Open (testFile (test .DBFile ))
199199 require .NoError (t , err )
200200
201- network , ok , err := reader .LookupNetwork (test .IP , & record )
202- require .NoError (t , err )
203- assert .Equal (t , test .ExpectedOK , ok )
204- assert .Equal (t , test .ExpectedCIDR , network .String ())
201+ result := reader .Lookup (test .IP )
202+ require .NoError (t , result .Err ())
203+ assert .Equal (t , test .ExpectedFound , result .Found ())
204+ assert .Equal (t , test .ExpectedNetwork , result .Network ().String ())
205+
206+ require .NoError (t , result .Decode (& record ))
205207 assert .Equal (t , test .ExpectedRecord , record )
206208 })
207209 }
@@ -819,21 +821,23 @@ func BenchmarkInterfaceLookup(b *testing.B) {
819821 require .NoError (b , db .Close (), "error on close" )
820822}
821823
822- func BenchmarkInterfaceLookupNetwork (b * testing.B ) {
824+ func BenchmarkLookupNetwork (b * testing.B ) {
823825 db , err := Open ("GeoLite2-City.mmdb" )
824826 require .NoError (b , err )
825827
826828 //nolint:gosec // this is a test
827829 r := rand .New (rand .NewSource (time .Now ().UnixNano ()))
828- var result any
829830
830831 s := make (net.IP , 4 )
831832 for i := 0 ; i < b .N ; i ++ {
832833 ip := randomIPv4Address (r , s )
833- _ , _ , err = db .LookupNetwork (ip , & result )
834- if err != nil {
834+ res : = db .Lookup (ip )
835+ if err := res . Err (); err != nil {
835836 b .Error (err )
836837 }
838+ if ! res .Network ().IsValid () {
839+ b .Fatalf ("invalid network for %s" , ip )
840+ }
837841 }
838842 require .NoError (b , db .Close (), "error on close" )
839843}
@@ -907,19 +911,18 @@ func BenchmarkCityLookup(b *testing.B) {
907911 require .NoError (b , db .Close (), "error on close" )
908912}
909913
910- func BenchmarkCityLookupNetwork (b * testing.B ) {
914+ func BenchmarkCityLookupOnly (b * testing.B ) {
911915 db , err := Open ("GeoLite2-City.mmdb" )
912916 require .NoError (b , err )
913917
914918 //nolint:gosec // this is a test
915919 r := rand .New (rand .NewSource (time .Now ().UnixNano ()))
916- var result fullCity
917920
918921 s := make (net.IP , 4 )
919922 for i := 0 ; i < b .N ; i ++ {
920923 ip := randomIPv4Address (r , s )
921- _ , _ , err = db .LookupNetwork (ip , & result )
922- if err != nil {
924+ result : = db .Lookup (ip )
925+ if err := result . Err (); err != nil {
923926 b .Error (err )
924927 }
925928 }
0 commit comments