package applicant_test import ( "testing" "time" "golang.org/x/time/rate" ) func TestRateLimit(t *testing.T) { tests := []struct { name string burst int rate rate.Limit }{ { name: "test1", burst: 300, rate: rate.Limit(float64(1) / float64(20)), }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { rl := rate.NewLimiter(tt.rate, tt.burst) if rl.Burst() != tt.burst { t.Errorf("Burst() = %v, want %v", rl.Burst(), tt.burst) } if rl.Limit() != tt.rate { t.Errorf("Limit() = %v, want %v", rl.Limit(), tt.rate) } t.Log("consume all tokens at once", rl.AllowN(time.Now(), tt.burst)) t.Log("consume more", rl.Allow()) time.Sleep(time.Second * 5) t.Log("consume after 5 seconds", rl.Allow()) time.Sleep(time.Second * 20) t.Log("consume after 20 seconds", rl.Allow()) }) } }