github.com/teng231/glock@v1.1.11/limiter_test.go (about) 1 package glock 2 3 import ( 4 "log" 5 "sync" 6 "testing" 7 "time" 8 9 "github.com/golang-module/carbon/v2" 10 ) 11 12 func TestAllowhour(t *testing.T) { 13 r, err := CreateLimiter("localhost:6379", "", 2*time.Second) 14 if err != nil { 15 panic(err) 16 } 17 if err := r.Allow("key2", Hour, 5); err != nil { 18 log.Print(err) 19 } 20 21 } 22 func TestAllowSec(t *testing.T) { 23 r, err := CreateLimiter("localhost:6379", "", 2*time.Second) 24 if err != nil { 25 panic(err) 26 } 27 if err := r.Allow("key1", Second, 5); err != nil { 28 log.Print(err) 29 } 30 if err := r.Allow("key1", Second, 5); err != nil { 31 log.Print(err) 32 } 33 if err := r.Allow("key1", Second, 5); err != nil { 34 log.Print(err) 35 } 36 if err := r.Allow("key1", Second, 5); err != nil { 37 log.Print(err) 38 } 39 if err := r.Allow("key1", Second, 5); err != nil { 40 log.Print(err) 41 } 42 if err := r.Allow("key1", Second, 5); err != nil { 43 log.Print(err) 44 } 45 time.Sleep(1 * time.Second) 46 if err := r.Allow("key1", Second, 5); err != nil { 47 log.Print(err) 48 } 49 } 50 51 func BenchmarkAllow100t(t *testing.B) { 52 r, err := CreateLimiter("localhost:6379", "", 2*time.Second) 53 if err != nil { 54 panic(err) 55 } 56 57 for i := 0; i < 100; i++ { 58 if err := r.Allow("key2", Second, 5); err != nil { 59 log.Print(err) 60 } 61 } 62 } 63 64 func BenchmarkAllow10000t(t *testing.B) { 65 r, err := CreateLimiter("localhost:6379", "", 2*time.Second) 66 if err != nil { 67 panic(err) 68 } 69 70 for i := 0; i < 100; i++ { 71 if err := r.Allow("key2", Second, 5); err != nil { 72 log.Print(err) 73 } 74 } 75 } 76 77 func BenchmarkAllow10000tMiltiple(t *testing.B) { 78 r, err := CreateLimiter("localhost:6379", "", 2*time.Second) 79 if err != nil { 80 panic(err) 81 } 82 buf := make(chan int, 20) 83 wg := &sync.WaitGroup{} 84 for i := 0; i < 20; i++ { 85 go func() { 86 for { 87 <-buf 88 if err := r.Allow("key2", Second, 5); err != nil { 89 log.Print(err) 90 } 91 wg.Done() 92 } 93 }() 94 } 95 for i := 0; i < 10000; i++ { 96 buf <- i 97 wg.Add(1) 98 } 99 wg.Wait() 100 } 101 102 func TestAllowInDay(t *testing.T) { 103 r, _ := StartLimiter(&ConnectConfig{ 104 RedisAddr: "localhost:6379", 105 Timelock: 2 * time.Second, 106 }) 107 r.Reset("rate:key8") 108 if err := r.Allow("key8", Day, 5); err != nil { 109 log.Print(err) 110 } 111 time.Sleep(2 * time.Second) 112 if err := r.Allow("key8", Day, 5); err != nil { 113 log.Print(err) 114 } 115 if err := r.Allow("key8", Day, 5); err != nil { 116 log.Print(err) 117 } 118 if err := r.Allow("key8", Day, 5); err != nil { 119 log.Print(err) 120 } 121 if err := r.Allow("key8", Day, 5); err != nil { 122 log.Print(err) 123 } 124 if err := r.Allow("key8", Day, 5); err != nil { 125 log.Print(err) 126 } 127 } 128 129 func TestDiff2Day(t *testing.T) { 130 now := time.Now() 131 132 weekDay := carbon.Time2Carbon(now).SetWeekStartsAt(carbon.Monday).EndOfWeek() 133 hours := carbon.Time2Carbon(now).DiffAbsInHours(weekDay) 134 log.Print("weekDay:", weekDay, " hours: ", hours) 135 } 136 137 func TestDiff2Hour(t *testing.T) { 138 now := time.Now() 139 endOfday := carbon.Time2Carbon(now).EndOfDay() 140 secs := carbon.Time2Carbon(now).DiffAbsInSeconds(endOfday) 141 log.Print("end of day:", endOfday, " hours: ", secs) 142 } 143 144 func TestWeek(t *testing.T) { 145 endOfWeekday := carbon.Now().SetWeekStartsAt(carbon.Monday).EndOfWeek().EndOfDay() 146 hours := carbon.Now().DiffAbsInHours(endOfWeekday) 147 log.Print(endOfWeekday.Carbon2Time().Unix(), " ", hours) 148 } 149 150 func TestAllowInWeek(t *testing.T) { 151 r, _ := StartLimiter(&ConnectConfig{ 152 RedisAddr: "localhost:6379", 153 Timelock: 3 * time.Second, 154 }) 155 r.Reset("key9") 156 if err := r.Allow("key9", Week, 5); err != nil { 157 log.Print(err) 158 } 159 time.Sleep(2 * time.Second) 160 if err := r.Allow("key9", Week, 5); err != nil { 161 log.Print(err) 162 } 163 if err := r.Allow("key9", Week, 5); err != nil { 164 log.Print(err) 165 } 166 if err := r.Allow("key9", Week, 5); err != nil { 167 log.Print(err) 168 } 169 if err := r.Allow("key9", Week, 5); err != nil { 170 log.Print(err) 171 } 172 if err := r.Allow("key9", Week, 5); err != nil { 173 log.Print(err) 174 } 175 }