You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
1.7 KiB
80 lines
1.7 KiB
3 years ago
|
package circuitbreaker
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"errors"
|
||
|
"testing"
|
||
|
|
||
|
kratos_errors "github.com/go-kratos/kratos/v2/errors"
|
||
|
"github.com/go-kratos/kratos/v2/internal/group"
|
||
|
"github.com/go-kratos/kratos/v2/transport"
|
||
|
)
|
||
|
|
||
|
type transportMock struct {
|
||
|
kind transport.Kind
|
||
|
endpoint string
|
||
|
operation string
|
||
|
}
|
||
|
|
||
|
type circuitBreakerMock struct {
|
||
|
err error
|
||
|
}
|
||
|
|
||
|
func (tr *transportMock) Kind() transport.Kind {
|
||
|
return tr.kind
|
||
|
}
|
||
|
|
||
|
func (tr *transportMock) Endpoint() string {
|
||
|
return tr.endpoint
|
||
|
}
|
||
|
|
||
|
func (tr *transportMock) Operation() string {
|
||
|
return tr.operation
|
||
|
}
|
||
|
|
||
|
func (tr *transportMock) RequestHeader() transport.Header {
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (tr *transportMock) ReplyHeader() transport.Header {
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (c *circuitBreakerMock) Allow() error { return c.err }
|
||
|
func (c *circuitBreakerMock) MarkSuccess() {}
|
||
|
func (c *circuitBreakerMock) MarkFailed() {}
|
||
|
|
||
|
func Test_WithGroup(t *testing.T) {
|
||
|
o := options{
|
||
|
group: group.NewGroup(func() interface{} {
|
||
|
return ""
|
||
|
}),
|
||
|
}
|
||
|
|
||
|
WithGroup(nil)(&o)
|
||
|
if o.group != nil {
|
||
|
t.Error("The group property must be updated to nil.")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func Test_Server(t *testing.T) {
|
||
|
nextValid := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||
|
return "Hello valid", nil
|
||
|
}
|
||
|
nextInvalid := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||
|
return nil, kratos_errors.InternalServer("", "")
|
||
|
}
|
||
|
|
||
|
ctx := transport.NewClientContext(context.Background(), &transportMock{})
|
||
|
|
||
|
_, _ = Client(func(o *options) {
|
||
|
o.group = group.NewGroup(func() interface{} {
|
||
|
return &circuitBreakerMock{err: errors.New("circuitbreaker error")}
|
||
|
})
|
||
|
})(nextValid)(ctx, nil)
|
||
|
|
||
|
_, _ = Client(func(_ *options) {})(nextValid)(ctx, nil)
|
||
|
|
||
|
_, _ = Client(func(_ *options) {})(nextInvalid)(ctx, nil)
|
||
|
}
|