2021-12-15 22:12:40 +01:00
|
|
|
package util
|
|
|
|
|
|
|
|
import (
|
2022-01-02 23:56:12 +01:00
|
|
|
"bytes"
|
2021-12-15 22:12:40 +01:00
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestLimiter_Add(t *testing.T) {
|
|
|
|
l := NewLimiter(10)
|
|
|
|
if err := l.Add(5); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
if err := l.Add(5); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
if err := l.Add(5); err != ErrLimitReached {
|
|
|
|
t.Fatalf("expected ErrLimitReached, got %#v", err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-01-02 23:56:12 +01:00
|
|
|
func TestLimiter_AddSet(t *testing.T) {
|
2021-12-15 22:12:40 +01:00
|
|
|
l := NewLimiter(10)
|
|
|
|
l.Add(5)
|
|
|
|
if l.Value() != 5 {
|
|
|
|
t.Fatalf("expected value to be %d, got %d", 5, l.Value())
|
|
|
|
}
|
2022-01-02 23:56:12 +01:00
|
|
|
l.Set(7)
|
|
|
|
if l.Value() != 7 {
|
|
|
|
t.Fatalf("expected value to be %d, got %d", 7, l.Value())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestLimitWriter_WriteNoLimiter(t *testing.T) {
|
|
|
|
var buf bytes.Buffer
|
|
|
|
lw := NewLimitWriter(&buf)
|
|
|
|
if _, err := lw.Write(make([]byte, 10)); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
if _, err := lw.Write(make([]byte, 1)); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
if buf.Len() != 11 {
|
|
|
|
t.Fatalf("expected buffer length to be %d, got %d", 11, buf.Len())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestLimitWriter_WriteOneLimiter(t *testing.T) {
|
|
|
|
var buf bytes.Buffer
|
|
|
|
l := NewLimiter(10)
|
|
|
|
lw := NewLimitWriter(&buf, l)
|
|
|
|
if _, err := lw.Write(make([]byte, 10)); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
if _, err := lw.Write(make([]byte, 1)); err != ErrLimitReached {
|
|
|
|
t.Fatalf("expected ErrLimitReached, got %#v", err)
|
|
|
|
}
|
|
|
|
if buf.Len() != 10 {
|
|
|
|
t.Fatalf("expected buffer length to be %d, got %d", 10, buf.Len())
|
|
|
|
}
|
|
|
|
if l.Value() != 10 {
|
|
|
|
t.Fatalf("expected limiter value to be %d, got %d", 10, l.Value())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestLimitWriter_WriteTwoLimiters(t *testing.T) {
|
|
|
|
var buf bytes.Buffer
|
|
|
|
l1 := NewLimiter(11)
|
|
|
|
l2 := NewLimiter(9)
|
|
|
|
lw := NewLimitWriter(&buf, l1, l2)
|
|
|
|
if _, err := lw.Write(make([]byte, 8)); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
if _, err := lw.Write(make([]byte, 2)); err != ErrLimitReached {
|
|
|
|
t.Fatalf("expected ErrLimitReached, got %#v", err)
|
|
|
|
}
|
|
|
|
if buf.Len() != 8 {
|
|
|
|
t.Fatalf("expected buffer length to be %d, got %d", 8, buf.Len())
|
|
|
|
}
|
|
|
|
if l1.Value() != 8 {
|
|
|
|
t.Fatalf("expected limiter 1 value to be %d, got %d", 8, l1.Value())
|
|
|
|
}
|
|
|
|
if l2.Value() != 8 {
|
|
|
|
t.Fatalf("expected limiter 2 value to be %d, got %d", 8, l2.Value())
|
2021-12-15 22:12:40 +01:00
|
|
|
}
|
|
|
|
}
|