mirror of
https://github.com/gofiber/storage.git
synced 2025-09-27 04:46:08 +08:00
191 lines
4.0 KiB
Go
191 lines
4.0 KiB
Go
package couchbase
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
"github.com/testcontainers/testcontainers-go/modules/couchbase"
|
|
)
|
|
|
|
const (
|
|
// couchbaseImage is the default image used for running couchbase in tests.
|
|
couchbaseImage = "couchbase:enterprise-7.1.1"
|
|
couchbaseImageEnvVar string = "TEST_COUCHBASE_IMAGE"
|
|
couchbaseUser string = "default"
|
|
couchbasePass string = "password"
|
|
couchbaseBucket string = "fiber_storage"
|
|
)
|
|
|
|
func newTestStore(t testing.TB) (*Storage, error) {
|
|
t.Helper()
|
|
|
|
img := couchbaseImage
|
|
if imgFromEnv := os.Getenv(couchbaseImageEnvVar); imgFromEnv != "" {
|
|
img = imgFromEnv
|
|
}
|
|
|
|
ctx := context.Background()
|
|
|
|
bucket := couchbase.NewBucket(couchbaseBucket).WithReplicas(1).WithFlushEnabled(true)
|
|
|
|
c, err := couchbase.Run(ctx,
|
|
img,
|
|
couchbase.WithAdminCredentials(couchbaseUser, couchbasePass),
|
|
couchbase.WithBuckets(bucket),
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
conn, err := c.ConnectionString(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return New(Config{
|
|
Username: couchbaseUser,
|
|
Password: couchbasePass,
|
|
Host: conn,
|
|
Bucket: couchbaseBucket,
|
|
}), nil
|
|
}
|
|
|
|
func TestSetCouchbase_ShouldReturnNoError(t *testing.T) {
|
|
testStore, err := newTestStore(t)
|
|
require.NoError(t, err)
|
|
|
|
err = testStore.Set("test", []byte("test"), 0)
|
|
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
func TestGetCouchbase_ShouldReturnNil_WhenDocumentNotFound(t *testing.T) {
|
|
testStore, err := newTestStore(t)
|
|
require.NoError(t, err)
|
|
|
|
val, err := testStore.Get("not_found_key")
|
|
|
|
require.NoError(t, err)
|
|
require.Zero(t, len(val))
|
|
}
|
|
|
|
func TestSetAndGet_GetShouldReturn_SetValueWithoutError(t *testing.T) {
|
|
testStore, err := newTestStore(t)
|
|
require.NoError(t, err)
|
|
|
|
err = testStore.Set("test", []byte("fiber_test_value"), 0)
|
|
require.NoError(t, err)
|
|
|
|
val, err := testStore.Get("test")
|
|
|
|
require.NoError(t, err)
|
|
require.Equal(t, val, []byte("fiber_test_value"))
|
|
}
|
|
|
|
func TestSetAndGet_GetShouldReturnNil_WhenTTLExpired(t *testing.T) {
|
|
testStore, err := newTestStore(t)
|
|
require.NoError(t, err)
|
|
|
|
err = testStore.Set("test", []byte("fiber_test_value"), 3*time.Second)
|
|
require.NoError(t, err)
|
|
|
|
time.Sleep(6 * time.Second)
|
|
|
|
val, err := testStore.Get("test")
|
|
|
|
require.NoError(t, err)
|
|
require.Zero(t, len(val))
|
|
}
|
|
|
|
func TestSetAndDelete_DeleteShouldReturn_NoError(t *testing.T) {
|
|
testStore, err := newTestStore(t)
|
|
require.NoError(t, err)
|
|
|
|
err = testStore.Set("test", []byte("fiber_test_value"), 0)
|
|
require.NoError(t, err)
|
|
|
|
err = testStore.Delete("test")
|
|
require.NoError(t, err)
|
|
|
|
_, err = testStore.Get("test")
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
func TestSetAndReset_ResetShouldReturn_NoError(t *testing.T) {
|
|
testStore, err := newTestStore(t)
|
|
require.NoError(t, err)
|
|
|
|
err = testStore.Set("test", []byte("fiber_test_value"), 0)
|
|
require.NoError(t, err)
|
|
|
|
err = testStore.Reset()
|
|
require.NoError(t, err)
|
|
|
|
_, err = testStore.Get("test")
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
func TestClose_CloseShouldReturn_NoError(t *testing.T) {
|
|
testStore, err := newTestStore(t)
|
|
require.NoError(t, err)
|
|
|
|
err = testStore.Close()
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
func TestGetConn_ReturnsNotNil(t *testing.T) {
|
|
testStore, err := newTestStore(t)
|
|
require.NoError(t, err)
|
|
|
|
require.True(t, testStore.Conn() != nil)
|
|
}
|
|
|
|
func Benchmark_Couchbase_Set(b *testing.B) {
|
|
testStore, err := newTestStore(b)
|
|
require.NoError(b, err)
|
|
|
|
b.ReportAllocs()
|
|
b.ResetTimer()
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
err = testStore.Set("john", []byte("doe"), 0)
|
|
}
|
|
|
|
require.NoError(b, err)
|
|
}
|
|
|
|
func Benchmark_Couchbase_Get(b *testing.B) {
|
|
testStore, err := newTestStore(b)
|
|
require.NoError(b, err)
|
|
|
|
err = testStore.Set("john", []byte("doe"), 0)
|
|
require.NoError(b, err)
|
|
|
|
b.ReportAllocs()
|
|
b.ResetTimer()
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
_, err = testStore.Get("john")
|
|
}
|
|
|
|
require.NoError(b, err)
|
|
}
|
|
|
|
func Benchmark_Couchbase_SetAndDelete(b *testing.B) {
|
|
testStore, err := newTestStore(b)
|
|
require.NoError(b, err)
|
|
|
|
b.ReportAllocs()
|
|
b.ResetTimer()
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
_ = testStore.Set("john", []byte("doe"), 0)
|
|
err = testStore.Delete("john")
|
|
}
|
|
|
|
require.NoError(b, err)
|
|
}
|