.github
agent
api
handler
internal
proto
resolver
router
registry
static
util
LICENSE.txt
compile.go
compile_test.go
parse.go
parse_test.go
pattern.go
runtime.go
types.go
types_test.go
options.go
router.go
router_test.go
server
service
api.go
api_test.go
auth
broker
cache
client
cmd
codec
config
debug
errors
logger
metadata
model
network
plugin
proxy
registry
router
runtime
selector
server
service
store
sync
transport
tunnel
util
web
.gitignore
.golangci.yml
CNAME
Dockerfile
LICENSE
README.md
_config.yml
generate.go
go.mod
go.sum
* api/router/registry: extract path based parameters from url to req * api/handler/rpc: fix empty body request parsing * bundle grpc-gateway util funcs Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
123 lines
2.7 KiB
Go
123 lines
2.7 KiB
Go
package util
|
|
|
|
// download from https://raw.githubusercontent.com/grpc-ecosystem/grpc-gateway/master/protoc-gen-grpc-gateway/httprule/compile_test.go
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
const (
|
|
operandFiller = 0
|
|
)
|
|
|
|
func TestCompile(t *testing.T) {
|
|
for _, spec := range []struct {
|
|
segs []segment
|
|
verb string
|
|
|
|
ops []int
|
|
pool []string
|
|
fields []string
|
|
}{
|
|
{},
|
|
{
|
|
segs: []segment{
|
|
wildcard{},
|
|
},
|
|
ops: []int{int(OpPush), operandFiller},
|
|
},
|
|
{
|
|
segs: []segment{
|
|
deepWildcard{},
|
|
},
|
|
ops: []int{int(OpPushM), operandFiller},
|
|
},
|
|
{
|
|
segs: []segment{
|
|
literal("v1"),
|
|
},
|
|
ops: []int{int(OpLitPush), 0},
|
|
pool: []string{"v1"},
|
|
},
|
|
{
|
|
segs: []segment{
|
|
literal("v1"),
|
|
},
|
|
verb: "LOCK",
|
|
ops: []int{int(OpLitPush), 0},
|
|
pool: []string{"v1"},
|
|
},
|
|
{
|
|
segs: []segment{
|
|
variable{
|
|
path: "name.nested",
|
|
segments: []segment{
|
|
wildcard{},
|
|
},
|
|
},
|
|
},
|
|
ops: []int{
|
|
int(OpPush), operandFiller,
|
|
int(OpConcatN), 1,
|
|
int(OpCapture), 0,
|
|
},
|
|
pool: []string{"name.nested"},
|
|
fields: []string{"name.nested"},
|
|
},
|
|
{
|
|
segs: []segment{
|
|
literal("obj"),
|
|
variable{
|
|
path: "name.nested",
|
|
segments: []segment{
|
|
literal("a"),
|
|
wildcard{},
|
|
literal("b"),
|
|
},
|
|
},
|
|
variable{
|
|
path: "obj",
|
|
segments: []segment{
|
|
deepWildcard{},
|
|
},
|
|
},
|
|
},
|
|
ops: []int{
|
|
int(OpLitPush), 0,
|
|
int(OpLitPush), 1,
|
|
int(OpPush), operandFiller,
|
|
int(OpLitPush), 2,
|
|
int(OpConcatN), 3,
|
|
int(OpCapture), 3,
|
|
int(OpPushM), operandFiller,
|
|
int(OpConcatN), 1,
|
|
int(OpCapture), 0,
|
|
},
|
|
pool: []string{"obj", "a", "b", "name.nested"},
|
|
fields: []string{"name.nested", "obj"},
|
|
},
|
|
} {
|
|
tmpl := template{
|
|
segments: spec.segs,
|
|
verb: spec.verb,
|
|
}
|
|
compiled := tmpl.Compile()
|
|
if got, want := compiled.Version, opcodeVersion; got != want {
|
|
t.Errorf("tmpl.Compile().Version = %d; want %d; segs=%#v, verb=%q", got, want, spec.segs, spec.verb)
|
|
}
|
|
if got, want := compiled.OpCodes, spec.ops; !reflect.DeepEqual(got, want) {
|
|
t.Errorf("tmpl.Compile().OpCodes = %v; want %v; segs=%#v, verb=%q", got, want, spec.segs, spec.verb)
|
|
}
|
|
if got, want := compiled.Pool, spec.pool; !reflect.DeepEqual(got, want) {
|
|
t.Errorf("tmpl.Compile().Pool = %q; want %q; segs=%#v, verb=%q", got, want, spec.segs, spec.verb)
|
|
}
|
|
if got, want := compiled.Verb, spec.verb; got != want {
|
|
t.Errorf("tmpl.Compile().Verb = %q; want %q; segs=%#v, verb=%q", got, want, spec.segs, spec.verb)
|
|
}
|
|
if got, want := compiled.Fields, spec.fields; !reflect.DeepEqual(got, want) {
|
|
t.Errorf("tmpl.Compile().Fields = %q; want %q; segs=%#v, verb=%q", got, want, spec.segs, spec.verb)
|
|
}
|
|
}
|
|
}
|