mirror of
https://github.com/zeromicro/go-zero.git
synced 2026-05-11 00:40:00 +08:00
feat: trigger breaker on underlying service timeout (#4112)
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user