Files
storage/aerospike/aerospike_test.go
2025-04-11 20:54:56 +05:30

143 lines
3.2 KiB
Go

package aerospike
import (
"context"
"testing"
"github.com/aerospike/aerospike-client-go/v8"
"github.com/stretchr/testify/require"
"github.com/testcontainers/testcontainers-go"
tcaerospike "github.com/testcontainers/testcontainers-go/modules/aerospike"
)
const (
aerospikeImage = "aerospike/aerospike-server:latest"
aerospikePort = "3000/tcp"
aerospikeNamespace = "test"
)
// setupAerospikeTestClient sets up a test Aerospike client
// using testcontainers-go. It starts an Aerospike container and returns
// a Storage instance configured to connect to the container.
// The container is cleaned up after the test completes.
func setupAerospikeTestClient(t *testing.T) *Storage {
t.Helper()
ctx := context.Background()
c, err := tcaerospike.Run(ctx, aerospikeImage)
if err != nil {
t.Fatalf("Failed to start aerospike container: %v", err)
}
testcontainers.CleanupContainer(t, c)
// Extract host and port
host, err := c.Host(context.TODO())
if err != nil {
t.Fatalf("Failed to get container host: %v", err)
}
port, err := c.MappedPort(context.TODO(), aerospikePort)
if err != nil {
t.Fatalf("Failed to get container port: %v", err)
}
return New(Config{
Hosts: []*aerospike.Host{aerospike.NewHost(host, port.Int())},
Reset: true,
Namespace: aerospikeNamespace,
})
}
// Test_AeroSpikeDB_Get tests the Get method
func Test_AeroSpikeDB_Get(t *testing.T) {
var (
key = "john"
val = []byte("doe")
)
testStore := setupAerospikeTestClient(t)
defer testStore.Close()
// Set a value
err := testStore.Set(key, val, 0)
require.NoError(t, err)
// Get the value
retrievedVal, err := testStore.Get(key)
require.NoError(t, err)
require.Equal(t, val, retrievedVal)
}
// Test_AeroSpikeDB_Delete tests the Delete method
func Test_AeroSpikeDB_Delete(t *testing.T) {
var (
key = "john"
val = []byte("doe")
)
testStore := setupAerospikeTestClient(t)
defer testStore.Close()
// Set a value
err := testStore.Set(key, val, 0)
require.NoError(t, err)
// Delete the value
err = testStore.Delete(key)
require.NoError(t, err)
// Try to get the deleted value
retrievedVal, err := testStore.Get(key)
require.NoError(t, err)
require.Nil(t, retrievedVal)
}
// Test_AeroSpikeDB_Reset tests the Reset method
func Test_AeroSpikeDB_Reset(t *testing.T) {
var (
key1 = "john"
val1 = []byte("doe")
key2 = "jane"
val2 = []byte("smith")
)
testStore := setupAerospikeTestClient(t)
defer testStore.Close()
// Set multiple values
err := testStore.Set(key1, val1, 0)
require.NoError(t, err)
err = testStore.Set(key2, val2, 0)
require.NoError(t, err)
// Reset the store
err = testStore.Reset()
require.NoError(t, err)
// Ensure keys are deleted
retrievedVal1, err := testStore.Get(key1)
require.NoError(t, err)
require.Nil(t, retrievedVal1)
retrievedVal2, err := testStore.Get(key2)
require.NoError(t, err)
require.Nil(t, retrievedVal2)
}
// Test_AeroSpikeDB_GetSchemaInfo tests the GetSchemaInfo method
func Test_AeroSpikeDB_GetSchemaInfo(t *testing.T) {
testStore := setupAerospikeTestClient(t)
defer testStore.Close()
// Get schema info
schemaInfo := testStore.GetSchemaInfo()
require.NotNil(t, schemaInfo)
require.GreaterOrEqual(t, schemaInfo.Version, 1)
}