From ab9eb72a92b26e6e68b2539f28a961486c8fad58 Mon Sep 17 00:00:00 2001 From: machernyavskiy Date: Mon, 18 Mar 2024 21:12:00 +0300 Subject: [PATCH] [#132] cancel `ctx` integration tests --- test/integration/internal/gorm/gorm_test.go | 23 +++++++++++++++++++ test/integration/internal/gorm/helper_test.go | 5 +++- .../internal/gorm/repository_test.go | 4 ++-- test/integration/internal/pgx/helper_test.go | 8 +++++++ test/integration/internal/pgx/pgx_test.go | 23 +++++++++++++++++++ test/integration/internal/sqlx/sqlx_test.go | 22 ++++++++++++++++++ .../internal/stdlib/stdlib_test.go | 2 +- 7 files changed, 83 insertions(+), 4 deletions(-) diff --git a/test/integration/internal/gorm/gorm_test.go b/test/integration/internal/gorm/gorm_test.go index c6607db..0b885d7 100644 --- a/test/integration/internal/gorm/gorm_test.go +++ b/test/integration/internal/gorm/gorm_test.go @@ -66,6 +66,29 @@ func Test_UseCase_CreateTextRecords(t *testing.T) { } + err = ClearDB(db) + assert.NoError(t, err) + }) + t.Run("ctx_canceled_error_and_rollback", func(t *testing.T) { + var ( + ctx, cancel = context.WithCancel(context.Background()) + transactor = ogorm.NewTransactor(db) + repositoryA = NewTextRepository(transactor, false) + repositoryB = NewTextRepository(transactor, false) + useCase = NewUseCase(repositoryA, repositoryB, transactor) + ) + + cancel() + err := useCase.CreateTextRecords(ctx, textRecord) + assert.Error(t, err) + assert.ErrorIs(t, err, context.Canceled) + + { + records, err := GetTextRecords(db) + assert.NoError(t, err) + assert.Len(t, records, 0) + } + err = ClearDB(db) assert.NoError(t, err) }) diff --git a/test/integration/internal/gorm/helper_test.go b/test/integration/internal/gorm/helper_test.go index 29ff612..6a7e14b 100644 --- a/test/integration/internal/gorm/helper_test.go +++ b/test/integration/internal/gorm/helper_test.go @@ -2,6 +2,7 @@ package gorm import ( "fmt" + "gorm.io/gorm/logger" "testing" "github.com/stretchr/testify/assert" @@ -12,7 +13,9 @@ import ( ) func ConnectDB(t *testing.T) *gorm.DB { - db, err := gorm.Open(postgres.Open(entity.ConnectionString), &gorm.Config{}) + db, err := gorm.Open(postgres.Open(entity.ConnectionString), &gorm.Config{ + Logger: logger.Default.LogMode(logger.Silent), + }) assert.NoError(t, err) return db } diff --git a/test/integration/internal/gorm/repository_test.go b/test/integration/internal/gorm/repository_test.go index d81d426..0047eaa 100644 --- a/test/integration/internal/gorm/repository_test.go +++ b/test/integration/internal/gorm/repository_test.go @@ -40,7 +40,7 @@ func (r *TextRepository) RawInsert(ctx context.Context, val string) error { return entity.ErrExpected } ex := r.transactor.GetExecutor(ctx) - ex = ex.Exec(`INSERT INTO gorm (val) VALUES ($1)`, val) + ex = ex.WithContext(ctx).Exec(`INSERT INTO gorm (val) VALUES ($1)`, val) if ex.Error != nil { return fmt.Errorf("gorm repository - raw insert: %w", ex.Error) } @@ -52,7 +52,7 @@ func (r *TextRepository) Insert(ctx context.Context, text Text) error { return entity.ErrExpected } ex := r.transactor.GetExecutor(ctx) - ex = ex.Create(text) + ex = ex.WithContext(ctx).Create(text) if ex.Error != nil { return fmt.Errorf("gorm repository - raw insert: %w", ex.Error) } diff --git a/test/integration/internal/pgx/helper_test.go b/test/integration/internal/pgx/helper_test.go index c6768b0..d5636c2 100644 --- a/test/integration/internal/pgx/helper_test.go +++ b/test/integration/internal/pgx/helper_test.go @@ -29,6 +29,14 @@ func ClearDB(ctx context.Context, db *pgx.Conn) error { } func GetTextRecords(ctx context.Context, db *pgx.Conn) ([]string, error) { + if db.IsClosed() { + conn, err := pgx.Connect(ctx, entity.ConnectionString) + if err != nil { + return nil, fmt.Errorf("new cannection: %w", err) + } + *db = *conn + } + row, err := db.Query(ctx, "SELECT val FROM pgx;") if err != nil { return nil, fmt.Errorf("get `text` records: %w", err) diff --git a/test/integration/internal/pgx/pgx_test.go b/test/integration/internal/pgx/pgx_test.go index c472abd..8616d79 100644 --- a/test/integration/internal/pgx/pgx_test.go +++ b/test/integration/internal/pgx/pgx_test.go @@ -71,6 +71,29 @@ func Test_UseCase_CreateTextRecords(t *testing.T) { } + err = ClearDB(globalCtx, db) + assert.NoError(t, err) + }) + t.Run("ctx_canceled_error_and_rollback", func(t *testing.T) { + var ( + ctx, cancel = context.WithCancel(context.Background()) + transactor = opgx.NewTransactor(db) + repositoryA = NewTextRepository(transactor, false) + repositoryB = NewTextRepository(transactor, false) + useCase = NewUseCase(repositoryA, repositoryB, transactor) + ) + + cancel() + err := useCase.CreateTextRecords(ctx, textRecord) + assert.Error(t, err) + assert.ErrorIs(t, err, context.Canceled) + + { + records, err := GetTextRecords(globalCtx, db) + assert.NoError(t, err) + assert.Len(t, records, 0) + } + err = ClearDB(globalCtx, db) assert.NoError(t, err) }) diff --git a/test/integration/internal/sqlx/sqlx_test.go b/test/integration/internal/sqlx/sqlx_test.go index 902deaf..5d1ddcc 100644 --- a/test/integration/internal/sqlx/sqlx_test.go +++ b/test/integration/internal/sqlx/sqlx_test.go @@ -71,6 +71,28 @@ func Test_UseCase_CreateTextRecords(t *testing.T) { } + err = ClearDB(globalCtx, db) + assert.NoError(t, err) + }) + t.Run("ctx_canceled_error_and_rollback", func(t *testing.T) { + var ( + ctx, cancel = context.WithCancel(context.Background()) + transactor = osqlx.NewTransactor(db) + repositoryA = NewTextRepository(transactor, false) + repositoryB = NewTextRepository(transactor, false) + useCase = NewUseCase(repositoryA, repositoryB, transactor) + ) + cancel() + err := useCase.CreateTextRecords(ctx, textRecord) + assert.Error(t, err) + assert.ErrorIs(t, err, context.Canceled) + + { + records, err := GetTextRecords(globalCtx, db) + assert.NoError(t, err) + assert.Len(t, records, 0) + } + err = ClearDB(globalCtx, db) assert.NoError(t, err) }) diff --git a/test/integration/internal/stdlib/stdlib_test.go b/test/integration/internal/stdlib/stdlib_test.go index 690ee56..b065f84 100644 --- a/test/integration/internal/stdlib/stdlib_test.go +++ b/test/integration/internal/stdlib/stdlib_test.go @@ -77,7 +77,7 @@ func Test_UseCase(t *testing.T) { ctx, cancel = context.WithCancel(context.Background()) transactor = ostdlib.NewTransactor(db) repositoryA = NewTextRepository(transactor, false) - repositoryB = NewTextRepository(transactor, true) + repositoryB = NewTextRepository(transactor, false) useCase = NewUseCase(repositoryA, repositoryB, transactor) )