2022-11-12 23:18:50 +03:00
// Copyright 2022 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2022-11-12 23:18:50 +03:00
package db_test
import (
"context"
"testing"
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/unittest"
"github.com/stretchr/testify/assert"
2024-07-30 22:41:10 +03:00
"github.com/stretchr/testify/require"
2022-11-12 23:18:50 +03:00
)
func TestInTransaction ( t * testing . T ) {
2024-07-30 22:41:10 +03:00
require . NoError ( t , unittest . PrepareTestDatabase ( ) )
2022-11-12 23:18:50 +03:00
assert . False ( t , db . InTransaction ( db . DefaultContext ) )
2024-07-30 22:41:10 +03:00
require . NoError ( t , db . WithTx ( db . DefaultContext , func ( ctx context . Context ) error {
2022-11-12 23:18:50 +03:00
assert . True ( t , db . InTransaction ( ctx ) )
return nil
} ) )
ctx , committer , err := db . TxContext ( db . DefaultContext )
2024-07-30 22:41:10 +03:00
require . NoError ( t , err )
2022-11-12 23:18:50 +03:00
defer committer . Close ( )
assert . True ( t , db . InTransaction ( ctx ) )
2024-07-30 22:41:10 +03:00
require . NoError ( t , db . WithTx ( ctx , func ( ctx context . Context ) error {
2022-11-12 23:18:50 +03:00
assert . True ( t , db . InTransaction ( ctx ) )
return nil
} ) )
}
2023-01-08 04:34:58 +03:00
func TestTxContext ( t * testing . T ) {
2024-07-30 22:41:10 +03:00
require . NoError ( t , unittest . PrepareTestDatabase ( ) )
2023-01-08 04:34:58 +03:00
{ // create new transaction
ctx , committer , err := db . TxContext ( db . DefaultContext )
2024-07-30 22:41:10 +03:00
require . NoError ( t , err )
2023-01-08 04:34:58 +03:00
assert . True ( t , db . InTransaction ( ctx ) )
2024-07-30 22:41:10 +03:00
require . NoError ( t , committer . Commit ( ) )
2023-01-08 04:34:58 +03:00
}
{ // reuse the transaction created by TxContext and commit it
ctx , committer , err := db . TxContext ( db . DefaultContext )
engine := db . GetEngine ( ctx )
2024-07-30 22:41:10 +03:00
require . NoError ( t , err )
2023-01-08 04:34:58 +03:00
assert . True ( t , db . InTransaction ( ctx ) )
{
ctx , committer , err := db . TxContext ( ctx )
2024-07-30 22:41:10 +03:00
require . NoError ( t , err )
2023-01-08 04:34:58 +03:00
assert . True ( t , db . InTransaction ( ctx ) )
assert . Equal ( t , engine , db . GetEngine ( ctx ) )
2024-07-30 22:41:10 +03:00
require . NoError ( t , committer . Commit ( ) )
2023-01-08 04:34:58 +03:00
}
2024-07-30 22:41:10 +03:00
require . NoError ( t , committer . Commit ( ) )
2023-01-08 04:34:58 +03:00
}
{ // reuse the transaction created by TxContext and close it
ctx , committer , err := db . TxContext ( db . DefaultContext )
engine := db . GetEngine ( ctx )
2024-07-30 22:41:10 +03:00
require . NoError ( t , err )
2023-01-08 04:34:58 +03:00
assert . True ( t , db . InTransaction ( ctx ) )
{
ctx , committer , err := db . TxContext ( ctx )
2024-07-30 22:41:10 +03:00
require . NoError ( t , err )
2023-01-08 04:34:58 +03:00
assert . True ( t , db . InTransaction ( ctx ) )
assert . Equal ( t , engine , db . GetEngine ( ctx ) )
2024-07-30 22:41:10 +03:00
require . NoError ( t , committer . Close ( ) )
2023-01-08 04:34:58 +03:00
}
2024-07-30 22:41:10 +03:00
require . NoError ( t , committer . Close ( ) )
2023-01-08 04:34:58 +03:00
}
{ // reuse the transaction created by WithTx
2024-07-30 22:41:10 +03:00
require . NoError ( t , db . WithTx ( db . DefaultContext , func ( ctx context . Context ) error {
2023-01-08 04:34:58 +03:00
assert . True ( t , db . InTransaction ( ctx ) )
{
ctx , committer , err := db . TxContext ( ctx )
2024-07-30 22:41:10 +03:00
require . NoError ( t , err )
2023-01-08 04:34:58 +03:00
assert . True ( t , db . InTransaction ( ctx ) )
2024-07-30 22:41:10 +03:00
require . NoError ( t , committer . Commit ( ) )
2023-01-08 04:34:58 +03:00
}
return nil
} ) )
}
}