Feat: add reverse match for GeoIP

(cherry picked from commit 3a50affa0a7316a9ad249f1b2b2996cb88948551)
This commit is contained in:
Loyalsoldier 2021-04-08 13:19:25 +08:00 committed by 世界
parent 13bc0432bc
commit 3fe61ed4a2
No known key found for this signature in database
GPG key ID: CD109927C34A63C4
7 changed files with 232 additions and 112 deletions

View file

@ -125,6 +125,42 @@ func TestGeoIPMatcher(t *testing.T) {
}
}
func TestGeoIPReverseMatcher(t *testing.T) {
cidrList := router.CIDRList{
{Ip: []byte{8, 8, 8, 8}, Prefix: 32},
{Ip: []byte{91, 108, 4, 0}, Prefix: 16},
}
matcher := &router.GeoIPMatcher{}
matcher.SetReverseMatch(true) // Reverse match
common.Must(matcher.Init(cidrList))
testCases := []struct {
Input string
Output bool
}{
{
Input: "8.8.8.8",
Output: false,
},
{
Input: "2001:cdba::3257:9652",
Output: true,
},
{
Input: "91.108.255.254",
Output: false,
},
}
for _, testCase := range testCases {
ip := net.ParseAddress(testCase.Input).IP()
actual := matcher.Match(ip)
if actual != testCase.Output {
t.Error("expect input", testCase.Input, "to be", testCase.Output, ", but actually", actual)
}
}
}
func TestGeoIPMatcher4CN(t *testing.T) {
ips, err := loadGeoIP("CN")
common.Must(err)