mirror of
https://github.com/v2rayA/v2rayA.git
synced 2026-10-28 21:08:07 +08:00
test incremental GeoIP parsing
Cover early exit, fake-IP filtering, IPv6 output, and malformed data. Signed-off-by: ALOKY <ajm1055@uomustansiriyah.edu.iq>
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
package parseGeoIP
|
||||
|
||||
import (
|
||||
"net"
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
"google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
func TestParseGeoIPStopsAtRequestedEntry(t *testing.T) {
|
||||
data, err := proto.Marshal(&GeoIPList{Entry: []*GeoIP{
|
||||
{
|
||||
CountryCode: "PRIVATE",
|
||||
Cidr: []*CIDR{
|
||||
{Ip: net.ParseIP("10.0.0.0").To4(), Prefix: 8},
|
||||
{Ip: net.ParseIP("198.18.0.0").To4(), Prefix: 15},
|
||||
{Ip: net.ParseIP("2001:db8::"), Prefix: 32},
|
||||
},
|
||||
},
|
||||
{
|
||||
CountryCode: "US",
|
||||
Cidr: []*CIDR{
|
||||
{Ip: net.ParseIP("192.0.2.0").To4(), Prefix: 24},
|
||||
},
|
||||
},
|
||||
}})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// A malformed record after the requested entry must not be decoded.
|
||||
data = append(data, 0x0a, 0x02, 0xff)
|
||||
|
||||
ipv4, ipv6, err := parseGeoIP(data, "PRIVATE")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if want := []string{"10.0.0.0/8"}; !reflect.DeepEqual(ipv4, want) {
|
||||
t.Fatalf("IPv4 entries = %v, want %v", ipv4, want)
|
||||
}
|
||||
if want := []string{"2001:db8::/32"}; !reflect.DeepEqual(ipv6, want) {
|
||||
t.Fatalf("IPv6 entries = %v, want %v", ipv6, want)
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseGeoIPRejectsMalformedData(t *testing.T) {
|
||||
if _, _, err := parseGeoIP([]byte{0x0a, 0x02, 0xff}, "PRIVATE"); err == nil {
|
||||
t.Fatal("parseGeoIP() accepted malformed data")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user