From 8840678883930f02fb7694ea66f789c90b91a3bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20de=20la=20Pe=C3=B1a?= Date: Tue, 15 Apr 2025 16:03:47 +0200 Subject: [PATCH 01/18] chore(aerospike): use require in tests --- aerospike/aerospike_test.go | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/aerospike/aerospike_test.go b/aerospike/aerospike_test.go index 427c28f0..a50a840b 100644 --- a/aerospike/aerospike_test.go +++ b/aerospike/aerospike_test.go @@ -2,7 +2,6 @@ package aerospike import ( "context" - "fmt" "os" "testing" "time" @@ -26,7 +25,9 @@ const ( ) // startAerospikeContainer starts an Aerospike container for testing -func startAerospikeContainer(ctx context.Context) (testcontainers.Container, error) { +func startAerospikeContainer(t testing.TB, ctx context.Context) testcontainers.Container { + t.Helper() + // Get custom image from env if specified image := aerospikeImage if envImage := os.Getenv(aerospikeImageEnvVar); envImage != "" { @@ -50,37 +51,28 @@ func startAerospikeContainer(ctx context.Context) (testcontainers.Container, err } // Start container - container, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{ + ctr, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{ ContainerRequest: req, Started: true, }) - if err != nil { - return nil, fmt.Errorf("failed to start aerospike container: %w", err) - } + testcontainers.CleanupContainer(t, ctr) + require.NoError(t, err) - return container, nil + return ctr } // newTestStore creates a client connected to the test container func newTestStore(t testing.TB) *Storage { t.Helper() - c, err := startAerospikeContainer(context.Background()) - testcontainers.CleanupContainer(t, c) - if err != nil { - t.Fatalf("Failed to start Aerospike container: %v", err) - } + c := startAerospikeContainer(t, context.Background()) // Extract host and port host, err := c.Host(context.TODO()) - if err != nil { - t.Fatalf("Failed to get container host: %v", err) - } + require.NoError(t, err) port, err := c.MappedPort(context.TODO(), aerospikePort) - if err != nil { - t.Fatalf("Failed to get container port: %v", err) - } + require.NoError(t, err) return New(Config{ Hosts: []*aerospike.Host{aerospike.NewHost(host, port.Int())}, From 65642eae0ddd8b37377985eab98ac69ed99b786b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20de=20la=20Pe=C3=B1a?= Date: Tue, 15 Apr 2025 16:07:38 +0200 Subject: [PATCH 02/18] chore(azureblob): use require in tests --- azureblob/azureblob_test.go | 61 +++++++++++++++---------------------- 1 file changed, 24 insertions(+), 37 deletions(-) diff --git a/azureblob/azureblob_test.go b/azureblob/azureblob_test.go index 547f3668..ddbdfb9e 100644 --- a/azureblob/azureblob_test.go +++ b/azureblob/azureblob_test.go @@ -17,7 +17,7 @@ const ( azuriteImageEnvVar = "TEST_AZURITE_IMAGE" ) -func newTestStore(t testing.TB) (*Storage, error) { +func newTestStore(t testing.TB) *Storage { t.Helper() img := azuriteImage @@ -29,14 +29,10 @@ func newTestStore(t testing.TB) (*Storage, error) { c, err := azurite.Run(ctx, img) testcontainers.CleanupContainer(t, c) - if err != nil { - return nil, err - } + require.NoError(t, err) serviceURL, err := c.BlobServiceURL(ctx) - if err != nil { - return nil, err - } + require.NoError(t, err) return New(Config{ Account: azurite.AccountName, @@ -47,7 +43,7 @@ func newTestStore(t testing.TB) (*Storage, error) { Key: azurite.AccountKey, }, Reset: true, - }), nil + }) } func Test_AzureBlob_Get(t *testing.T) { @@ -56,11 +52,10 @@ func Test_AzureBlob_Get(t *testing.T) { val = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, 0) + err := testStore.Set(key, val, 0) require.NoError(t, err) result, err := testStore.Get(key) @@ -74,11 +69,10 @@ func Test_AzureBlob_Set(t *testing.T) { val = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, 0) + err := testStore.Set(key, val, 0) require.NoError(t, err) } @@ -88,11 +82,10 @@ func Test_AzureBlob_Delete(t *testing.T) { val = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, 0) + err := testStore.Set(key, val, 0) require.NoError(t, err) err = testStore.Delete(key) @@ -114,11 +107,10 @@ func Test_AzureBlob_Override(t *testing.T) { val = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, 0) + err := testStore.Set(key, val, 0) require.NoError(t, err) err = testStore.Set(key, val, 0) @@ -126,8 +118,7 @@ func Test_AzureBlob_Override(t *testing.T) { } func Test_AzureBlob_Get_NotExist(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() result, err := testStore.Get("notexist") @@ -143,11 +134,10 @@ func Test_AzureBlob_Get_NotExist(t *testing.T) { func Test_AzureBlob_Reset(t *testing.T) { val := []byte("doe") - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set("john1", val, 0) + err := testStore.Set("john1", val, 0) require.NoError(t, err) err = testStore.Set("john2", val, 0) @@ -176,27 +166,25 @@ func Test_AzureBlob_Reset(t *testing.T) { } func Test_AzureBlob_Conn(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() require.True(t, testStore.Conn() != nil) } func Test_AzureBlob_Close(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) - require.Nil(t, testStore.Close()) + testStore := newTestStore(t) + require.NoError(t, testStore.Close()) } func Benchmark_AzureBlob_Set(b *testing.B) { - testStore, err := newTestStore(b) - require.NoError(b, err) + testStore := newTestStore(b) defer testStore.Close() b.ReportAllocs() b.ResetTimer() + var err error for i := 0; i < b.N; i++ { err = testStore.Set("john", []byte("doe"), 0) } @@ -205,11 +193,10 @@ func Benchmark_AzureBlob_Set(b *testing.B) { } func Benchmark_AzureBlob_Get(b *testing.B) { - testStore, err := newTestStore(b) - require.NoError(b, err) + testStore := newTestStore(b) defer testStore.Close() - err = testStore.Set("john", []byte("doe"), 0) + err := testStore.Set("john", []byte("doe"), 0) require.NoError(b, err) b.ReportAllocs() @@ -223,13 +210,13 @@ func Benchmark_AzureBlob_Get(b *testing.B) { } func Benchmark_AzureBlob_SetAndDelete(b *testing.B) { - testStore, err := newTestStore(b) - require.NoError(b, err) + testStore := newTestStore(b) defer testStore.Close() b.ReportAllocs() b.ResetTimer() + var err error for i := 0; i < b.N; i++ { _ = testStore.Set("john", []byte("doe"), 0) err = testStore.Delete("john") From 649c51909b223c1198d53e588ce2b7576f1bad9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20de=20la=20Pe=C3=B1a?= Date: Tue, 15 Apr 2025 16:13:34 +0200 Subject: [PATCH 03/18] chore(clickhouse): use require in tests --- clickhouse/clickhouse_test.go | 84 ++++++++++++++--------------------- 1 file changed, 33 insertions(+), 51 deletions(-) diff --git a/clickhouse/clickhouse_test.go b/clickhouse/clickhouse_test.go index e66b7545..48b5190d 100644 --- a/clickhouse/clickhouse_test.go +++ b/clickhouse/clickhouse_test.go @@ -27,7 +27,7 @@ const ( clickhouseSuccessCode = 200 ) -func getTestConnection(t testing.TB, cfg Config) (*Storage, error) { +func newTestStore(t testing.TB, cfg Config) *Storage { t.Helper() img := clickhouseImage @@ -52,20 +52,14 @@ func getTestConnection(t testing.TB, cfg Config) (*Storage, error) { ), ) testcontainers.CleanupContainer(t, c) - if err != nil { - return nil, err - } + require.NoError(t, err) hostPort, err := c.ConnectionHost(ctx) - if err != nil { - return nil, err - } + require.NoError(t, err) pair := strings.Split(hostPort, ":") port, err := strconv.Atoi(pair[1]) - if err != nil { - return nil, err - } + require.NoError(t, err) // configure the client for the testcontainers clickhouse instance cfg.Host = pair[0] @@ -75,57 +69,53 @@ func getTestConnection(t testing.TB, cfg Config) (*Storage, error) { cfg.Database = clickhouseDB client, err := New(cfg) + require.NoError(t, err) - return client, err + return client } func Test_Connection(t *testing.T) { - client, err := getTestConnection(t, Config{ + client := newTestStore(t, Config{ Engine: Memory, Table: "test_table", Clean: true, }) - require.NoError(t, err) - defer client.Close() } func Test_Set(t *testing.T) { - client, err := getTestConnection(t, Config{ + client := newTestStore(t, Config{ Engine: Memory, Table: "test_table", Clean: true, }) - require.NoError(t, err) defer client.Close() - err = client.Set("somekey", []byte("somevalue"), 0) + err := client.Set("somekey", []byte("somevalue"), 0) require.NoError(t, err) } func Test_Set_With_Exp(t *testing.T) { - client, err := getTestConnection(t, Config{ + client := newTestStore(t, Config{ Engine: Memory, Table: "test_table", Clean: true, }) - require.NoError(t, err) defer client.Close() - err = client.Set("setsomekeywithexp", []byte("somevalue"), time.Second*1) + err := client.Set("setsomekeywithexp", []byte("somevalue"), time.Second*1) require.NoError(t, err) } func Test_Get(t *testing.T) { - client, err := getTestConnection(t, Config{ + client := newTestStore(t, Config{ Engine: Memory, Table: "test_table", Clean: true, }) - require.NoError(t, err) defer client.Close() - err = client.Set("somekey", []byte("somevalue"), 0) + err := client.Set("somekey", []byte("somevalue"), 0) require.NoError(t, err) value, err := client.Get("somekey") @@ -136,15 +126,14 @@ func Test_Get(t *testing.T) { } func Test_Get_With_Exp(t *testing.T) { - client, err := getTestConnection(t, Config{ + client := newTestStore(t, Config{ Engine: Memory, Table: "test_table", Clean: true, }) - require.NoError(t, err) defer client.Close() - err = client.Set("getsomekeywithexp", []byte("somevalue"), time.Second*2) + err := client.Set("getsomekeywithexp", []byte("somevalue"), time.Second*2) require.NoError(t, err) value, err := client.Get("getsomekeywithexp") @@ -162,15 +151,14 @@ func Test_Get_With_Exp(t *testing.T) { } func Test_Delete(t *testing.T) { - client, err := getTestConnection(t, Config{ + client := newTestStore(t, Config{ Engine: Memory, Table: "test_table", Clean: true, }) - require.NoError(t, err) defer client.Close() - err = client.Set("somekeytodelete", []byte("somevalue"), time.Second*5) + err := client.Set("somekeytodelete", []byte("somevalue"), time.Second*5) require.NoError(t, err) err = client.Delete("somekeytodelete") @@ -184,15 +172,14 @@ func Test_Delete(t *testing.T) { } func Test_Reset(t *testing.T) { - client, err := getTestConnection(t, Config{ + client := newTestStore(t, Config{ Engine: Memory, Table: "test_table", Clean: true, }) - require.NoError(t, err) defer client.Close() - err = client.Set("testkey", []byte("somevalue"), 0) + err := client.Set("testkey", []byte("somevalue"), 0) require.NoError(t, err) err = client.Reset() @@ -206,29 +193,26 @@ func Test_Reset(t *testing.T) { } func TestClose_ShouldReturn_NoError(t *testing.T) { - client, err := getTestConnection(t, Config{ + client := newTestStore(t, Config{ Engine: Memory, Table: "test_table", Clean: true, }) - require.NoError(t, err) - require.NoError(t, client.Close()) } func Benchmark_Clickhouse_Set(b *testing.B) { - b.ReportAllocs() - b.ResetTimer() - - client, err := getTestConnection(b, Config{ + client := newTestStore(b, Config{ Engine: Memory, Table: "test_table", Clean: true, }) - require.NoError(b, err) - defer client.Close() + b.ReportAllocs() + b.ResetTimer() + + var err error for i := 0; i < b.N; i++ { err = client.Set("john", []byte("doe"), 0) } @@ -237,19 +221,18 @@ func Benchmark_Clickhouse_Set(b *testing.B) { } func Benchmark_Clickhouse_Get(b *testing.B) { - b.ReportAllocs() - b.ResetTimer() - - client, err := getTestConnection(b, Config{ + client := newTestStore(b, Config{ Engine: Memory, Table: "test_table", Clean: true, }) - require.NoError(b, err) - defer client.Close() - err = client.Set("john", []byte("doe"), 0) + err := client.Set("john", []byte("doe"), 0) + require.NoError(b, err) + + b.ReportAllocs() + b.ResetTimer() for i := 0; i < b.N; i++ { _, err = client.Get("john") @@ -262,15 +245,14 @@ func Benchmark_Clickhouse_Set_And_Delete(b *testing.B) { b.ReportAllocs() b.ResetTimer() - client, err := getTestConnection(b, Config{ + client := newTestStore(b, Config{ Engine: Memory, Table: "test_table", Clean: true, }) - - require.NoError(b, err) defer client.Close() + var err error for i := 0; i < b.N; i++ { _ = client.Set("john", []byte("doe"), 0) err = client.Delete("john") From c2122f7e4a89daf752e0532cd7a7c2ec0f422442 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20de=20la=20Pe=C3=B1a?= Date: Tue, 15 Apr 2025 16:15:05 +0200 Subject: [PATCH 04/18] chore(couchbase): use require in tests --- couchbase/couchbase_test.go | 61 ++++++++++++++----------------------- 1 file changed, 23 insertions(+), 38 deletions(-) diff --git a/couchbase/couchbase_test.go b/couchbase/couchbase_test.go index 2e334daa..335441ff 100644 --- a/couchbase/couchbase_test.go +++ b/couchbase/couchbase_test.go @@ -21,7 +21,7 @@ const ( couchbaseBucket string = "fiber_storage" ) -func newTestStore(t testing.TB) (*Storage, error) { +func newTestStore(t testing.TB) *Storage { t.Helper() img := couchbaseImage @@ -40,36 +40,29 @@ func newTestStore(t testing.TB) (*Storage, error) { testcontainers.WithWaitStrategy(wait.ForListeningPort("8091/tcp")), ) testcontainers.CleanupContainer(t, c) - if err != nil { - return nil, err - } + require.NoError(t, err) conn, err := c.ConnectionString(ctx) - if err != nil { - return nil, err - } + require.NoError(t, 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) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set("test", []byte("test"), 0) - + 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) + testStore := newTestStore(t) defer testStore.Close() val, err := testStore.Get("not_found_key") @@ -79,11 +72,10 @@ func TestGetCouchbase_ShouldReturnNil_WhenDocumentNotFound(t *testing.T) { } func TestSetAndGet_GetShouldReturn_SetValueWithoutError(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set("test", []byte("fiber_test_value"), 0) + err := testStore.Set("test", []byte("fiber_test_value"), 0) require.NoError(t, err) val, err := testStore.Get("test") @@ -93,11 +85,10 @@ func TestSetAndGet_GetShouldReturn_SetValueWithoutError(t *testing.T) { } func TestSetAndGet_GetShouldReturnNil_WhenTTLExpired(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set("test", []byte("fiber_test_value"), 3*time.Second) + err := testStore.Set("test", []byte("fiber_test_value"), 3*time.Second) require.NoError(t, err) time.Sleep(6 * time.Second) @@ -109,11 +100,10 @@ func TestSetAndGet_GetShouldReturnNil_WhenTTLExpired(t *testing.T) { } func TestSetAndDelete_DeleteShouldReturn_NoError(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set("test", []byte("fiber_test_value"), 0) + err := testStore.Set("test", []byte("fiber_test_value"), 0) require.NoError(t, err) err = testStore.Delete("test") @@ -124,11 +114,10 @@ func TestSetAndDelete_DeleteShouldReturn_NoError(t *testing.T) { } func TestSetAndReset_ResetShouldReturn_NoError(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set("test", []byte("fiber_test_value"), 0) + err := testStore.Set("test", []byte("fiber_test_value"), 0) require.NoError(t, err) err = testStore.Reset() @@ -139,28 +128,25 @@ func TestSetAndReset_ResetShouldReturn_NoError(t *testing.T) { } func TestClose_CloseShouldReturn_NoError(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) - + testStore := newTestStore(t) require.NoError(t, testStore.Close()) } func TestGetConn_ReturnsNotNil(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() require.True(t, testStore.Conn() != nil) } func Benchmark_Couchbase_Set(b *testing.B) { - testStore, err := newTestStore(b) - require.NoError(b, err) + testStore := newTestStore(b) defer testStore.Close() b.ReportAllocs() b.ResetTimer() + var err error for i := 0; i < b.N; i++ { err = testStore.Set("john", []byte("doe"), 0) } @@ -169,11 +155,10 @@ func Benchmark_Couchbase_Set(b *testing.B) { } func Benchmark_Couchbase_Get(b *testing.B) { - testStore, err := newTestStore(b) - require.NoError(b, err) + testStore := newTestStore(b) defer testStore.Close() - err = testStore.Set("john", []byte("doe"), 0) + err := testStore.Set("john", []byte("doe"), 0) require.NoError(b, err) b.ReportAllocs() @@ -187,13 +172,13 @@ func Benchmark_Couchbase_Get(b *testing.B) { } func Benchmark_Couchbase_SetAndDelete(b *testing.B) { - testStore, err := newTestStore(b) - require.NoError(b, err) + testStore := newTestStore(b) defer testStore.Close() b.ReportAllocs() b.ResetTimer() + var err error for i := 0; i < b.N; i++ { _ = testStore.Set("john", []byte("doe"), 0) err = testStore.Delete("john") From c38280d3082358ebc7c52bc2d5317001e298fbaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20de=20la=20Pe=C3=B1a?= Date: Tue, 15 Apr 2025 16:17:17 +0200 Subject: [PATCH 05/18] chore(dynamodb): use require in tests --- dynamodb/dynamodb_test.go | 68 ++++++++++++++++----------------------- 1 file changed, 27 insertions(+), 41 deletions(-) diff --git a/dynamodb/dynamodb_test.go b/dynamodb/dynamodb_test.go index 503c6fc1..f2b95f8f 100644 --- a/dynamodb/dynamodb_test.go +++ b/dynamodb/dynamodb_test.go @@ -16,7 +16,7 @@ const ( dynamoDBImageEnvVar string = "TEST_DYNAMODB_IMAGE" ) -func newTestStore(t testing.TB) (*Storage, error) { +func newTestStore(t testing.TB) *Storage { t.Helper() img := dynamoDBImage @@ -28,14 +28,10 @@ func newTestStore(t testing.TB) (*Storage, error) { c, err := dynamodb.Run(ctx, img, dynamodb.WithDisableTelemetry()) testcontainers.CleanupContainer(t, c) - if err != nil { - return nil, err - } + require.NoError(t, err) hostPort, err := c.ConnectionString(ctx) - if err != nil { - return nil, err - } + require.NoError(t, err) return New( Config{ @@ -48,7 +44,7 @@ func newTestStore(t testing.TB) (*Storage, error) { }, Reset: true, }, - ), nil + ) } func Test_DynamoDB_Set(t *testing.T) { @@ -57,11 +53,10 @@ func Test_DynamoDB_Set(t *testing.T) { val = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, 0) + err := testStore.Set(key, val, 0) require.NoError(t, err) } @@ -71,11 +66,10 @@ func Test_DynamoDB_Set_Override(t *testing.T) { val = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, 0) + err := testStore.Set(key, val, 0) require.NoError(t, err) err = testStore.Set(key, val, 0) @@ -88,11 +82,10 @@ func Test_DynamoDB_Get(t *testing.T) { val = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, 0) + err := testStore.Set(key, val, 0) require.NoError(t, err) result, err := testStore.Get(key) @@ -101,8 +94,7 @@ func Test_DynamoDB_Get(t *testing.T) { } func Test_DynamoDB_Get_NotExist(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() result, err := testStore.Get("notexist") @@ -116,11 +108,10 @@ func Test_DynamoDB_Delete(t *testing.T) { val = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, 0) + err := testStore.Set(key, val, 0) require.NoError(t, err) err = testStore.Delete(key) @@ -134,11 +125,10 @@ func Test_DynamoDB_Delete(t *testing.T) { func Test_DynamoDB_Reset(t *testing.T) { val := []byte("doe") - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set("john1", val, 0) + err := testStore.Set("john1", val, 0) require.NoError(t, err) err = testStore.Set("john2", val, 0) @@ -157,28 +147,25 @@ func Test_DynamoDB_Reset(t *testing.T) { } func Test_DynamoDB_Close(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) - + testStore := newTestStore(t) require.Nil(t, testStore.Close()) } func Test_DynamoDB_Conn(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() require.True(t, testStore.Conn() != nil) } func Benchmark_DynamoDB_Set(b *testing.B) { + testStore := newTestStore(b) + defer testStore.Close() + b.ReportAllocs() b.ResetTimer() - testStore, err := newTestStore(b) - require.NoError(b, err) - defer testStore.Close() - + var err error for i := 0; i < b.N; i++ { err = testStore.Set("john", []byte("doe"), 0) } @@ -187,11 +174,10 @@ func Benchmark_DynamoDB_Set(b *testing.B) { } func Benchmark_DynamoDB_Get(b *testing.B) { - testStore, err := newTestStore(b) - require.NoError(b, err) + testStore := newTestStore(b) defer testStore.Close() - err = testStore.Set("john", []byte("doe"), 0) + err := testStore.Set("john", []byte("doe"), 0) require.NoError(b, err) b.ReportAllocs() @@ -205,13 +191,13 @@ func Benchmark_DynamoDB_Get(b *testing.B) { } func Benchmark_DynamoDB_SetAndDelete(b *testing.B) { + testStore := newTestStore(b) + defer testStore.Close() + b.ReportAllocs() b.ResetTimer() - testStore, err := newTestStore(b) - require.NoError(b, err) - defer testStore.Close() - + var err error for i := 0; i < b.N; i++ { _ = testStore.Set("john", []byte("doe"), 0) err = testStore.Delete("john") From a5733f7261f8d2012f94d8c6c4cdff9262199087 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20de=20la=20Pe=C3=B1a?= Date: Tue, 15 Apr 2025 16:19:32 +0200 Subject: [PATCH 06/18] chore(minio): use require in tests --- minio/minio_test.go | 88 ++++++++++++++++++--------------------------- 1 file changed, 34 insertions(+), 54 deletions(-) diff --git a/minio/minio_test.go b/minio/minio_test.go index 287c0925..9f27fc90 100644 --- a/minio/minio_test.go +++ b/minio/minio_test.go @@ -23,7 +23,7 @@ const ( minioHealthPath = "/minio/health/live" ) -func newTestStore(t testing.TB) (*Storage, error) { +func newTestStore(t testing.TB) *Storage { t.Helper() img := minioImage @@ -43,14 +43,10 @@ func newTestStore(t testing.TB) (*Storage, error) { ), ) testcontainers.CleanupContainer(t, c) - if err != nil { - return nil, err - } + require.NoError(t, err) conn, err := c.ConnectionString(ctx) - if err != nil { - return nil, err - } + require.NoError(t, err) return New( Config{ @@ -62,7 +58,7 @@ func newTestStore(t testing.TB) (*Storage, error) { }, Reset: true, }, - ), nil + ) } func Test_Get(t *testing.T) { @@ -71,11 +67,10 @@ func Test_Get(t *testing.T) { val = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, 0) + err := testStore.Set(key, val, 0) require.NoError(t, err) result, err := testStore.Get(key) @@ -92,11 +87,10 @@ func Test_Get_Empty_Key(t *testing.T) { key = "" ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - _, err = testStore.Get(key) + _, err := testStore.Get(key) require.Error(t, err) require.EqualError(t, err, "the key value is required") } @@ -106,11 +100,10 @@ func Test_Get_Not_Exists_Key(t *testing.T) { key = "not-exists" ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - _, err = testStore.Get(key) + _, err := testStore.Get(key) require.Error(t, err) require.EqualError(t, err, "The specified key does not exist.") } @@ -120,8 +113,7 @@ func Test_Get_Not_Exists_Bucket(t *testing.T) { key = "john" ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() // random bucket name @@ -139,11 +131,10 @@ func Test_Set(t *testing.T) { val = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, 0) + err := testStore.Set(key, val, 0) require.NoError(t, err) } @@ -153,12 +144,10 @@ func Test_Set_Empty_Key(t *testing.T) { val = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, 0) - + err := testStore.Set(key, val, 0) require.Error(t, err) require.EqualError(t, err, "the key value is required") @@ -170,14 +159,13 @@ func Test_Set_Not_Exists_Bucket(t *testing.T) { val = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() // random bucket name testStore.cfg.Bucket = strconv.FormatInt(time.Now().UnixMicro(), 10) - err = testStore.Set(key, val, 0) + err := testStore.Set(key, val, 0) require.Error(t, err) require.EqualError(t, err, "The specified bucket does not exist") } @@ -188,11 +176,10 @@ func Test_Delete(t *testing.T) { val = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, 0) + err := testStore.Set(key, val, 0) require.NoError(t, err) err = testStore.Delete(key) @@ -205,11 +192,10 @@ func Test_Delete_Empty_Key(t *testing.T) { val = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, 0) + err := testStore.Set(key, val, 0) require.Error(t, err) require.EqualError(t, err, "the key value is required") } @@ -219,15 +205,13 @@ func Test_Delete_Not_Exists_Bucket(t *testing.T) { key = "john" ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() // random bucket name testStore.cfg.Bucket = strconv.FormatInt(time.Now().UnixMicro(), 10) - err = testStore.Delete(key) - + err := testStore.Delete(key) require.Error(t, err) require.EqualError(t, err, "The specified bucket does not exist") } @@ -237,11 +221,10 @@ func Test_Reset(t *testing.T) { val = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set("john1", val, 0) + err := testStore.Set("john1", val, 0) require.NoError(t, err) err = testStore.Set("john2", val, 0) @@ -256,20 +239,18 @@ func Test_Reset(t *testing.T) { } func Test_Close(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) - + testStore := newTestStore(t) require.NoError(t, testStore.Close()) } func Benchmark_Minio_Set(b *testing.B) { + testStore := newTestStore(b) + defer testStore.Close() + b.ReportAllocs() b.ResetTimer() - testStore, err := newTestStore(b) - require.NoError(b, err) - defer testStore.Close() - + var err error for i := 0; i < b.N; i++ { err = testStore.Set("john", []byte("doe"), 0) } @@ -278,11 +259,10 @@ func Benchmark_Minio_Set(b *testing.B) { } func Benchmark_Minio_Get(b *testing.B) { - testStore, err := newTestStore(b) - require.NoError(b, err) + testStore := newTestStore(b) defer testStore.Close() - err = testStore.Set("john", []byte("doe"), 0) + err := testStore.Set("john", []byte("doe"), 0) require.NoError(b, err) b.ReportAllocs() @@ -296,13 +276,13 @@ func Benchmark_Minio_Get(b *testing.B) { } func Benchmark_Minio_SetAndDelete(b *testing.B) { - testStore, err := newTestStore(b) - require.NoError(b, err) + testStore := newTestStore(b) defer testStore.Close() b.ReportAllocs() b.ResetTimer() + var err error for i := 0; i < b.N; i++ { _ = testStore.Set("john", []byte("doe"), 0) err = testStore.Delete("john") From 61d00d996b16e95aaf2b151cfd8f903764434348 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20de=20la=20Pe=C3=B1a?= Date: Tue, 15 Apr 2025 16:21:14 +0200 Subject: [PATCH 07/18] chore(mongodb): use require in tests --- mongodb/mongodb_test.go | 70 ++++++++++++++++------------------------- 1 file changed, 27 insertions(+), 43 deletions(-) diff --git a/mongodb/mongodb_test.go b/mongodb/mongodb_test.go index 3c45c141..287519d7 100644 --- a/mongodb/mongodb_test.go +++ b/mongodb/mongodb_test.go @@ -22,7 +22,7 @@ const ( mongoDBReadyLog = "Waiting for connections" ) -func newTestStore(t testing.TB) (*Storage, error) { +func newTestStore(t testing.TB) *Storage { t.Helper() img := mongoDBImage @@ -42,19 +42,15 @@ func newTestStore(t testing.TB) (*Storage, error) { ), ) testcontainers.CleanupContainer(t, c) - if err != nil { - return nil, err - } + require.NoError(t, err) conn, err := c.ConnectionString(ctx) - if err != nil { - return nil, err - } + require.NoError(t, err) return New(Config{ ConnectionURI: conn, Reset: true, - }), nil + }) } func Test_MongoDB_Set(t *testing.T) { @@ -63,11 +59,10 @@ func Test_MongoDB_Set(t *testing.T) { val = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, 0) + err := testStore.Set(key, val, 0) require.NoError(t, err) } @@ -77,11 +72,10 @@ func Test_MongoDB_Set_Override(t *testing.T) { val = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, 0) + err := testStore.Set(key, val, 0) require.NoError(t, err) err = testStore.Set(key, val, 0) @@ -94,11 +88,10 @@ func Test_MongoDB_Get(t *testing.T) { val = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, 0) + err := testStore.Set(key, val, 0) require.NoError(t, err) result, err := testStore.Get(key) @@ -113,11 +106,10 @@ func Test_MongoDB_Set_Expiration(t *testing.T) { exp = 1 * time.Second ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, exp) + err := testStore.Set(key, val, exp) require.NoError(t, err) time.Sleep(1100 * time.Millisecond) @@ -130,8 +122,7 @@ 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) + testStore := newTestStore(t) defer testStore.Close() result, err := testStore.Get(key) @@ -140,8 +131,7 @@ func Test_MongoDB_Get_Expired(t *testing.T) { } func Test_MongoDB_Get_NotExist(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() result, err := testStore.Get("notexist") @@ -155,11 +145,10 @@ func Test_MongoDB_Delete(t *testing.T) { val = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, 0) + err := testStore.Set(key, val, 0) require.NoError(t, err) err = testStore.Delete(key) @@ -173,11 +162,10 @@ func Test_MongoDB_Delete(t *testing.T) { func Test_MongoDB_Reset(t *testing.T) { val := []byte("doe") - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set("john1", val, 0) + err := testStore.Set("john1", val, 0) require.NoError(t, err) err = testStore.Set("john2", val, 0) @@ -196,28 +184,25 @@ 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()) + testStore := newTestStore(t) + require.NoError(t, testStore.Close()) } func Test_MongoDB_Conn(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() require.True(t, testStore.Conn() != nil) } func Benchmark_MongoDB_Set(b *testing.B) { - testStore, err := newTestStore(b) - require.NoError(b, err) + testStore := newTestStore(b) defer testStore.Close() b.ReportAllocs() b.ResetTimer() + var err error for i := 0; i < b.N; i++ { err = testStore.Set("john", []byte("doe"), 0) } @@ -226,11 +211,10 @@ func Benchmark_MongoDB_Set(b *testing.B) { } func Benchmark_MongoDB_Get(b *testing.B) { - testStore, err := newTestStore(b) - require.NoError(b, err) + testStore := newTestStore(b) defer testStore.Close() - err = testStore.Set("john", []byte("doe"), 0) + err := testStore.Set("john", []byte("doe"), 0) require.NoError(b, err) b.ReportAllocs() @@ -244,13 +228,13 @@ func Benchmark_MongoDB_Get(b *testing.B) { } func Benchmark_MongoDB_SetAndDelete(b *testing.B) { - testStore, err := newTestStore(b) - require.NoError(b, err) + testStore := newTestStore(b) defer testStore.Close() b.ReportAllocs() b.ResetTimer() + var err error for i := 0; i < b.N; i++ { _ = testStore.Set("john", []byte("doe"), 0) err = testStore.Delete("john") From 0e4dfc0d070c95444850de9154c0be03e3568856 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20de=20la=20Pe=C3=B1a?= Date: Tue, 15 Apr 2025 16:26:36 +0200 Subject: [PATCH 08/18] chore(mysql): use require in tests --- mysql/mysql_test.go | 80 ++++++++++++++++++--------------------------- 1 file changed, 32 insertions(+), 48 deletions(-) diff --git a/mysql/mysql_test.go b/mysql/mysql_test.go index ce9cc94d..69a0d74e 100644 --- a/mysql/mysql_test.go +++ b/mysql/mysql_test.go @@ -22,7 +22,7 @@ const ( mysqlDatabase string = "fiber" ) -func newTestStore(t testing.TB) (*Storage, error) { +func newTestStore(t testing.TB) *Storage { t.Helper() ctx := context.Background() @@ -30,14 +30,12 @@ func newTestStore(t testing.TB) (*Storage, error) { c := mustStartMySQL(t) conn, err := c.ConnectionString(ctx) - if err != nil { - return nil, err - } + require.NoError(t, err) return New(Config{ ConnectionURI: conn, Reset: true, - }), nil + }) } func mustStartMySQL(t testing.TB) *mysql.MySQLContainer { @@ -64,8 +62,8 @@ func mustStartMySQL(t testing.TB) *mysql.MySQLContainer { } func Test_MYSQL_New(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) + defer testStore.Close() require.True(t, testStore.db != nil) require.NoError(t, testStore.Close()) @@ -91,11 +89,10 @@ func Test_MYSQL_Set(t *testing.T) { val = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, 0) + err := testStore.Set(key, val, 0) require.NoError(t, err) } @@ -105,11 +102,10 @@ func Test_MYSQL_Set_Override(t *testing.T) { val = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, 0) + err := testStore.Set(key, val, 0) require.NoError(t, err) err = testStore.Set(key, val, 0) @@ -122,11 +118,10 @@ func Test_MYSQL_Get(t *testing.T) { val = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, 0) + err := testStore.Set(key, val, 0) require.NoError(t, err) result, err := testStore.Get(key) @@ -141,11 +136,10 @@ func Test_MYSQL_Set_Expiration(t *testing.T) { exp = 1 * time.Second ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, exp) + err := testStore.Set(key, val, exp) require.NoError(t, err) time.Sleep(1100 * time.Millisecond) @@ -158,8 +152,7 @@ func Test_MYSQL_Set_Expiration(t *testing.T) { func Test_MYSQL_Get_Expired(t *testing.T) { key := "john" - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() result, err := testStore.Get(key) @@ -168,8 +161,7 @@ func Test_MYSQL_Get_Expired(t *testing.T) { } func Test_MYSQL_Get_NotExist(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() result, err := testStore.Get("notexist") @@ -183,11 +175,10 @@ func Test_MYSQL_Delete(t *testing.T) { val = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, 0) + err := testStore.Set(key, val, 0) require.NoError(t, err) err = testStore.Delete(key) @@ -201,11 +192,10 @@ func Test_MYSQL_Delete(t *testing.T) { func Test_MYSQL_Reset(t *testing.T) { val := []byte("doe") - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set("john1", val, 0) + err := testStore.Set("john1", val, 0) require.NoError(t, err) err = testStore.Set("john2", val, 0) @@ -227,11 +217,10 @@ func Test_MYSQL_GC(t *testing.T) { testVal := []byte("doe") // This key should expire - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set("john", testVal, time.Nanosecond) + err := testStore.Set("john", testVal, time.Nanosecond) require.NoError(t, err) testStore.gc(time.Now()) @@ -252,11 +241,10 @@ func Test_MYSQL_GC(t *testing.T) { func Test_MYSQL_Non_UTF8(t *testing.T) { val := []byte("0xF5") - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set("0xF6", val, 0) + err := testStore.Set("0xF6", val, 0) require.NoError(t, err) result, err := testStore.Get("0xF6") @@ -265,28 +253,25 @@ func Test_MYSQL_Non_UTF8(t *testing.T) { } func Test_MYSQL_Close(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) - - require.Nil(t, testStore.Close()) + testStore := newTestStore(t) + require.NoError(t, testStore.Close()) } func Test_MYSQL_Conn(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() require.True(t, testStore.Conn() != nil) } func Benchmark_MYSQL_Set(b *testing.B) { - testStore, err := newTestStore(b) - require.NoError(b, err) + testStore := newTestStore(b) defer testStore.Close() b.ReportAllocs() b.ResetTimer() + var err error for i := 0; i < b.N; i++ { err = testStore.Set("john", []byte("doe"), 0) } @@ -295,11 +280,10 @@ func Benchmark_MYSQL_Set(b *testing.B) { } func Benchmark_MYSQL_Get(b *testing.B) { - testStore, err := newTestStore(b) - require.NoError(b, err) + testStore := newTestStore(b) defer testStore.Close() - err = testStore.Set("john", []byte("doe"), 0) + err := testStore.Set("john", []byte("doe"), 0) require.NoError(b, err) b.ReportAllocs() @@ -313,13 +297,13 @@ func Benchmark_MYSQL_Get(b *testing.B) { } func Benchmark_MYSQL_SetAndDelete(b *testing.B) { - testStore, err := newTestStore(b) - require.NoError(b, err) + testStore := newTestStore(b) defer testStore.Close() b.ReportAllocs() b.ResetTimer() + var err error for i := 0; i < b.N; i++ { _ = testStore.Set("john", []byte("doe"), 0) err = testStore.Delete("john") From 8855b7eda1a43fb2b4ed0ea6bd0dd41072b670d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20de=20la=20Pe=C3=B1a?= Date: Tue, 15 Apr 2025 16:28:24 +0200 Subject: [PATCH 09/18] chore(nats): use require in tests --- nats/nats_test.go | 61 +++++++++++++++++++---------------------------- 1 file changed, 25 insertions(+), 36 deletions(-) diff --git a/nats/nats_test.go b/nats/nats_test.go index 7f3fe016..fa878564 100644 --- a/nats/nats_test.go +++ b/nats/nats_test.go @@ -75,7 +75,7 @@ func createTLSCerts(t testing.TB) (*tlscert.Certificate, *tlscert.Certificate, * return caCert, clientCert, natsCert } -func newTestStore(t testing.TB) (*Storage, error) { +func newTestStore(t testing.TB) *Storage { t.Helper() ca, client, natsCert := createTLSCerts(t) @@ -141,7 +141,7 @@ func newTestStore(t testing.TB) (*Storage, error) { Bucket: "test", Storage: jetstream.MemoryStorage, }, - }), nil + }) } func Test_Storage_Nats_Set(t *testing.T) { @@ -150,11 +150,10 @@ func Test_Storage_Nats_Set(t *testing.T) { val = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, 0) + err := testStore.Set(key, val, 0) require.NoError(t, err) keys, err := testStore.Keys() @@ -169,11 +168,10 @@ func Test_Storage_Nats_Set_Overwrite(t *testing.T) { val2 = []byte("overwritten") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val1, 0) + err := testStore.Set(key, val1, 0) require.NoError(t, err) err = testStore.Set(key, val2, 30*time.Second) @@ -193,11 +191,10 @@ func Test_Storage_Nats_Get(t *testing.T) { val = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, 30*time.Second) + err := testStore.Set(key, val, 30*time.Second) require.NoError(t, err) result, err := testStore.Get(key) @@ -216,11 +213,10 @@ func Test_Storage_Nats_Set_Expiration(t *testing.T) { exp = 1 * time.Second ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, exp) + err := testStore.Set(key, val, exp) require.NoError(t, err) time.Sleep(1100 * time.Millisecond) @@ -241,8 +237,7 @@ func Test_Storage_Nats_Set_Long_Expiration_with_Keys(t *testing.T) { exp = 5 * time.Second ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() keys, err := testStore.Keys() @@ -269,8 +264,7 @@ func Test_Storage_Nats_Set_Long_Expiration_with_Keys(t *testing.T) { } func Test_Storage_Nats_Get_NotExist(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() result, err := testStore.Get("notexist") @@ -288,11 +282,10 @@ func Test_Storage_Nats_Delete(t *testing.T) { val = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, 0) + err := testStore.Set(key, val, 0) require.NoError(t, err) keys, err := testStore.Keys() @@ -312,13 +305,12 @@ func Test_Storage_Nats_Delete(t *testing.T) { } func Test_Storage_Nats_Reset(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() val := []byte("doe") - err = testStore.Set("john1", val, 0) + err := testStore.Set("john1", val, 0) require.NoError(t, err) err = testStore.Set("john2", val, 0) @@ -345,14 +337,12 @@ func Test_Storage_Nats_Reset(t *testing.T) { } func Test_Storage_Nats_Close(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) - require.Nil(t, testStore.Close()) + testStore := newTestStore(t) + require.NoError(t, testStore.Close()) } func Test_Storage_Nats_Conn(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() n, k := testStore.Conn() @@ -361,13 +351,13 @@ func Test_Storage_Nats_Conn(t *testing.T) { } func Benchmark_Nats_Set(b *testing.B) { - testStore, err := newTestStore(b) - require.NoError(b, err) + testStore := newTestStore(b) defer testStore.Close() b.ReportAllocs() b.ResetTimer() + var err error for i := 0; i < b.N; i++ { err = testStore.Set("john", []byte("doe"), 0) } @@ -376,11 +366,10 @@ func Benchmark_Nats_Set(b *testing.B) { } func Benchmark_Nats_Get(b *testing.B) { - testStore, err := newTestStore(b) - require.NoError(b, err) + testStore := newTestStore(b) defer testStore.Close() - err = testStore.Set("john", []byte("doe"), 0) + err := testStore.Set("john", []byte("doe"), 0) require.NoError(b, err) b.ReportAllocs() @@ -394,13 +383,13 @@ func Benchmark_Nats_Get(b *testing.B) { } func Benchmark_Nats_SetAndDelete(b *testing.B) { - testStore, err := newTestStore(b) - require.NoError(b, err) + testStore := newTestStore(b) defer testStore.Close() b.ReportAllocs() b.ResetTimer() + var err error for i := 0; i < b.N; i++ { _ = testStore.Set("john", []byte("doe"), 0) err = testStore.Delete("john") From 17b879d6e47dfabdfd58002ecb21596ce53883ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20de=20la=20Pe=C3=B1a?= Date: Tue, 15 Apr 2025 16:31:41 +0200 Subject: [PATCH 10/18] chore(neo4j): use require in tests, running a container per test function --- neo4j/neo4j_test.go | 72 ++++++++++++++++++++++++++++----------------- 1 file changed, 45 insertions(+), 27 deletions(-) diff --git a/neo4j/neo4j_test.go b/neo4j/neo4j_test.go index db15c0ae..79155d32 100644 --- a/neo4j/neo4j_test.go +++ b/neo4j/neo4j_test.go @@ -2,8 +2,6 @@ package neo4j import ( "context" - "log" - "os" "testing" "time" @@ -19,10 +17,7 @@ const ( neo4jReadyLog = "Bolt enabled on" ) -var testStore *Storage - -// TestMain sets up and tears down the test container -func TestMain(m *testing.M) { +func newTestStore(t testing.TB) *Storage { ctx := context.Background() // Start a Neo4j test container @@ -37,36 +32,20 @@ func TestMain(m *testing.M) { ), ), ) - if err != nil { - log.Fatalf("Failed to start Neo4j container: %v", err) - } + testcontainers.CleanupContainer(t, neo4jContainer) + require.NoError(t, err) // Get the Bolt URI uri, err := neo4jContainer.BoltUrl(ctx) - if err != nil { - log.Fatalf("Failed to get connection string: %v", err) - } + require.NoError(t, err) // Initialize Neo4j store with test container credentials - store := New(Config{ + return New(Config{ Reset: true, URI: uri, Username: "neo4j", Password: "pass#w*#d", }) - - testStore = store - - defer testStore.Close() - defer func() { - if err := neo4jContainer.Terminate(ctx); err != nil { - log.Printf("Failed to terminate Neo4j container: %v", err) - } - }() - - code := m.Run() - - os.Exit(code) } func Test_Neo4jStore_Set(t *testing.T) { @@ -75,6 +54,9 @@ func Test_Neo4jStore_Set(t *testing.T) { val = []byte("doe") ) + testStore := newTestStore(t) + defer testStore.Close() + err := testStore.Set(key, val, 0) require.NoError(t, err) } @@ -85,6 +67,9 @@ func Test_Neo4jStore_Upsert(t *testing.T) { val = []byte("doe") ) + testStore := newTestStore(t) + defer testStore.Close() + err := testStore.Set(key, val, 0) require.NoError(t, err) @@ -98,6 +83,9 @@ func Test_Neo4jStore_Get(t *testing.T) { val = []byte("doe") ) + testStore := newTestStore(t) + defer testStore.Close() + err := testStore.Set(key, val, 0) require.NoError(t, err) @@ -113,6 +101,9 @@ func Test_Neo4jStore_Set_Expiration(t *testing.T) { exp = 100 * time.Millisecond ) + testStore := newTestStore(t) + defer testStore.Close() + err := testStore.Set(key, val, exp) require.NoError(t, err) @@ -126,12 +117,18 @@ func Test_Neo4jStore_Set_Expiration(t *testing.T) { func Test_Neo4jStore_Get_Expired(t *testing.T) { key := "john" + testStore := newTestStore(t) + defer testStore.Close() + result, err := testStore.Get(key) require.NoError(t, err) require.Zero(t, len(result)) } func Test_Neo4jStore_Get_NotExist(t *testing.T) { + testStore := newTestStore(t) + defer testStore.Close() + result, err := testStore.Get("notexist") require.NoError(t, err) require.Zero(t, len(result)) @@ -143,6 +140,9 @@ func Test_Neo4jStore_Delete(t *testing.T) { val = []byte("doe") ) + testStore := newTestStore(t) + defer testStore.Close() + err := testStore.Set(key, val, 0) require.NoError(t, err) @@ -157,6 +157,9 @@ func Test_Neo4jStore_Delete(t *testing.T) { func Test_Neo4jStore_Reset(t *testing.T) { val := []byte("doe") + testStore := newTestStore(t) + defer testStore.Close() + err := testStore.Set("john1", val, 0) require.NoError(t, err) @@ -178,6 +181,9 @@ func Test_Neo4jStore_Reset(t *testing.T) { func Test_Neo4jStore_Non_UTF8(t *testing.T) { val := []byte("0xF5") + testStore := newTestStore(t) + defer testStore.Close() + err := testStore.Set("0xF6", val, 0) require.NoError(t, err) @@ -187,14 +193,20 @@ func Test_Neo4jStore_Non_UTF8(t *testing.T) { } func Test_Neo4jStore_Close(t *testing.T) { - require.Nil(t, testStore.Close()) + testStore := newTestStore(t) + require.NoError(t, testStore.Close()) } func Test_Neo4jStore_Conn(t *testing.T) { + testStore := newTestStore(t) + defer testStore.Close() require.True(t, testStore.Conn() != nil) } func Benchmark_Neo4jStore_Set(b *testing.B) { + testStore := newTestStore(b) + defer testStore.Close() + b.ReportAllocs() b.ResetTimer() @@ -207,6 +219,9 @@ func Benchmark_Neo4jStore_Set(b *testing.B) { } func Benchmark_Neo4jStore_Get(b *testing.B) { + testStore := newTestStore(b) + defer testStore.Close() + err := testStore.Set("john", []byte("doe"), 0) require.NoError(b, err) @@ -221,6 +236,9 @@ func Benchmark_Neo4jStore_Get(b *testing.B) { } func Benchmark_Neo4jStore_SetAndDelete(b *testing.B) { + testStore := newTestStore(b) + defer testStore.Close() + b.ReportAllocs() b.ResetTimer() From a875f39f69c44736041fd3c865bef9f1f86f6de3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20de=20la=20Pe=C3=B1a?= Date: Tue, 15 Apr 2025 16:35:40 +0200 Subject: [PATCH 11/18] chore(postgres): use require in tests --- postgres/postgres_test.go | 105 +++++++++++++++----------------------- 1 file changed, 40 insertions(+), 65 deletions(-) diff --git a/postgres/postgres_test.go b/postgres/postgres_test.go index f87006f2..25cb7f6e 100644 --- a/postgres/postgres_test.go +++ b/postgres/postgres_test.go @@ -23,7 +23,7 @@ const ( postgresDatabase string = "fiber" ) -func newTestConfig(t testing.TB) (Config, error) { +func newTestConfig(t testing.TB) Config { t.Helper() ctx := context.Background() @@ -42,42 +42,32 @@ func newTestConfig(t testing.TB) (Config, error) { testcontainers.CleanupContainer(t, c) require.NoError(t, err) - var cfg Config conn, err := c.ConnectionString(ctx, "sslmode=disable") - if err != nil { - return cfg, err - } + require.NoError(t, err) - cfg = Config{ + cfg := Config{ ConnectionURI: conn, Reset: true, } - return cfg, nil + return cfg } -func newTestStore(t testing.TB) (*Storage, error) { +func newTestStore(t testing.TB) *Storage { t.Helper() - cfg, err := newTestConfig(t) - if err != nil { - return nil, err - } - - return newTestStoreWithConfig(t, cfg) + return newTestStoreWithConfig(t, newTestConfig(t)) } -func newTestStoreWithConfig(t testing.TB, cfg Config) (*Storage, error) { +func newTestStoreWithConfig(t testing.TB, cfg Config) *Storage { t.Helper() - return New(cfg), nil + return New(cfg) } func TestNoCreateUser(t *testing.T) { - cfg, err := newTestConfig(t) - require.NoError(t, err) + cfg := newTestConfig(t) - testStore, err := newTestStoreWithConfig(t, cfg) - require.NoError(t, err) + testStore := newTestStoreWithConfig(t, cfg) defer testStore.Close() // Create a new user @@ -88,7 +78,7 @@ func TestNoCreateUser(t *testing.T) { username := "testuser" + strconv.Itoa(int(time.Now().UnixNano())) password := "testpassword" - _, err = conn.Exec(ctx, "CREATE USER "+username+" WITH PASSWORD '"+password+"'") + _, err := conn.Exec(ctx, "CREATE USER "+username+" WITH PASSWORD '"+password+"'") require.NoError(t, err) _, err = conn.Exec(ctx, "GRANT CONNECT ON DATABASE "+postgresDatabase+" TO "+username) @@ -213,12 +203,11 @@ func TestNoCreateUser(t *testing.T) { } func Test_Should_Panic_On_Wrong_Schema(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() // Create a test table with wrong schema - _, err = testStore.Conn().Exec(context.Background(), ` + _, err := testStore.Conn().Exec(context.Background(), ` CREATE TABLE IF NOT EXISTS test_schema_table ( k VARCHAR(64) PRIMARY KEY NOT NULL DEFAULT '', v BYTEA NOT NULL, @@ -243,11 +232,10 @@ func Test_Postgres_Set(t *testing.T) { val = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, 0) + err := testStore.Set(key, val, 0) require.NoError(t, err) } @@ -257,11 +245,10 @@ func Test_Postgres_Set_Override(t *testing.T) { val = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, 0) + err := testStore.Set(key, val, 0) require.NoError(t, err) err = testStore.Set(key, val, 0) @@ -274,11 +261,10 @@ func Test_Postgres_Get(t *testing.T) { val = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, 0) + err := testStore.Set(key, val, 0) require.NoError(t, err) result, err := testStore.Get(key) @@ -293,11 +279,10 @@ func Test_Postgres_Set_Expiration(t *testing.T) { exp = 1 * time.Second ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, exp) + err := testStore.Set(key, val, exp) require.NoError(t, err) time.Sleep(1100 * time.Millisecond) @@ -310,8 +295,7 @@ func Test_Postgres_Set_Expiration(t *testing.T) { func Test_Postgres_Get_Expired(t *testing.T) { key := "john" - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() result, err := testStore.Get(key) @@ -320,8 +304,7 @@ func Test_Postgres_Get_Expired(t *testing.T) { } func Test_Postgres_Get_NotExist(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() result, err := testStore.Get("notexist") @@ -335,11 +318,10 @@ func Test_Postgres_Delete(t *testing.T) { val = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, 0) + err := testStore.Set(key, val, 0) require.NoError(t, err) err = testStore.Delete(key) @@ -353,11 +335,10 @@ func Test_Postgres_Delete(t *testing.T) { func Test_Postgres_Reset(t *testing.T) { val := []byte("doe") - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set("john1", val, 0) + err := testStore.Set("john1", val, 0) require.NoError(t, err) err = testStore.Set("john2", val, 0) @@ -378,12 +359,11 @@ func Test_Postgres_Reset(t *testing.T) { func Test_Postgres_GC(t *testing.T) { testVal := []byte("doe") - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() // This key should expire - err = testStore.Set("john", testVal, time.Nanosecond) + err := testStore.Set("john", testVal, time.Nanosecond) require.NoError(t, err) testStore.gc(time.Now()) @@ -404,11 +384,10 @@ func Test_Postgres_GC(t *testing.T) { func Test_Postgres_Non_UTF8(t *testing.T) { val := []byte("0xF5") - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set("0xF6", val, 0) + err := testStore.Set("0xF6", val, 0) require.NoError(t, err) result, err := testStore.Get("0xF6") @@ -425,28 +404,25 @@ func Test_SslRequiredMode(t *testing.T) { } func Test_Postgres_Conn(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() require.True(t, testStore.Conn() != nil) } func Test_Postgres_Close(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) - - require.Nil(t, testStore.Close()) + testStore := newTestStore(t) + require.NoError(t, testStore.Close()) } func Benchmark_Postgres_Set(b *testing.B) { - testStore, err := newTestStore(b) - require.NoError(b, err) + testStore := newTestStore(b) defer testStore.Close() b.ReportAllocs() b.ResetTimer() + var err error for i := 0; i < b.N; i++ { err = testStore.Set("john", []byte("doe"), 0) } @@ -455,11 +431,10 @@ func Benchmark_Postgres_Set(b *testing.B) { } func Benchmark_Postgres_Get(b *testing.B) { - testStore, err := newTestStore(b) - require.NoError(b, err) + testStore := newTestStore(b) defer testStore.Close() - err = testStore.Set("john", []byte("doe"), 0) + err := testStore.Set("john", []byte("doe"), 0) require.NoError(b, err) b.ReportAllocs() @@ -473,13 +448,13 @@ func Benchmark_Postgres_Get(b *testing.B) { } func Benchmark_Postgres_SetAndDelete(b *testing.B) { - testStore, err := newTestStore(b) - require.NoError(b, err) + testStore := newTestStore(b) defer testStore.Close() b.ReportAllocs() b.ResetTimer() + var err error for i := 0; i < b.N; i++ { _ = testStore.Set("john", []byte("doe"), 0) err = testStore.Delete("john") From 827ef9ec9613e0fe6c61c9d564bcc041be7a99b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20de=20la=20Pe=C3=B1a?= Date: Tue, 15 Apr 2025 16:54:45 +0200 Subject: [PATCH 12/18] chore(s3): use require in tests, running a container per test function --- s3/init_test.go | 18 +++++++----------- s3/s3_methods_test.go | 9 +++++++++ s3/s3_test.go | 32 +++++++++++++++++++++++++++++++- 3 files changed, 47 insertions(+), 12 deletions(-) diff --git a/s3/init_test.go b/s3/init_test.go index dc42627c..7cdb6bd7 100644 --- a/s3/init_test.go +++ b/s3/init_test.go @@ -6,6 +6,7 @@ import ( "testing" "time" + "github.com/stretchr/testify/require" "github.com/testcontainers/testcontainers-go" "github.com/testcontainers/testcontainers-go/modules/minio" "github.com/testcontainers/testcontainers-go/wait" @@ -15,8 +16,6 @@ const ( bucket = "testbucket" ) -var testStore *Storage - const ( // minioImage is the default image used for running S3 in tests. minioImage = "docker.io/minio/minio:latest" @@ -25,7 +24,7 @@ const ( minioPass string = "minio-password" ) -func TestMain(m *testing.M) { +func newTestStore(t testing.TB) *Storage { img := minioImage if imgFromEnv := os.Getenv(minioImageEnvVar); imgFromEnv != "" { img = imgFromEnv @@ -51,7 +50,7 @@ func TestMain(m *testing.M) { panic(err) } - testStore = New( + testStore := New( Config{ Bucket: bucket, Endpoint: "http://" + conn, @@ -65,12 +64,9 @@ func TestMain(m *testing.M) { ) // Create test bucket. - _ = testStore.CreateBucket(bucket) + err = testStore.CreateBucket(bucket) + require.NoError(t, err) + // Do not delete test bucket, as the container is disposed after each test. - exitVal := m.Run() - - // Delete test bucket. - _ = testStore.DeleteBucket(bucket) - - os.Exit(exitVal) + return testStore } diff --git a/s3/s3_methods_test.go b/s3/s3_methods_test.go index a888eeca..56a169c2 100644 --- a/s3/s3_methods_test.go +++ b/s3/s3_methods_test.go @@ -11,6 +11,9 @@ import ( func Test_S3_CreateDeleteBucket(t *testing.T) { bkt := "test-new-bucket" + testStore := newTestStore(t) + defer testStore.Close() + err := testStore.CreateBucket(bkt) require.NoError(t, err) @@ -21,6 +24,9 @@ func Test_S3_CreateDeleteBucket(t *testing.T) { func Test_S3_DeleteMany(t *testing.T) { val := []byte("doe") + testStore := newTestStore(t) + defer testStore.Close() + err := testStore.Set("john1", val, 0) require.NoError(t, err) @@ -61,6 +67,9 @@ func Test_S3_SetWithChecksum(t *testing.T) { types.ChecksumAlgorithmSha256: sha256sum, } + testStore := newTestStore(t) + defer testStore.Close() + err := testStore.SetWithChecksum(key, val, checksum) require.NoError(t, err) diff --git a/s3/s3_test.go b/s3/s3_test.go index 5ed2cc5f..fe2ad8f2 100644 --- a/s3/s3_test.go +++ b/s3/s3_test.go @@ -12,6 +12,9 @@ func Test_S3_Set(t *testing.T) { val = []byte("doe") ) + testStore := newTestStore(t) + defer testStore.Close() + err := testStore.Set(key, val, 0) require.NoError(t, err) } @@ -22,6 +25,9 @@ func Test_S3_Set_Override(t *testing.T) { val = []byte("doe") ) + testStore := newTestStore(t) + defer testStore.Close() + err := testStore.Set(key, val, 0) require.NoError(t, err) @@ -35,6 +41,9 @@ func Test_S3_Get(t *testing.T) { val = []byte("doe") ) + testStore := newTestStore(t) + defer testStore.Close() + err := testStore.Set(key, val, 0) require.NoError(t, err) @@ -44,6 +53,9 @@ func Test_S3_Get(t *testing.T) { } func Test_S3_Get_NotExist(t *testing.T) { + testStore := newTestStore(t) + defer testStore.Close() + result, err := testStore.Get("notexist") require.NoError(t, err) require.Zero(t, len(result)) @@ -55,6 +67,9 @@ func Test_S3_Delete(t *testing.T) { val = []byte("doe") ) + testStore := newTestStore(t) + defer testStore.Close() + err := testStore.Set(key, val, 0) require.NoError(t, err) @@ -69,6 +84,9 @@ func Test_S3_Delete(t *testing.T) { func Test_S3_Reset(t *testing.T) { val := []byte("doe") + testStore := newTestStore(t) + defer testStore.Close() + err := testStore.Set("john1", val, 0) require.NoError(t, err) @@ -88,14 +106,20 @@ func Test_S3_Reset(t *testing.T) { } func Test_S3_Close(t *testing.T) { - require.Nil(t, testStore.Close()) + testStore := newTestStore(t) + require.NoError(t, testStore.Close()) } func Test_S3_Conn(t *testing.T) { + testStore := newTestStore(t) + defer testStore.Close() require.True(t, testStore.Conn() != nil) } func Benchmark_S3_Set(b *testing.B) { + testStore := newTestStore(b) + defer testStore.Close() + b.ReportAllocs() b.ResetTimer() @@ -108,6 +132,9 @@ func Benchmark_S3_Set(b *testing.B) { } func Benchmark_S3_Get(b *testing.B) { + testStore := newTestStore(b) + defer testStore.Close() + err := testStore.Set("john", []byte("doe"), 0) require.NoError(b, err) @@ -122,6 +149,9 @@ func Benchmark_S3_Get(b *testing.B) { } func Benchmark_S3_SetAndDelete(b *testing.B) { + testStore := newTestStore(b) + defer testStore.Close() + b.ReportAllocs() b.ResetTimer() From aac5d670551da6c55ecf85d230811e40901c1378 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20de=20la=20Pe=C3=B1a?= Date: Tue, 15 Apr 2025 16:56:42 +0200 Subject: [PATCH 13/18] chore(scylladb): use require in tests --- scylladb/scylladb_test.go | 70 +++++++++++++++------------------------ 1 file changed, 27 insertions(+), 43 deletions(-) diff --git a/scylladb/scylladb_test.go b/scylladb/scylladb_test.go index be88d31f..486a1982 100644 --- a/scylladb/scylladb_test.go +++ b/scylladb/scylladb_test.go @@ -18,7 +18,7 @@ const ( scyllaDBEnvVar = "TEST_SCYLLADB_IMAGE" ) -func newTestStore(t testing.TB) (*Storage, error) { +func newTestStore(t testing.TB) *Storage { t.Helper() img := scyllaDBImage @@ -30,19 +30,13 @@ func newTestStore(t testing.TB) (*Storage, error) { c, err := scylladb.Run(ctx, img) testcontainers.CleanupContainer(t, c) - if err != nil { - return nil, err - } + require.NoError(t, err) connectionHost, err := c.NonShardAwareConnectionHost(ctx) - if err != nil { - return nil, err - } + require.NoError(t, err) scyllaPort, err := c.MappedPort(ctx, "9042/tcp") - if err != nil { - return nil, err - } + require.NoError(t, err) return New(Config{ Hosts: []string{connectionHost}, @@ -51,7 +45,7 @@ func newTestStore(t testing.TB) (*Storage, error) { // Disable initial host lookup in tests. // See https://github.com/apache/cassandra-gocql-driver/issues/1020#issuecomment-362494859 DisableInitialHostLookup: true, - }), nil + }) } func Test_Scylla_Set(t *testing.T) { @@ -61,11 +55,10 @@ func Test_Scylla_Set(t *testing.T) { value = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, value, 0) + err := testStore.Set(key, value, 0) require.NoError(t, err) } @@ -76,11 +69,10 @@ func Test_Scylla_Set_Override_Get(t *testing.T) { valOverride = []byte("doe2") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, valInitial, 0) + err := testStore.Set(key, valInitial, 0) require.NoError(t, err) result, err := testStore.Get(key) @@ -101,11 +93,10 @@ func Test_Scylla_Get(t *testing.T) { val = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, 0) + err := testStore.Set(key, val, 0) require.NoError(t, err) result, err := testStore.Get(key) @@ -120,11 +111,10 @@ func Test_Scylla_Set_Expiration_Get(t *testing.T) { exp = 1 * time.Second ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, exp) + err := testStore.Set(key, val, exp) require.NoError(t, err) time.Sleep(1001 * time.Millisecond) @@ -135,8 +125,7 @@ func Test_Scylla_Set_Expiration_Get(t *testing.T) { } func Test_Scylla_Get_NotExist(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() result, err := testStore.Get("not-exist") @@ -150,11 +139,10 @@ func Test_Scylla_Delete(t *testing.T) { val = []byte("doe") ) - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set(key, val, 0) + err := testStore.Set(key, val, 0) require.NoError(t, err) err = testStore.Delete(key) @@ -168,11 +156,10 @@ func Test_Scylla_Delete(t *testing.T) { func Test_Scylla_Reset(t *testing.T) { var val = []byte("doe") - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set("john1", val, 0) + err := testStore.Set("john1", val, 0) require.NoError(t, err) err = testStore.Set("john2", val, 0) @@ -191,27 +178,25 @@ func Test_Scylla_Reset(t *testing.T) { } func Test_Scylla_Close(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) - require.Nil(t, testStore.Close()) + testStore := newTestStore(t) + require.NoError(t, testStore.Close()) } func Test_Scylla_Conn(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() require.True(t, testStore.Conn() != nil) } func Benchmark_Scylla_Set(b *testing.B) { - testStore, err := newTestStore(b) - require.NoError(b, err) + testStore := newTestStore(b) defer testStore.Close() b.ReportAllocs() b.ResetTimer() + var err error for i := 0; i < b.N; i++ { err = testStore.Set("john", []byte("doe"), 0) } @@ -220,11 +205,10 @@ func Benchmark_Scylla_Set(b *testing.B) { } func Benchmark_Scylla_Get(b *testing.B) { - testStore, err := newTestStore(b) - require.NoError(b, err) + testStore := newTestStore(b) defer testStore.Close() - err = testStore.Set("john", []byte("doe"), 0) + err := testStore.Set("john", []byte("doe"), 0) require.NoError(b, err) b.ReportAllocs() @@ -238,13 +222,13 @@ func Benchmark_Scylla_Get(b *testing.B) { } func Benchmark_Scylla_SetAndDelete(b *testing.B) { - testStore, err := newTestStore(b) - require.NoError(b, err) + testStore := newTestStore(b) defer testStore.Close() b.ReportAllocs() b.ResetTimer() + var err error for i := 0; i < b.N; i++ { _ = testStore.Set("john", []byte("doe"), 0) err = testStore.Delete("john") From ff6212a42cb4a19e537df0357b11c046761f3044 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20de=20la=20Pe=C3=B1a?= Date: Tue, 15 Apr 2025 17:17:26 +0200 Subject: [PATCH 14/18] fix(clickhouse): order matters --- clickhouse/clickhouse_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/clickhouse/clickhouse_test.go b/clickhouse/clickhouse_test.go index 48b5190d..16bc3eff 100644 --- a/clickhouse/clickhouse_test.go +++ b/clickhouse/clickhouse_test.go @@ -242,9 +242,6 @@ func Benchmark_Clickhouse_Get(b *testing.B) { } func Benchmark_Clickhouse_Set_And_Delete(b *testing.B) { - b.ReportAllocs() - b.ResetTimer() - client := newTestStore(b, Config{ Engine: Memory, Table: "test_table", @@ -252,6 +249,9 @@ func Benchmark_Clickhouse_Set_And_Delete(b *testing.B) { }) defer client.Close() + b.ReportAllocs() + b.ResetTimer() + var err error for i := 0; i < b.N; i++ { _ = client.Set("john", []byte("doe"), 0) From 3ab20cababf913a48ed966d263f8ff21842a6552 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20de=20la=20Pe=C3=B1a?= Date: Tue, 15 Apr 2025 18:00:40 +0200 Subject: [PATCH 15/18] chore: revert neo4j --- neo4j/neo4j_test.go | 70 +++++++++++++++++---------------------------- 1 file changed, 26 insertions(+), 44 deletions(-) diff --git a/neo4j/neo4j_test.go b/neo4j/neo4j_test.go index 79155d32..35724cac 100644 --- a/neo4j/neo4j_test.go +++ b/neo4j/neo4j_test.go @@ -2,6 +2,8 @@ package neo4j import ( "context" + "log" + "os" "testing" "time" @@ -17,7 +19,10 @@ const ( neo4jReadyLog = "Bolt enabled on" ) -func newTestStore(t testing.TB) *Storage { +var testStore *Storage + +// TestMain sets up and tears down the test container +func TestMain(m *testing.M) { ctx := context.Background() // Start a Neo4j test container @@ -32,20 +37,36 @@ func newTestStore(t testing.TB) *Storage { ), ), ) - testcontainers.CleanupContainer(t, neo4jContainer) - require.NoError(t, err) + if err != nil { + log.Fatalf("Failed to start Neo4j container: %v", err) + } // Get the Bolt URI uri, err := neo4jContainer.BoltUrl(ctx) - require.NoError(t, err) + if err != nil { + log.Fatalf("Failed to get connection string: %v", err) + } + defer func() { + if err := neo4jContainer.Terminate(ctx); err != nil { + log.Printf("Failed to terminate Neo4j container: %v", err) + } + }() // Initialize Neo4j store with test container credentials - return New(Config{ + store := New(Config{ Reset: true, URI: uri, Username: "neo4j", Password: "pass#w*#d", }) + + testStore = store + + defer testStore.Close() + + code := m.Run() + + os.Exit(code) } func Test_Neo4jStore_Set(t *testing.T) { @@ -54,9 +75,6 @@ func Test_Neo4jStore_Set(t *testing.T) { val = []byte("doe") ) - testStore := newTestStore(t) - defer testStore.Close() - err := testStore.Set(key, val, 0) require.NoError(t, err) } @@ -67,9 +85,6 @@ func Test_Neo4jStore_Upsert(t *testing.T) { val = []byte("doe") ) - testStore := newTestStore(t) - defer testStore.Close() - err := testStore.Set(key, val, 0) require.NoError(t, err) @@ -83,9 +98,6 @@ func Test_Neo4jStore_Get(t *testing.T) { val = []byte("doe") ) - testStore := newTestStore(t) - defer testStore.Close() - err := testStore.Set(key, val, 0) require.NoError(t, err) @@ -101,9 +113,6 @@ func Test_Neo4jStore_Set_Expiration(t *testing.T) { exp = 100 * time.Millisecond ) - testStore := newTestStore(t) - defer testStore.Close() - err := testStore.Set(key, val, exp) require.NoError(t, err) @@ -117,18 +126,12 @@ func Test_Neo4jStore_Set_Expiration(t *testing.T) { func Test_Neo4jStore_Get_Expired(t *testing.T) { key := "john" - testStore := newTestStore(t) - defer testStore.Close() - result, err := testStore.Get(key) require.NoError(t, err) require.Zero(t, len(result)) } func Test_Neo4jStore_Get_NotExist(t *testing.T) { - testStore := newTestStore(t) - defer testStore.Close() - result, err := testStore.Get("notexist") require.NoError(t, err) require.Zero(t, len(result)) @@ -140,9 +143,6 @@ func Test_Neo4jStore_Delete(t *testing.T) { val = []byte("doe") ) - testStore := newTestStore(t) - defer testStore.Close() - err := testStore.Set(key, val, 0) require.NoError(t, err) @@ -157,9 +157,6 @@ func Test_Neo4jStore_Delete(t *testing.T) { func Test_Neo4jStore_Reset(t *testing.T) { val := []byte("doe") - testStore := newTestStore(t) - defer testStore.Close() - err := testStore.Set("john1", val, 0) require.NoError(t, err) @@ -181,9 +178,6 @@ func Test_Neo4jStore_Reset(t *testing.T) { func Test_Neo4jStore_Non_UTF8(t *testing.T) { val := []byte("0xF5") - testStore := newTestStore(t) - defer testStore.Close() - err := testStore.Set("0xF6", val, 0) require.NoError(t, err) @@ -193,20 +187,14 @@ func Test_Neo4jStore_Non_UTF8(t *testing.T) { } func Test_Neo4jStore_Close(t *testing.T) { - testStore := newTestStore(t) require.NoError(t, testStore.Close()) } func Test_Neo4jStore_Conn(t *testing.T) { - testStore := newTestStore(t) - defer testStore.Close() require.True(t, testStore.Conn() != nil) } func Benchmark_Neo4jStore_Set(b *testing.B) { - testStore := newTestStore(b) - defer testStore.Close() - b.ReportAllocs() b.ResetTimer() @@ -219,9 +207,6 @@ func Benchmark_Neo4jStore_Set(b *testing.B) { } func Benchmark_Neo4jStore_Get(b *testing.B) { - testStore := newTestStore(b) - defer testStore.Close() - err := testStore.Set("john", []byte("doe"), 0) require.NoError(b, err) @@ -236,9 +221,6 @@ func Benchmark_Neo4jStore_Get(b *testing.B) { } func Benchmark_Neo4jStore_SetAndDelete(b *testing.B) { - testStore := newTestStore(b) - defer testStore.Close() - b.ReportAllocs() b.ResetTimer() From 698ae8a3905b6884df7367e45a89c093eea0971d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20de=20la=20Pe=C3=B1a?= Date: Tue, 15 Apr 2025 20:16:04 +0200 Subject: [PATCH 16/18] fix: do not create two mysql containers --- mysql/mysql_test.go | 6 ------ 1 file changed, 6 deletions(-) diff --git a/mysql/mysql_test.go b/mysql/mysql_test.go index 69a0d74e..6160242c 100644 --- a/mysql/mysql_test.go +++ b/mysql/mysql_test.go @@ -62,12 +62,6 @@ func mustStartMySQL(t testing.TB) *mysql.MySQLContainer { } func Test_MYSQL_New(t *testing.T) { - testStore := newTestStore(t) - defer testStore.Close() - - require.True(t, testStore.db != nil) - require.NoError(t, testStore.Close()) - c := mustStartMySQL(t) dsn, err := c.ConnectionString(context.Background()) From 7c756780901138eca89f30aa444fb73b0e0c3ef9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20de=20la=20Pe=C3=B1a?= Date: Wed, 16 Apr 2025 00:53:35 +0200 Subject: [PATCH 17/18] fix(minio): disable reset on tests The S3 module does exactly the same initialisation for the config --- minio/minio_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/minio/minio_test.go b/minio/minio_test.go index 9f27fc90..10bbac3e 100644 --- a/minio/minio_test.go +++ b/minio/minio_test.go @@ -56,7 +56,6 @@ func newTestStore(t testing.TB) *Storage { AccessKeyID: c.Username, SecretAccessKey: c.Password, }, - Reset: true, }, ) } From 73bf79313b3bff8f162791c4ad681ef6760d21ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20de=20la=20Pe=C3=B1a?= Date: Wed, 16 Apr 2025 00:56:58 +0200 Subject: [PATCH 18/18] fix(minio): capture the errors when minio deletes a bucket --- minio/minio.go | 5 +++-- minio/minio_test.go | 12 ++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/minio/minio.go b/minio/minio.go index 7893005c..4649020a 100644 --- a/minio/minio.go +++ b/minio/minio.go @@ -146,11 +146,12 @@ func (s *Storage) Reset() error { GovernanceBypass: true, } + var errs []error for err := range s.minio.RemoveObjects(s.ctx, s.cfg.Bucket, objectsCh, opts) { - log.Println("Error detected during deletion: ", err) + errs = append(errs, err.Err) } - return nil + return errors.Join(errs...) } // Close the storage diff --git a/minio/minio_test.go b/minio/minio_test.go index 10bbac3e..2aeb7d81 100644 --- a/minio/minio_test.go +++ b/minio/minio_test.go @@ -237,6 +237,18 @@ func Test_Reset(t *testing.T) { require.Zero(t, len(result)) } +func Test_Reset_Not_Exists_Bucket(t *testing.T) { + testStore := newTestStore(t) + defer testStore.Close() + + err := testStore.RemoveBucket() + require.NoError(t, err) + + err = testStore.Reset() + require.Error(t, err) + require.EqualError(t, err, "The specified bucket does not exist") +} + func Test_Close(t *testing.T) { testStore := newTestStore(t) require.NoError(t, testStore.Close())