48 lines
1.1 KiB
Go
48 lines
1.1 KiB
Go
|
package limit
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
"testing"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
srv LimitService
|
||
|
option LimitOption
|
||
|
)
|
||
|
|
||
|
func init() {
|
||
|
option = LimitOption{
|
||
|
LimitMillisecond: 100,
|
||
|
Burst: 1,
|
||
|
}
|
||
|
srv = NewLimitService(option)
|
||
|
}
|
||
|
|
||
|
func TestLimitServiceProvider_Consume(t *testing.T) {
|
||
|
for i := 0; i < 10; i++ {
|
||
|
if err := srv.Consume(); err != nil {
|
||
|
fmt.Printf("%v consume failed, error: %v\n", i, err.Error())
|
||
|
} else {
|
||
|
fmt.Printf("%v consume success\n", i)
|
||
|
}
|
||
|
// sleep time比option.limitMillisecond的值略少一点是为了构造error情况
|
||
|
time.Sleep(time.Duration(option.LimitMillisecond-1) * time.Millisecond)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestLimitServiceProvider_ConsumeWithContext(t *testing.T) {
|
||
|
var blag int64 = 0
|
||
|
for i := 0; i < 10; i++ {
|
||
|
ctx, cancel := context.WithTimeout(context.Background(), time.Duration(option.LimitMillisecond-blag)*time.Millisecond)
|
||
|
defer cancel()
|
||
|
if err := srv.ConsumeWithContext(ctx); err != nil {
|
||
|
fmt.Printf("%v consume failed, error: %v\n", i, err.Error())
|
||
|
} else {
|
||
|
fmt.Printf("%v consume success\n", i)
|
||
|
}
|
||
|
blag = 1 - blag
|
||
|
}
|
||
|
}
|