xorm/tests/retry_test.go

73 lines
1.6 KiB
Go
Raw Normal View History

2023-09-23 15:09:24 +00:00
package tests
import (
"context"
"testing"
"time"
"github.com/stretchr/testify/assert"
"xorm.io/xorm"
"xorm.io/xorm/retry"
)
func TestRetry(t *testing.T) {
assert.NoError(t, PrepareEngine())
type TestRetry struct {
Id int64 `xorm:"int(11) pk"`
Name string `xorm:"varchar(255)"`
}
assert.NoError(t, testEngine.Sync(new(TestRetry)))
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
err := testEngine.Do(ctx, func(ctx context.Context, session *xorm.Session) error {
num, err := insertMultiDatas(1,
append([]TestRetry{}, TestRetry{1, "test1"}, TestRetry{2, "test2"}, TestRetry{3, "test3"}))
if err != nil {
return err
}
assert.EqualValues(t, 3, num)
return nil
}, retry.WithID("test-retry"))
assert.NoError(t, err)
}
func TestRetryTx(t *testing.T) {
assert.NoError(t, PrepareEngine())
assertSync(t, new(Userinfo))
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
err := testEngine.DoTx(
ctx,
func(ctx context.Context, session *xorm.Session) error {
user1 := Userinfo{Username: "xiaoxiao2", Departname: "dev", Alias: "lunny", Created: time.Now()}
if _, err := session.Insert(&user1); err != nil {
return err
}
user2 := Userinfo{Username: "zzz"}
if _, err := session.Where("`id` = ?", 0).Update(&user2); err != nil {
return err
}
if _, err := session.Exec("delete from "+testEngine.Quote(testEngine.TableName("userinfo", true))+" where `username` = ?", user2.Username); err != nil {
return err
}
return nil
},
retry.WithID("test-retry-tx"),
retry.WithMaxRetries(5),
)
assert.NoError(t, err)
}