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 }