...

Source file src/github.com/grpc-ecosystem/go-grpc-middleware/ratelimit/ratelimit_test.go

Documentation: github.com/grpc-ecosystem/go-grpc-middleware/ratelimit

     1  package ratelimit
     2  
     3  import (
     4  	"context"
     5  	"errors"
     6  	"testing"
     7  
     8  	"google.golang.org/grpc"
     9  
    10  	"github.com/stretchr/testify/assert"
    11  )
    12  
    13  const errMsgFake = "fake error"
    14  
    15  type mockPassLimiter struct{}
    16  
    17  func (*mockPassLimiter) Limit() bool {
    18  	return false
    19  }
    20  
    21  func TestUnaryServerInterceptor_RateLimitPass(t *testing.T) {
    22  	interceptor := UnaryServerInterceptor(&mockPassLimiter{})
    23  	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
    24  		return nil, errors.New(errMsgFake)
    25  	}
    26  	info := &grpc.UnaryServerInfo{
    27  		FullMethod: "FakeMethod",
    28  	}
    29  	resp, err := interceptor(nil, nil, info, handler)
    30  	assert.Nil(t, resp)
    31  	assert.EqualError(t, err, errMsgFake)
    32  }
    33  
    34  type mockFailLimiter struct{}
    35  
    36  func (*mockFailLimiter) Limit() bool {
    37  	return true
    38  }
    39  
    40  func TestUnaryServerInterceptor_RateLimitFail(t *testing.T) {
    41  	interceptor := UnaryServerInterceptor(&mockFailLimiter{})
    42  	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
    43  		return nil, errors.New(errMsgFake)
    44  	}
    45  	info := &grpc.UnaryServerInfo{
    46  		FullMethod: "FakeMethod",
    47  	}
    48  	resp, err := interceptor(nil, nil, info, handler)
    49  	assert.Nil(t, resp)
    50  	assert.EqualError(t, err, "rpc error: code = ResourceExhausted desc = FakeMethod is rejected by grpc_ratelimit middleware, please retry later.")
    51  }
    52  
    53  func TestStreamServerInterceptor_RateLimitPass(t *testing.T) {
    54  	interceptor := StreamServerInterceptor(&mockPassLimiter{})
    55  	handler := func(srv interface{}, stream grpc.ServerStream) error {
    56  		return errors.New(errMsgFake)
    57  	}
    58  	info := &grpc.StreamServerInfo{
    59  		FullMethod: "FakeMethod",
    60  	}
    61  	err := interceptor(nil, nil, info, handler)
    62  	assert.EqualError(t, err, errMsgFake)
    63  }
    64  
    65  func TestStreamServerInterceptor_RateLimitFail(t *testing.T) {
    66  	interceptor := StreamServerInterceptor(&mockFailLimiter{})
    67  	handler := func(srv interface{}, stream grpc.ServerStream) error {
    68  		return errors.New(errMsgFake)
    69  	}
    70  	info := &grpc.StreamServerInfo{
    71  		FullMethod: "FakeMethod",
    72  	}
    73  	err := interceptor(nil, nil, info, handler)
    74  	assert.EqualError(t, err, "rpc error: code = ResourceExhausted desc = FakeMethod is rejected by grpc_ratelimit middleware, please retry later.")
    75  }
    76  

View as plain text