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  }