github.com/avenga/couper@v1.12.2/handler/ratelimit/ring_buffer_internal_test.go (about)

     1  package ratelimit
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  )
     7  
     8  func TestRingBuffer_New(t *testing.T) {
     9  	r := newRingBuffer(3)
    10  
    11  	if len(r.buf) != 3 {
    12  		t.Errorf("Unexpected r.buf: %#v", r.buf)
    13  	}
    14  	if r.len != 3 {
    15  		t.Errorf("Unexpected r.len: %d", r.len)
    16  	}
    17  	if r.r != 0 {
    18  		t.Errorf("Unexpected r.r: %d", r.r)
    19  	}
    20  	if r.w != 2 {
    21  		t.Errorf("Unexpected r.w: %d", r.w)
    22  	}
    23  }
    24  
    25  func TestRingBuffer_Put(t *testing.T) {
    26  	now1 := time.Now()
    27  	now2 := time.Now()
    28  	now3 := time.Now()
    29  	now4 := time.Now()
    30  
    31  	r := newRingBuffer(3)
    32  
    33  	if !r.buf[0].IsZero() {
    34  		t.Errorf("Unexpected r.buf[0]: %#v", r.buf[0])
    35  	}
    36  	if !r.buf[1].IsZero() {
    37  		t.Errorf("Unexpected r.buf[1]: %#v", r.buf[1])
    38  	}
    39  	if !r.buf[2].IsZero() {
    40  		t.Errorf("Unexpected r.buf[2]: %#v", r.buf[2])
    41  	}
    42  	if got := r.get(); !got.IsZero() {
    43  		t.Errorf("Unexpected r.get(): %#v", got)
    44  	}
    45  
    46  	r.put(now1)
    47  
    48  	if !r.buf[0].Equal(now1) {
    49  		t.Errorf("Unexpected r.buf[0]: %#v", r.buf[0])
    50  	}
    51  	if !r.buf[1].IsZero() {
    52  		t.Errorf("Unexpected r.buf[1]: %#v", r.buf[1])
    53  	}
    54  	if !r.buf[2].IsZero() {
    55  		t.Errorf("Unexpected r.buf[2]: %#v", r.buf[2])
    56  	}
    57  	if got := r.get(); !got.IsZero() {
    58  		t.Errorf("Unexpected r.get(): %#v", got)
    59  	}
    60  
    61  	if r.r != 1 {
    62  		t.Errorf("Unexpected r.r: %d", r.r)
    63  	}
    64  	if r.w != 0 {
    65  		t.Errorf("Unexpected r.w: %d", r.w)
    66  	}
    67  
    68  	r.put(now2)
    69  
    70  	if !r.buf[0].Equal(now1) {
    71  		t.Errorf("Unexpected r.buf[0]: %#v", r.buf[0])
    72  	}
    73  	if !r.buf[1].Equal(now2) {
    74  		t.Errorf("Unexpected r.buf[1]: %#v", r.buf[1])
    75  	}
    76  	if !r.buf[2].IsZero() {
    77  		t.Errorf("Unexpected r.buf[2]: %#v", r.buf[2])
    78  	}
    79  	if got := r.get(); !got.IsZero() {
    80  		t.Errorf("Unexpected r.get(): %#v", got)
    81  	}
    82  
    83  	if r.r != 2 {
    84  		t.Errorf("Unexpected r.r: %d", r.r)
    85  	}
    86  	if r.w != 1 {
    87  		t.Errorf("Unexpected r.w: %d", r.w)
    88  	}
    89  
    90  	r.put(now3)
    91  
    92  	if !r.buf[0].Equal(now1) {
    93  		t.Errorf("Unexpected r.buf[0]: %#v", r.buf[0])
    94  	}
    95  	if !r.buf[1].Equal(now2) {
    96  		t.Errorf("Unexpected r.buf[1]: %#v", r.buf[1])
    97  	}
    98  	if !r.buf[2].Equal(now3) {
    99  		t.Errorf("Unexpected r.buf[2]: %#v", r.buf[2])
   100  	}
   101  	if got := r.get(); !got.Equal(now1) {
   102  		// now1 is the oldest value in the buffer after r.put(now3)
   103  		t.Errorf("Unexpected r.get(): %#v", got)
   104  	}
   105  
   106  	if r.r != 0 {
   107  		t.Errorf("Unexpected r.r: %d", r.r)
   108  	}
   109  	if r.w != 2 {
   110  		t.Errorf("Unexpected r.w: %d", r.w)
   111  	}
   112  
   113  	r.put(now4)
   114  
   115  	if !r.buf[0].Equal(now4) {
   116  		t.Errorf("Unexpected r.buf[0]: %#v", r.buf[0])
   117  	}
   118  	if !r.buf[1].Equal(now2) {
   119  		t.Errorf("Unexpected r.buf[1]: %#v", r.buf[1])
   120  	}
   121  	if !r.buf[2].Equal(now3) {
   122  		t.Errorf("Unexpected r.buf[2]: %#v", r.buf[2])
   123  	}
   124  	if got := r.get(); !got.Equal(now2) {
   125  		// now2 is the oldest value in the buffer after r.put(now4)
   126  		t.Errorf("Unexpected r.get(): %#v", got)
   127  	}
   128  
   129  	if r.r != 1 {
   130  		t.Errorf("Unexpected r.r: %d", r.r)
   131  	}
   132  	if r.w != 0 {
   133  		t.Errorf("Unexpected r.w: %d", r.w)
   134  	}
   135  }