73 lines
1.6 KiB
Go
73 lines
1.6 KiB
Go
|
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)
|
||
|
}
|