Add more fuzz match support @release

This commit is contained in:
wweir
2019-01-29 13:34:52 +08:00
parent 8194083f54
commit 9bc5a32074
5 changed files with 50 additions and 34 deletions
+3 -5
View File
@@ -12,12 +12,10 @@
*.out
.DS_Store
**/.DS_Store
._*
*.swp
*.swo
.vscode
.idea
sower
cert.pem
**/cert.pem
privkey.pem
**/privkey.pem
/sower.toml
+3 -2
View File
@@ -1,10 +1,11 @@
SERVER:=127.0.0.1:5533
default: build
default: test build
generate:
go generate ./...
test:
go test -race ./...
build:
GO111MODULE=on go build -v -ldflags \
"-X main.version=$(shell git describe --tags) \
+17 -15
View File
@@ -8,24 +8,26 @@ dns_server="223.5.5.5" # Alibaba public dns
client_ip="127.0.0.1" # listen the IP, dns target is the IP
# clear_dns_cache="killall -HUP mDNSResponder"
blocklist=[
"*.google.com", # google
"*.goo.gl",
"*.googleusercontent.com",
"*.googleapis.com",
"*.youtube.com", # youtube
"*.ytimg.com",
"*.ggpht.com",
"*.googlevideo.com",
"*.facebook.com", # facebook
"*.xx.fbcdn.net",
"*.twitter.com", # twitter
"*.twimg.com",
"*.blogspot.com", # blogspot
"*.wikipedia.org", # wikipeida
"**.google.com", # google
"**.goo.gl",
"**.googleusercontent.com",
"**.googleapis.com",
"**.youtube.com", # youtube
"**.ytimg.com",
"**.ggpht.com",
"**.googlevideo.com",
"**.facebook.com", # facebook
"**.xx.fbcdn.net",
"**.twitter.com", # twitter
"**.twimg.com",
"**.blogspot.com", # blogspot
"**.wikipedia.org", # wikipeida
]
whitelist=[
"iamp.*.*.*",
"iamp.*.*",
"imap-mail.*.*",
"imap-mail.outlook.com",
"**.qq.com",
"**.baidu.com"
]
verbose=0
+13 -2
View File
@@ -54,10 +54,15 @@ func (n *node) add(secs []string) {
case 1:
n.node[secs[length-1]] = &node{node: map[string]*node{"": &node{}}}
default:
subNode, ok := n.node[secs[length-1]]
sec := secs[length-1]
if sec == "**" {
sec = "*"
}
subNode, ok := n.node[sec]
if !ok {
subNode = &node{node: map[string]*node{}}
n.node[secs[length-1]] = subNode
n.node[sec] = subNode
}
subNode.add(secs[:length-1])
}
@@ -73,6 +78,9 @@ func (n *node) matchSecs(secs []string, fuzzNode bool) bool {
if _, ok := n.node[""]; ok {
return true
}
if _, ok := n.node["**"]; ok {
return true
}
if _, ok := n.node["*"]; ok {
return !fuzzNode
}
@@ -85,6 +93,9 @@ func (n *node) matchSecs(secs []string, fuzzNode bool) bool {
if n, ok := n.node["*"]; ok {
return n.matchSecs(secs[:length-1], true)
}
if _, ok := n.node["**"]; ok {
return true
}
return false
}
+14 -10
View File
@@ -30,21 +30,15 @@ func TestNode_Match(t *testing.T) {
},
}, {
"fuzz1",
NewNodeFromRules(".", "wweir.cc", "*.wweir.cc"),
[]test{
{"wweir.cc", true},
{"a.wweir.cc", true},
},
}, {
"fuzz2",
NewNodeFromRules(".", "a.wweir.cc", "*.wweir.cc"),
NewNodeFromRules(".", "wweir.cc", "a.wweir.cc", "*.wweir.cc"),
[]test{
{"wweir.cc", true},
{"a.wweir.cc", true},
{"b.wweir.cc", true},
{"a.b.wweir.cc", false},
},
}, {
"fuzz3",
"fuzz2",
NewNodeFromRules(".", "a.*.cc"),
[]test{
{"wweir.cc", false},
@@ -52,7 +46,7 @@ func TestNode_Match(t *testing.T) {
{"b.wweir.cc", false},
},
}, {
"fuzz4",
"fuzz3",
NewNodeFromRules(".", "*.*.cc", "iamp.*.*"),
[]test{
{"wweir.cc", false},
@@ -60,6 +54,16 @@ func TestNode_Match(t *testing.T) {
{"b.wweir.cc", true},
{"iamp.wweir.cc", true},
},
}, {
"fuzz4",
NewNodeFromRules(".", "**.cc", "a.**.com"),
[]test{
{"wweir.cc", true},
{"a.wweir.cc", true},
{"a.b.wweir.cc", true},
{"a.wweir.com", true},
{"b.wweir.com", false},
},
}}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {