From 33562018fec2053d30ebe5e9fa5f313223d18c3c Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Thu, 26 Nov 2020 10:48:32 -0500 Subject: [PATCH] database.WithTx: rollback if func returns error Previously, this only rolled back if the called function panicked. This updates it to also roll back if the called function returns an error. --- database/middleware.go | 6 +++++- webhooks/legacy_test.go | 3 ++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/database/middleware.go b/database/middleware.go index 1e7ebf64cfe68469ec4fa8a82f45e84aa63bbf70..c5f164fbb4199b6f2e00ab8f797bac0b15ae0688 100644 --- a/database/middleware.go +++ b/database/middleware.go @@ -60,5 +60,9 @@ func WithTx(ctx context.Context, opts *sql.TxOptions, fn func(tx *sql.Tx) error) } tx.Commit() }() - return fn(tx) + err = fn(tx) + if err != nil { + tx.Rollback() + } + return err } diff --git a/webhooks/legacy_test.go b/webhooks/legacy_test.go index 2f13c4db26324142e76b3cfeff49826c3291ea33..2e2f078b37547774c76f42a440065fb6b8b50150 100644 --- a/webhooks/legacy_test.go +++ b/webhooks/legacy_test.go @@ -131,7 +131,8 @@ func TestDelivery(t *testing.T) { "X-Webhook-Event", "X-Webhook-Delivery", ), // Final request headers - 4096) + 4096). + WillReturnResult(sqlmock.NewResult(1, 1)) mock.ExpectCommit() ctx = database.Context(context.Background(), db)