-
Notifications
You must be signed in to change notification settings - Fork 4
/
pretree_test.go
64 lines (58 loc) · 2.1 KB
/
pretree_test.go
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
/*
Copyright (c) 2021 ffactory.org
pretree is licensed under Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan PSL v2.
You may obtain a copy of Mulan PSL v2 at:
http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the Mulan PSL v2 for more details.
*/
package pretree_test
import (
"testing"
"github.com/obity/pretree"
)
func Test_Match(t *testing.T) {
// 测试数据data包括 http请求方法,路由规则,客户端请求路径
data := [][]string{
{"POST", "/pet/{petId}/uploadImage", "/pet/12121/uploadImage"},
{"POST", "/pet", "/pet"},
{"PUT", "/pet", "/pet"},
{"GET", "/pet/findByStatus", "/pet/findByStatus"},
{"GET", "/pet/{petId}", "/pet/113"},
{"GET", "/pet/{petId}/info", "/pet/12121/info"},
{"POST", "/pet/{petId}", "/pet/12121"},
{"DELETE", "/pet/{petId}", "/pet/12121"},
{"GET", "/store/inventory", "/store/inventory"},
{"POST", "/store/order", "/store/order"},
{"GET", "/store/order/{orderId}", "/store/order/939"},
{"DELETE", "/store/order/{orderId}", "/store/order/939"},
{"POST", "/user/createWithList", "/user/createWithList"},
{"GET", "/user/{username}", "/user/1002"},
{"PUT", "/user/{username}", "/user/1002"},
{"DELETE", "/user/{username}", "/user/1002"},
{"GET", "/user/login", "/user/login"},
{"GET", "/user/logout", "/user/logout"},
{"POST", "/user/createWithArray", "/user/createWithArray"},
{"POST", "/user", "/user"},
}
p := pretree.NewPreTree()
for _, v := range data {
method := v[0]
sourceRule := v[1]
p.Store(method, sourceRule)
}
for _, v := range data {
method := v[0]
urlPath := v[2]
sourceRule := v[1]
ok, rule, vars := p.Query(method, urlPath)
if ok && rule == sourceRule {
t.Logf("urlPath:%s match rule:%s result: %t vars: %s", urlPath, rule, ok, vars)
} else {
t.Errorf("method: %s urlPath:%s match rule:%s result: %t", method, urlPath, sourceRule, ok)
}
}
}