mirror of
https://github.com/XTLS/Xray-core.git
synced 2026-05-08 14:13:22 +00:00
73 lines
2.2 KiB
Go
73 lines
2.2 KiB
Go
package geodata
|
|
|
|
import (
|
|
"path/filepath"
|
|
"reflect"
|
|
"slices"
|
|
"testing"
|
|
|
|
"github.com/xtls/xray-core/common/geodata/strmatcher"
|
|
)
|
|
|
|
func TestCompactDomainMatcher_PreservesCustomRuleIndices(t *testing.T) {
|
|
factory := &CompactDomainMatcherFactory{shared: make(map[string]strmatcher.MatcherSet)}
|
|
matcher, err := factory.BuildMatcher([]*DomainRule{
|
|
{Value: &DomainRule_Custom{Custom: &Domain{Type: Domain_Full, Value: "example.com"}}},
|
|
{Value: &DomainRule_Custom{Custom: &Domain{Type: Domain_Domain, Value: "example.com"}}},
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("BuildMatcher() failed: %v", err)
|
|
}
|
|
|
|
got := matcher.Match("example.com")
|
|
slices.Sort(got)
|
|
|
|
want := []uint32{0, 1}
|
|
if !reflect.DeepEqual(got, want) {
|
|
t.Fatalf("Match() = %v, want %v", got, want)
|
|
}
|
|
}
|
|
|
|
func TestCompactDomainMatcher_PreservesMixedRuleIndices(t *testing.T) {
|
|
t.Setenv("xray.location.asset", filepath.Join("..", "..", "resources"))
|
|
|
|
factory := &CompactDomainMatcherFactory{shared: make(map[string]strmatcher.MatcherSet)}
|
|
matcher, err := factory.BuildMatcher([]*DomainRule{
|
|
{Value: &DomainRule_Geosite{Geosite: &GeoSiteRule{File: DefaultGeoSiteDat, Code: "CN"}}},
|
|
{Value: &DomainRule_Custom{Custom: &Domain{Type: Domain_Full, Value: "163.com"}}},
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("BuildMatcher() failed: %v", err)
|
|
}
|
|
|
|
got := matcher.Match("163.com")
|
|
slices.Sort(got)
|
|
|
|
want := []uint32{0, 1}
|
|
if !reflect.DeepEqual(got, want) {
|
|
t.Fatalf("Match() = %v, want %v", got, want)
|
|
}
|
|
}
|
|
|
|
func TestMphDomainMatcher_MatchReturnsDetachedSlice(t *testing.T) {
|
|
matcher, err := (&MphDomainMatcherFactory{shared: make(map[string]strmatcher.MatcherGroup)}).BuildMatcher([]*DomainRule{
|
|
{Value: &DomainRule_Custom{Custom: &Domain{Type: Domain_Full, Value: "example.com"}}},
|
|
{Value: &DomainRule_Custom{Custom: &Domain{Type: Domain_Domain, Value: "example.com"}}},
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("BuildMatcher() failed: %v", err)
|
|
}
|
|
|
|
got := matcher.Match("example.com")
|
|
if !reflect.DeepEqual(got, []uint32{0, 1}) {
|
|
t.Fatalf("Match() = %v, want %v", got, []uint32{0, 1})
|
|
}
|
|
|
|
got[0] = 1
|
|
|
|
gotAgain := matcher.Match("example.com")
|
|
if !reflect.DeepEqual(gotAgain, []uint32{0, 1}) {
|
|
t.Fatalf("Match() after caller mutation = %v, want %v", gotAgain, []uint32{0, 1})
|
|
}
|
|
}
|