mirror of
https://github.com/XTLS/Xray-core.git
synced 2026-05-08 14:13:22 +00:00
https://github.com/XTLS/Xray-core/pull/5947#issuecomment-4258063215 https://github.com/XTLS/Xray-core/pull/5951#issuecomment-4260093653
107 lines
2.6 KiB
Go
107 lines
2.6 KiB
Go
package geodata_test
|
|
|
|
import (
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/xtls/xray-core/common/geodata"
|
|
)
|
|
|
|
func TestParseIPRules(t *testing.T) {
|
|
t.Setenv("xray.location.asset", filepath.Join("..", "..", "resources"))
|
|
|
|
rules := []string{
|
|
"geoip:us",
|
|
"geoip:cn",
|
|
"!geoip:cn",
|
|
"!!geoip:cn",
|
|
"geoip:!cn",
|
|
"geoip:!!cn",
|
|
"!geoip:!cn",
|
|
"ext:geoip.dat:!cn",
|
|
"ext:geoip.dat:!!cn",
|
|
"ext:geoip.dat:ca",
|
|
"ext-ip:geoip.dat:!cn",
|
|
"ext-ip:geoip.dat:!ca",
|
|
"192.168.0.0/24",
|
|
"!192.168.0.0/24",
|
|
"!!192.168.0.0/24",
|
|
"!!!192.168.0.0/24",
|
|
"192.168.0.1",
|
|
"fe80::/64",
|
|
"fe80::",
|
|
}
|
|
|
|
_, err := geodata.ParseIPRules(rules)
|
|
if err != nil {
|
|
t.Fatalf("Failed to parse ip rules, got %s", err)
|
|
}
|
|
}
|
|
|
|
func TestParseIPRuleReverse(t *testing.T) {
|
|
t.Setenv("xray.location.asset", filepath.Join("..", "..", "resources"))
|
|
|
|
for _, tt := range []struct {
|
|
rule string
|
|
reverse bool
|
|
}{
|
|
{rule: "!192.168.0.0/24", reverse: true},
|
|
{rule: "!!192.168.0.0/24", reverse: false},
|
|
{rule: "!!!192.168.0.0/24", reverse: true},
|
|
{rule: "!!!!192.168.0.0/24", reverse: false},
|
|
{rule: "geoip:cn", reverse: false},
|
|
{rule: "!geoip:cn", reverse: true},
|
|
{rule: "!!geoip:cn", reverse: false},
|
|
{rule: "geoip:!cn", reverse: true},
|
|
{rule: "geoip:!!cn", reverse: false},
|
|
{rule: "!geoip:!cn", reverse: false},
|
|
{rule: "!!geoip:!cn", reverse: true},
|
|
{rule: "!geoip:!!cn", reverse: true},
|
|
{rule: "ext:geoip.dat:!!!cn", reverse: true},
|
|
} {
|
|
t.Run(tt.rule, func(t *testing.T) {
|
|
rules, err := geodata.ParseIPRules([]string{tt.rule})
|
|
if err != nil {
|
|
t.Fatalf("Failed to parse ip rules, got %s", err)
|
|
}
|
|
|
|
if len(rules) != 1 {
|
|
t.Fatalf("Expected 1 rule, got %d", len(rules))
|
|
}
|
|
|
|
switch rule := rules[0]; {
|
|
case rule.GetGeoip() != nil:
|
|
if rule.GetGeoip().GetReverseMatch() != tt.reverse {
|
|
t.Fatalf("Expected geoip reverse match to be %t", tt.reverse)
|
|
}
|
|
case rule.GetCustom() != nil:
|
|
if rule.GetCustom().GetReverseMatch() != tt.reverse {
|
|
t.Fatalf("Expected custom reverse match to be %t", tt.reverse)
|
|
}
|
|
default:
|
|
t.Fatal("Expected ip rule")
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestParseDomainRules(t *testing.T) {
|
|
t.Setenv("xray.location.asset", filepath.Join("..", "..", "resources"))
|
|
|
|
rules := []string{
|
|
"geosite:cn",
|
|
"geosite:geolocation-!cn",
|
|
"geosite:cn@!cn",
|
|
"ext:geosite.dat:geolocation-!cn",
|
|
"ext:geosite.dat:cn@!cn",
|
|
"ext-site:geosite.dat:geolocation-!cn",
|
|
"ext-site:geosite.dat:cn@!cn",
|
|
"domain:google.com",
|
|
}
|
|
|
|
_, err := geodata.ParseDomainRules(rules, geodata.Domain_Domain)
|
|
if err != nil {
|
|
t.Fatalf("Failed to parse domain rules, got %s", err)
|
|
}
|
|
}
|