chore: use testcontainers-go in mongodb store

This commit is contained in:
Manuel de la Peña
2024-08-29 09:40:59 +02:00
parent 2f1c0cbba5
commit 4ed36499ca
5 changed files with 304 additions and 39 deletions

View File

@@ -1,24 +1,47 @@
package mongodb
import (
"context"
"os"
"testing"
"time"
"github.com/stretchr/testify/require"
"github.com/testcontainers/testcontainers-go/modules/mongodb"
)
var testStore *Storage
const (
// mongoDBImage is the default image used for running MongoDB in tests.
mongoDBImage = "mongo:7"
mongoDBImageEnvVar string = "TEST_MONGODB_IMAGE"
mongoDBUser string = "mongo-user"
mongoDBPass string = "mongo-password"
)
func TestMain(m *testing.M) {
testStore = New(Config{
Reset: true,
})
func newTestStore(t testing.TB) (*Storage, error) {
t.Helper()
code := m.Run()
img := mongoDBImage
if imgFromEnv := os.Getenv(mongoDBImageEnvVar); imgFromEnv != "" {
img = imgFromEnv
}
_ = testStore.Close()
os.Exit(code)
ctx := context.Background()
c, err := mongodb.Run(ctx, img, mongodb.WithUsername(mongoDBUser), mongodb.WithPassword(mongoDBPass))
if err != nil {
return nil, err
}
conn, err := c.ConnectionString(ctx)
if err != nil {
return nil, err
}
return New(Config{
ConnectionURI: conn,
Reset: true,
}), nil
}
func Test_MongoDB_Set(t *testing.T) {
@@ -27,7 +50,10 @@ func Test_MongoDB_Set(t *testing.T) {
val = []byte("doe")
)
err := testStore.Set(key, val, 0)
testStore, err := newTestStore(t)
require.NoError(t, err)
err = testStore.Set(key, val, 0)
require.NoError(t, err)
}
@@ -37,7 +63,10 @@ func Test_MongoDB_Set_Override(t *testing.T) {
val = []byte("doe")
)
err := testStore.Set(key, val, 0)
testStore, err := newTestStore(t)
require.NoError(t, err)
err = testStore.Set(key, val, 0)
require.NoError(t, err)
err = testStore.Set(key, val, 0)
@@ -50,7 +79,10 @@ func Test_MongoDB_Get(t *testing.T) {
val = []byte("doe")
)
err := testStore.Set(key, val, 0)
testStore, err := newTestStore(t)
require.NoError(t, err)
err = testStore.Set(key, val, 0)
require.NoError(t, err)
result, err := testStore.Get(key)
@@ -65,7 +97,10 @@ func Test_MongoDB_Set_Expiration(t *testing.T) {
exp = 1 * time.Second
)
err := testStore.Set(key, val, exp)
testStore, err := newTestStore(t)
require.NoError(t, err)
err = testStore.Set(key, val, exp)
require.NoError(t, err)
time.Sleep(1100 * time.Millisecond)
@@ -74,12 +109,18 @@ func Test_MongoDB_Set_Expiration(t *testing.T) {
func Test_MongoDB_Get_Expired(t *testing.T) {
key := "john"
testStore, err := newTestStore(t)
require.NoError(t, err)
result, err := testStore.Get(key)
require.NoError(t, err)
require.Zero(t, len(result))
}
func Test_MongoDB_Get_NotExist(t *testing.T) {
testStore, err := newTestStore(t)
require.NoError(t, err)
result, err := testStore.Get("notexist")
require.NoError(t, err)
require.Zero(t, len(result))
@@ -91,7 +132,10 @@ func Test_MongoDB_Delete(t *testing.T) {
val = []byte("doe")
)
err := testStore.Set(key, val, 0)
testStore, err := newTestStore(t)
require.NoError(t, err)
err = testStore.Set(key, val, 0)
require.NoError(t, err)
err = testStore.Delete(key)
@@ -105,7 +149,10 @@ func Test_MongoDB_Delete(t *testing.T) {
func Test_MongoDB_Reset(t *testing.T) {
val := []byte("doe")
err := testStore.Set("john1", val, 0)
testStore, err := newTestStore(t)
require.NoError(t, err)
err = testStore.Set("john1", val, 0)
require.NoError(t, err)
err = testStore.Set("john2", val, 0)
@@ -124,18 +171,26 @@ func Test_MongoDB_Reset(t *testing.T) {
}
func Test_MongoDB_Close(t *testing.T) {
testStore, err := newTestStore(t)
require.NoError(t, err)
require.Nil(t, testStore.Close())
}
func Test_MongoDB_Conn(t *testing.T) {
testStore, err := newTestStore(t)
require.NoError(t, err)
require.True(t, testStore.Conn() != nil)
}
func Benchmark_MongoDB_Set(b *testing.B) {
testStore, err := newTestStore(b)
require.NoError(b, err)
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
err = testStore.Set("john", []byte("doe"), 0)
}
@@ -144,7 +199,10 @@ func Benchmark_MongoDB_Set(b *testing.B) {
}
func Benchmark_MongoDB_Get(b *testing.B) {
err := testStore.Set("john", []byte("doe"), 0)
testStore, err := newTestStore(b)
require.NoError(b, err)
err = testStore.Set("john", []byte("doe"), 0)
require.NoError(b, err)
b.ReportAllocs()
@@ -158,10 +216,12 @@ func Benchmark_MongoDB_Get(b *testing.B) {
}
func Benchmark_MongoDB_SetAndDelete(b *testing.B) {
testStore, err := newTestStore(b)
require.NoError(b, err)
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
_ = testStore.Set("john", []byte("doe"), 0)
err = testStore.Delete("john")