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.
101 lines
1.8 KiB
101 lines
1.8 KiB
6 years ago
|
package breaker
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
"testing"
|
||
|
"time"
|
||
|
|
||
|
xtime "github.com/bilibili/kratos/pkg/time"
|
||
|
)
|
||
|
|
||
|
func TestGroup(t *testing.T) {
|
||
|
g1 := NewGroup(nil)
|
||
|
g2 := NewGroup(_conf)
|
||
|
if g1.conf != g2.conf {
|
||
|
t.FailNow()
|
||
|
}
|
||
|
|
||
|
brk := g2.Get("key")
|
||
|
brk1 := g2.Get("key1")
|
||
|
if brk == brk1 {
|
||
|
t.FailNow()
|
||
|
}
|
||
|
brk2 := g2.Get("key")
|
||
|
if brk != brk2 {
|
||
|
t.FailNow()
|
||
|
}
|
||
|
|
||
|
g := NewGroup(_conf)
|
||
|
c := &Config{
|
||
|
Window: xtime.Duration(1 * time.Second),
|
||
|
Sleep: xtime.Duration(100 * time.Millisecond),
|
||
|
Bucket: 10,
|
||
|
Ratio: 0.5,
|
||
|
Request: 100,
|
||
|
SwitchOff: !_conf.SwitchOff,
|
||
|
}
|
||
|
g.Reload(c)
|
||
|
if g.conf.SwitchOff == _conf.SwitchOff {
|
||
|
t.FailNow()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestInit(t *testing.T) {
|
||
|
switchOff := _conf.SwitchOff
|
||
|
c := &Config{
|
||
|
Window: xtime.Duration(3 * time.Second),
|
||
|
Sleep: xtime.Duration(100 * time.Millisecond),
|
||
|
Bucket: 10,
|
||
|
Ratio: 0.5,
|
||
|
Request: 100,
|
||
|
SwitchOff: !switchOff,
|
||
|
}
|
||
|
Init(c)
|
||
|
if _conf.SwitchOff == switchOff {
|
||
|
t.FailNow()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestGo(t *testing.T) {
|
||
|
if err := Go("test_run", func() error {
|
||
|
t.Log("breaker allow,callback run()")
|
||
|
return nil
|
||
|
}, func() error {
|
||
|
t.Log("breaker not allow,callback fallback()")
|
||
|
return errors.New("breaker not allow")
|
||
|
}); err != nil {
|
||
|
t.Error(err)
|
||
|
}
|
||
|
|
||
|
_group.Reload(&Config{
|
||
|
Window: xtime.Duration(3 * time.Second),
|
||
|
Sleep: xtime.Duration(100 * time.Millisecond),
|
||
|
Bucket: 10,
|
||
|
Ratio: 0.5,
|
||
|
Request: 100,
|
||
|
SwitchOff: true,
|
||
|
})
|
||
|
|
||
|
if err := Go("test_fallback", func() error {
|
||
|
t.Log("breaker allow,callback run()")
|
||
|
return nil
|
||
|
}, func() error {
|
||
|
t.Log("breaker not allow,callback fallback()")
|
||
|
return nil
|
||
|
}); err != nil {
|
||
|
t.Error(err)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func markSuccess(b Breaker, count int) {
|
||
|
for i := 0; i < count; i++ {
|
||
|
b.MarkSuccess()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func markFailed(b Breaker, count int) {
|
||
|
for i := 0; i < count; i++ {
|
||
|
b.MarkFailed()
|
||
|
}
|
||
|
}
|