1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
| package strmatcher_test
|
| import (
| "reflect"
| "testing"
|
| "github.com/v2fly/v2ray-core/v5/common"
| . "github.com/v2fly/v2ray-core/v5/common/strmatcher"
| )
|
| // See https://github.com/v2fly/v2ray-core/issues/92#issuecomment-673238489
| func TestLinearIndexMatcher(t *testing.T) {
| rules := []struct {
| Type Type
| Domain string
| }{
| {
| Type: Regex,
| Domain: "apis\\.us$",
| },
| {
| Type: Substr,
| Domain: "apis",
| },
| {
| Type: Domain,
| Domain: "googleapis.com",
| },
| {
| Type: Domain,
| Domain: "com",
| },
| {
| Type: Full,
| Domain: "www.baidu.com",
| },
| {
| Type: Substr,
| Domain: "apis",
| },
| {
| Type: Domain,
| Domain: "googleapis.com",
| },
| {
| Type: Full,
| Domain: "fonts.googleapis.com",
| },
| {
| Type: Full,
| Domain: "www.baidu.com",
| },
| {
| Type: Domain,
| Domain: "example.com",
| },
| }
| cases := []struct {
| Input string
| Output []uint32
| }{
| {
| Input: "www.baidu.com",
| Output: []uint32{5, 9, 4},
| },
| {
| Input: "fonts.googleapis.com",
| Output: []uint32{8, 3, 7, 4, 2, 6},
| },
| {
| Input: "example.googleapis.com",
| Output: []uint32{3, 7, 4, 2, 6},
| },
| {
| Input: "testapis.us",
| Output: []uint32{2, 6, 1},
| },
| {
| Input: "example.com",
| Output: []uint32{10, 4},
| },
| }
| matcherGroup := NewLinearIndexMatcher()
| for _, rule := range rules {
| matcher, err := rule.Type.New(rule.Domain)
| common.Must(err)
| matcherGroup.Add(matcher)
| }
| matcherGroup.Build()
| for _, test := range cases {
| if m := matcherGroup.Match(test.Input); !reflect.DeepEqual(m, test.Output) {
| t.Error("unexpected output: ", m, " for test case ", test)
| }
| }
| }
|
|