add more tests
parent
59ba4ecc5b
commit
b82c02ed16
@ -0,0 +1,55 @@
|
|||||||
|
package serverinterceptors
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/alicebob/miniredis"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"github.com/tal-tech/go-zero/core/stores/redis"
|
||||||
|
"github.com/tal-tech/go-zero/rpcx/internal/auth"
|
||||||
|
"google.golang.org/grpc/metadata"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestUnaryAuthorizeInterceptor(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
strict bool
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "strict=true",
|
||||||
|
strict: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "strict=false",
|
||||||
|
strict: false,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
r := miniredis.NewMiniRedis()
|
||||||
|
assert.Nil(t, r.Start())
|
||||||
|
defer r.Close()
|
||||||
|
|
||||||
|
for _, test := range tests {
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
store := redis.NewRedis(r.Addr(), redis.NodeType)
|
||||||
|
authenticator, err := auth.NewAuthenticator(store, "apps", test.strict)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
interceptor := UnaryAuthorizeInterceptor(authenticator)
|
||||||
|
md := metadata.New(map[string]string{
|
||||||
|
"app": "name",
|
||||||
|
"token": "key",
|
||||||
|
})
|
||||||
|
ctx := metadata.NewIncomingContext(context.Background(), md)
|
||||||
|
_, err = interceptor(ctx, nil, nil,
|
||||||
|
func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
return nil, nil
|
||||||
|
})
|
||||||
|
if test.strict {
|
||||||
|
assert.NotNil(t, err)
|
||||||
|
} else {
|
||||||
|
assert.Nil(t, err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
package serverinterceptors
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"google.golang.org/grpc"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestUnaryPromMetricInterceptor(t *testing.T) {
|
||||||
|
interceptor := UnaryPromMetricInterceptor()
|
||||||
|
_, err := interceptor(context.Background(), nil, &grpc.UnaryServerInfo{
|
||||||
|
FullMethod: "/",
|
||||||
|
}, func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
return nil, nil
|
||||||
|
})
|
||||||
|
assert.Nil(t, err)
|
||||||
|
}
|
@ -0,0 +1,77 @@
|
|||||||
|
package serverinterceptors
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"github.com/tal-tech/go-zero/core/load"
|
||||||
|
"github.com/tal-tech/go-zero/core/stat"
|
||||||
|
"google.golang.org/grpc"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestUnarySheddingInterceptor(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
allow bool
|
||||||
|
handleErr error
|
||||||
|
expect error
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "allow",
|
||||||
|
allow: true,
|
||||||
|
handleErr: nil,
|
||||||
|
expect: nil,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "allow",
|
||||||
|
allow: true,
|
||||||
|
handleErr: context.DeadlineExceeded,
|
||||||
|
expect: context.DeadlineExceeded,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "reject",
|
||||||
|
allow: false,
|
||||||
|
handleErr: nil,
|
||||||
|
expect: load.ErrServiceOverloaded,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range tests {
|
||||||
|
test := test
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
shedder := mockedShedder{allow: test.allow}
|
||||||
|
metrics := stat.NewMetrics("mock")
|
||||||
|
interceptor := UnarySheddingInterceptor(shedder, metrics)
|
||||||
|
_, err := interceptor(context.Background(), nil, &grpc.UnaryServerInfo{
|
||||||
|
FullMethod: "/",
|
||||||
|
}, func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
return nil, test.handleErr
|
||||||
|
})
|
||||||
|
assert.Equal(t, test.expect, err)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type mockedShedder struct {
|
||||||
|
allow bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m mockedShedder) Allow() (load.Promise, error) {
|
||||||
|
if m.allow {
|
||||||
|
return mockedPromise{}, nil
|
||||||
|
} else {
|
||||||
|
return nil, load.ErrServiceOverloaded
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type mockedPromise struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m mockedPromise) Pass() {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m mockedPromise) Fail() {
|
||||||
|
}
|
Loading…
Reference in New Issue