feat: trigger breaker on underlying service timeout (#4112)

This commit is contained in:
Kevin Wan
2024-04-30 19:01:20 +08:00
committed by GitHub
parent a9d27cda8a
commit b3cd8a32ed
2 changed files with 70 additions and 7 deletions

View File

@@ -29,6 +29,15 @@ func TestUnaryBreakerInterceptor(t *testing.T) {
assert.NotNil(t, err)
}
func TestUnaryBreakerInterceptorOK(t *testing.T) {
_, err := UnaryBreakerInterceptor(context.Background(), nil, &grpc.UnaryServerInfo{
FullMethod: "any",
}, func(_ context.Context, _ any) (any, error) {
return nil, nil
})
assert.NoError(t, err)
}
func TestUnaryBreakerInterceptor_Unavailable(t *testing.T) {
_, err := UnaryBreakerInterceptor(context.Background(), nil, &grpc.UnaryServerInfo{
FullMethod: "any",
@@ -36,4 +45,37 @@ func TestUnaryBreakerInterceptor_Unavailable(t *testing.T) {
return nil, breaker.ErrServiceUnavailable
})
assert.NotNil(t, err)
code := status.Code(err)
assert.Equal(t, codes.Unavailable, code)
}
func TestUnaryBreakerInterceptor_Deadline(t *testing.T) {
for i := 0; i < 1000; i++ {
_, err := UnaryBreakerInterceptor(context.Background(), nil, &grpc.UnaryServerInfo{
FullMethod: "any",
}, func(_ context.Context, _ any) (any, error) {
return nil, context.DeadlineExceeded
})
switch status.Code(err) {
case codes.Unavailable:
default:
assert.Equal(t, context.DeadlineExceeded, err)
}
}
var dropped bool
for i := 0; i < 100; i++ {
_, err := UnaryBreakerInterceptor(context.Background(), nil, &grpc.UnaryServerInfo{
FullMethod: "any",
}, func(_ context.Context, _ any) (any, error) {
return nil, context.DeadlineExceeded
})
switch status.Code(err) {
case codes.Unavailable:
dropped = true
default:
assert.Equal(t, context.DeadlineExceeded, err)
}
}
assert.True(t, dropped)
}