浏览代码

add more tests

kevin 4 年之前
父节点
当前提交
b82c02ed16

+ 55 - 0
rpcx/internal/serverinterceptors/authinterceptor_test.go

@@ -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)
+			}
+		})
+	}
+}

+ 4 - 4
rpcx/internal/serverinterceptors/crashinterceptor_test.go

@@ -23,9 +23,9 @@ func TestStreamCrashInterceptor(t *testing.T) {
 
 func TestUnaryCrashInterceptor(t *testing.T) {
 	interceptor := UnaryCrashInterceptor()
-	_, err := interceptor(context.Background(), nil, nil, func(
-		ctx context.Context, req interface{}) (interface{}, error) {
-		panic("mock panic")
-	})
+	_, err := interceptor(context.Background(), nil, nil,
+		func(ctx context.Context, req interface{}) (interface{}, error) {
+			panic("mock panic")
+		})
 	assert.NotNil(t, err)
 }

+ 19 - 0
rpcx/internal/serverinterceptors/prommetricinterceptor_test.go

@@ -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)
+}

+ 77 - 0
rpcx/internal/serverinterceptors/sheddinginterceptor_test.go

@@ -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() {
+}

+ 12 - 2
rpcx/internal/serverinterceptors/statinterceptor_test.go

@@ -14,9 +14,19 @@ func TestUnaryStatInterceptor(t *testing.T) {
 	interceptor := UnaryStatInterceptor(metrics)
 	_, err := interceptor(context.Background(), nil, &grpc.UnaryServerInfo{
 		FullMethod: "/",
-	}, func(
-		ctx context.Context, req interface{}) (interface{}, error) {
+	}, func(ctx context.Context, req interface{}) (interface{}, error) {
 		return nil, nil
 	})
 	assert.Nil(t, err)
 }
+
+func TestUnaryStatInterceptor_crash(t *testing.T) {
+	metrics := stat.NewMetrics("mock")
+	interceptor := UnaryStatInterceptor(metrics)
+	_, err := interceptor(context.Background(), nil, &grpc.UnaryServerInfo{
+		FullMethod: "/",
+	}, func(ctx context.Context, req interface{}) (interface{}, error) {
+		panic("error")
+	})
+	assert.NotNil(t, err)
+}