1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- package antispam
- import (
- "context"
- "io/ioutil"
- "math/rand"
- "net/http"
- "strconv"
- "testing"
- "time"
- "go-common/app/interface/main/upload/model"
- "go-common/library/cache/redis"
- "go-common/library/container/pool"
- bm "go-common/library/net/http/blademaster"
- xtime "go-common/library/time"
- )
- func TestAntiSpamHandler(t *testing.T) {
- anti := New(
- &Config{
- On: true,
- Second: 1,
- N: 1,
- Hour: 1,
- M: 1,
- Redis: &redis.Config{
- Config: &pool.Config{
- Active: 10,
- Idle: 10,
- IdleTimeout: xtime.Duration(time.Second * 60),
- },
- Name: "test",
- Proto: "tcp",
- Addr: "172.16.33.54:6380",
- DialTimeout: xtime.Duration(time.Second),
- ReadTimeout: xtime.Duration(time.Second),
- WriteTimeout: xtime.Duration(time.Second),
- }}, GetGetRateLimit)
- engine := bm.New()
- engine.UseFunc(func(c *bm.Context) {
- mid, _ := strconv.ParseInt(c.Request.Form.Get("mid"), 10, 64)
- c.Set("mid", mid)
- c.Next()
- })
- engine.Use(anti.Handler())
- engine.GET("/antispam", func(c *bm.Context) {
- c.String(200, "pass")
- })
- go engine.Run(":18080")
- time.Sleep(time.Millisecond * 50)
- mid := rand.Int()
- _, content, err := httpGet("http://127.0.0.1:18080/antispam?mid=" + strconv.Itoa(mid) + "&bucket=a&dir=b")
- if err != nil {
- t.Logf("http get failed, err:=%v", err)
- t.FailNow()
- }
- if string(content) != "pass" {
- t.Logf("request should block by limiter, but passed")
- t.FailNow()
- }
- _, content, err = httpGet("http://127.0.0.1:18080/antispam?mid=" + strconv.Itoa(mid) + "&bucket=a&dir=b")
- if err != nil {
- t.Logf("http get failed, err:=%v", err)
- t.FailNow()
- }
- if string(content) == "pass" {
- t.Logf("request should block by limiter, but passed")
- t.FailNow()
- }
- engine.Server().Shutdown(context.TODO())
- }
- func httpGet(url string) (code int, content []byte, err error) {
- resp, err := http.Get(url)
- if err != nil {
- return
- }
- defer resp.Body.Close()
- content, err = ioutil.ReadAll(resp.Body)
- if err != nil {
- return
- }
- code = resp.StatusCode
- return
- }
- func GetGetRateLimit(bucket, dir string) (model.DirRateConfig, bool) {
- return model.DirRateConfig{
- SecondQPS: 1,
- CountQPS: 1,
- }, true
- }
|