diff options
Diffstat (limited to '')
-rw-r--r-- | conn_test.go | 128 |
1 files changed, 70 insertions, 58 deletions
diff --git a/conn_test.go b/conn_test.go index d6c284e..a97a5e9 100644 --- a/conn_test.go +++ b/conn_test.go @@ -1,39 +1,25 @@ package cache import ( - "fmt" + "strconv" "testing" "time" - "github.com/stretchr/testify/assert" + "errors" ) -func setupTestDB[K any, V any](t testing.TB) *DB[K, V] { - t.Helper() +func setupTestDB[K any, V any](tb testing.TB) *DB[K, V] { + tb.Helper() db, err := OpenMem[K, V]() - assert.NoError(t, err) - t.Cleanup(func() { + if err != nil { + tb.Fatalf("unexpected error: %v", err) + } + tb.Cleanup(func() { db.Close() }) - return &db -func TestDBConcurrentAccess(t *testing.T) { - db := setupTestDB[string, string](t) - - go func() { - for i := 0; i < 100; i++ { - db.Set(fmt.Sprintf("Key%d", i), "Value", 0) - } - }() - go func() { - for i := 0; i < 100; i++ { - db.GetValue(fmt.Sprintf("Key%d", i)) - } - }() - - // Allow some time for goroutines to complete - time.Sleep(1 * time.Second) + return &db } func TestDBGetSet(t *testing.T) { @@ -45,15 +31,22 @@ func TestDBGetSet(t *testing.T) { db := setupTestDB[string, string](t) want := "Value" - err := db.Set("Key", want, 1*time.Hour) - assert.NoError(t, err) + + if err := db.Set("Key", want, 1*time.Hour); err != nil { + t.Fatalf("unexpected error: %v", err) + } got, ttl, err := db.GetValue("Key") - assert.NoError(t, err) - assert.Equal(t, want, got) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if want != got { + t.Fatalf("expected: %v, got: %v", want, got) + } - now := time.Now() - assert.WithinDuration(t, now.Add(ttl), now.Add(1*time.Hour), 1*time.Millisecond) + if ttl.Round(time.Second) != 1*time.Hour { + t.Fatalf("expected duration %v, got: %v", time.Hour, ttl.Round(time.Second)) + } }) t.Run("Not Exists", func(t *testing.T) { @@ -61,8 +54,9 @@ func TestDBGetSet(t *testing.T) { db := setupTestDB[string, string](t) - _, _, err := db.GetValue("Key") - assert.ErrorIs(t, err, ErrKeyNotFound) + if _, _, err := db.GetValue("Key"); !errors.Is(err, ErrKeyNotFound) { + t.Fatalf("expected error: %v, got: %v", ErrKeyNotFound, err) + } }) t.Run("Update", func(t *testing.T) { @@ -70,16 +64,22 @@ func TestDBGetSet(t *testing.T) { db := setupTestDB[string, string](t) - err := db.Set("Key", "Other", 0) - assert.NoError(t, err) + if err := db.Set("Key", "Other", 0); err != nil { + t.Fatalf("expected no error, got: %v", err) + } want := "Value" - err = db.Set("Key", want, 0) - assert.NoError(t, err) + if err := db.Set("Key", want, 0); err != nil { + t.Fatalf("unexpected error: %v", err) + } got, _, err := db.GetValue("Key") - assert.NoError(t, err) - assert.Equal(t, want, got) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if want != got { + t.Fatalf("expected: %v, got: %v", want, got) + } }) t.Run("Key Expiry", func(t *testing.T) { @@ -87,13 +87,15 @@ func TestDBGetSet(t *testing.T) { db := setupTestDB[string, string](t) - err := db.Set("Key", "Value", 500*time.Millisecond) - assert.NoError(t, err) + if err := db.Set("Key", "Value", 500*time.Millisecond); err != nil { + t.Fatalf("unexpected error: %v", err) + } time.Sleep(600 * time.Millisecond) - _, _, err = db.GetValue("Key") - assert.ErrorIs(t, err, ErrKeyNotFound) + if _, _, err := db.GetValue("Key"); !errors.Is(err, ErrKeyNotFound) { + t.Fatalf("expected error: %v, got: %v", ErrKeyNotFound, err) + } }) } @@ -105,14 +107,17 @@ func TestDBDelete(t *testing.T) { db := setupTestDB[string, string](t) want := "Value" - err := db.Set("Key", want, 0) - assert.NoError(t, err) + if err := db.Set("Key", want, 0); err != nil { + t.Fatalf("unexpected error: %v", err) + } - err = db.Delete("Key") - assert.NoError(t, err) + if err := db.Delete("Key"); err != nil { + t.Fatalf("unexpected error: %v", err) + } - _, _, err = db.GetValue("Key") - assert.ErrorIs(t, err, ErrKeyNotFound) + if _, _, err := db.GetValue("Key"); !errors.Is(err, ErrKeyNotFound) { + t.Fatalf("expected error: %v, got: %v", ErrKeyNotFound, err) + } }) t.Run("Not Exists", func(t *testing.T) { @@ -120,22 +125,25 @@ func TestDBDelete(t *testing.T) { db := setupTestDB[string, string](t) - err := db.Delete("Key") - assert.ErrorIs(t, err, ErrKeyNotFound) + if err := db.Delete("Key"); !errors.Is(err, ErrKeyNotFound) { + t.Fatalf("expected error: %v, got: %v", ErrKeyNotFound, err) + } }) } func BenchmarkDBGet(b *testing.B) { for n := 1; n <= 10000; n *= 10 { - b.Run(fmt.Sprint(n), func(b *testing.B) { + b.Run(strconv.Itoa(n), func(b *testing.B) { db := setupTestDB[int, int](b) - for i := 0; i < n; i++ { + for i := range n { db.Set(i, i, 0) } + b.ReportAllocs() b.ResetTimer() - for i := 0; i < b.N; i++ { + + for b.Loop() { db.GetValue(n - 1) } }) @@ -144,14 +152,16 @@ func BenchmarkDBGet(b *testing.B) { func BenchmarkDBSet(b *testing.B) { for n := 1; n <= 10000; n *= 10 { - b.Run(fmt.Sprint(n), func(b *testing.B) { + b.Run(strconv.Itoa(n), func(b *testing.B) { db := setupTestDB[int, int](b) - for i := 0; i < n-1; i++ { + for i := range n - 1 { db.Set(i, i, 0) } + b.ReportAllocs() b.ResetTimer() - for i := 0; i < b.N; i++ { + + for b.Loop() { db.Set(n, n, 0) } }) @@ -160,14 +170,16 @@ func BenchmarkDBSet(b *testing.B) { func BenchmarkDBDelete(b *testing.B) { for n := 1; n <= 10000; n *= 10 { - b.Run(fmt.Sprint(n), func(b *testing.B) { + b.Run(strconv.Itoa(n), func(b *testing.B) { db := setupTestDB[int, int](b) - for i := 0; i < n-1; i++ { + for i := range n - 1 { db.Set(i, i, 0) } + b.ReportAllocs() b.ResetTimer() - for i := 0; i < b.N; i++ { + + for b.Loop() { db.Set(n, n, 0) db.Delete(n) } |