|
- package lock
-
- import (
- "github.com/stretchr/testify/assert"
- "github.com/dk-lockdown/seata-golang/common"
- "github.com/dk-lockdown/seata-golang/logging"
- "github.com/dk-lockdown/seata-golang/meta"
- "github.com/dk-lockdown/seata-golang/tc/session"
- "github.com/dk-lockdown/seata-golang/util"
- "sync"
- "testing"
- )
-
- func TestLockManager_AcquireLock(t *testing.T) {
- bs := branchSessionProvider()
- ok,err := GetLockManager().AcquireLock(bs)
- assert.Equal(t,ok,true)
- assert.Equal(t,err,nil)
- }
-
- func TestLockManager_IsLockable(t *testing.T) {
- transId := util.GeneratorUUID()
- ok := GetLockManager().IsLockable(common.XID.GenerateXID(transId),"tb_1","tb_1:13")
- assert.Equal(t,ok,true)
- }
-
- func TestLockManager_AcquireLock_Fail(t *testing.T) {
- sessions := branchSessionsProvider()
- result1,err1 := GetLockManager().AcquireLock(sessions[0])
- result2,err2 := GetLockManager().AcquireLock(sessions[1])
- assert.True(t,result1)
- assert.Equal(t,err1,nil)
- assert.False(t,result2)
- assert.Equal(t,err2,nil)
- }
-
- func TestLockManager_AcquireLock_DeadLock(t *testing.T) {
- sessions := deadlockBranchSessionsProvider()
- defer func() {
- GetLockManager().ReleaseLock(sessions[0])
- GetLockManager().ReleaseLock(sessions[1])
- }()
-
- wg := sync.WaitGroup{}
- wg.Add(2)
- go func(session *session.BranchSession) {
- defer wg.Done()
- result, err := GetLockManager().AcquireLock(session)
- logging.Logger.Infof("1: %v %v",result,err)
- }(sessions[0])
-
- go func(session *session.BranchSession) {
- defer wg.Done()
- result, err := GetLockManager().AcquireLock(session)
- logging.Logger.Infof("2: %v %v",result,err)
- }(sessions[1])
- wg.Wait()
- assert.True(t,true)
- }
-
- func TestLockManager_IsLockable2(t *testing.T) {
- bs := branchSessionProvider()
- bs.SetLockKey("t:4")
- result1 := GetLockManager().IsLockable(bs.Xid,bs.ResourceId,bs.LockKey)
- assert.True(t,result1)
- GetLockManager().AcquireLock(bs)
- bs.SetTransactionId(util.GeneratorUUID())
- result2 := GetLockManager().IsLockable(bs.Xid,bs.ResourceId,bs.LockKey)
- assert.False(t,result2)
- }
-
- func TestLockManager_AcquireLock_SessionHolder(t *testing.T) {
- sessions := duplicatePkBranchSessionsProvider()
- result1, _ := GetLockManager().AcquireLock(sessions[0])
- assert.True(t,result1)
- assert.Equal(t,int64(4),GetLockManager().GetLockKeyCount())
- result2, _ := GetLockManager().ReleaseLock(sessions[0])
- assert.True(t,result2)
- assert.Equal(t,int64(0),GetLockManager().GetLockKeyCount())
-
- result3, _ := GetLockManager().AcquireLock(sessions[1])
- assert.True(t,result3)
- assert.Equal(t,int64(4),GetLockManager().GetLockKeyCount())
- result4, _ := GetLockManager().ReleaseLock(sessions[1])
- assert.True(t,result4)
- assert.Equal(t,int64(0),GetLockManager().GetLockKeyCount())
- }
-
- func deadlockBranchSessionsProvider() []*session.BranchSession {
- return baseBranchSessionsProvider("tb_2", "t:1,2,3,4,5", "t:5,4,3,2,1")
- }
-
- func duplicatePkBranchSessionsProvider() []*session.BranchSession {
- return baseBranchSessionsProvider("tb_2", "t:1,2;t1:1;t2:2", "t:1,2;t1:1;t2:2")
- }
-
- func branchSessionsProvider() []*session.BranchSession {
- return baseBranchSessionsProvider("tb_1", "t:1,2", "t:1,2")
- }
-
- func baseBranchSessionsProvider(resourceId string, lockKey1 string, lockKey2 string) []*session.BranchSession {
- var branchSessions = make([]*session.BranchSession,0)
- transId := util.GeneratorUUID()
- transId2 := util.GeneratorUUID()
- bs := session.NewBranchSession().
- SetXid(common.XID.GenerateXID(transId)).
- SetTransactionId(transId).
- SetBranchId(1).
- SetResourceGroupId("my_test_tx_group").
- SetResourceId(resourceId).
- SetLockKey(lockKey1).
- SetBranchType(meta.BranchTypeAT).
- SetStatus(meta.BranchStatusUnknown).
- SetClientId("c1").
- SetApplicationData([]byte("{\"data\":\"test\"}"))
-
- bs1 := session.NewBranchSession().
- SetXid(common.XID.GenerateXID(transId2)).
- SetTransactionId(transId2).
- SetBranchId(1).
- SetResourceGroupId("my_test_tx_group").
- SetResourceId(resourceId).
- SetLockKey(lockKey2).
- SetBranchType(meta.BranchTypeAT).
- SetStatus(meta.BranchStatusUnknown).
- SetClientId("c1").
- SetApplicationData([]byte("{\"data\":\"test\"}"))
-
- branchSessions = append(branchSessions,bs)
- branchSessions = append(branchSessions,bs1)
- return branchSessions
- }
-
- func branchSessionProvider() *session.BranchSession {
- common.XID.IpAddress="127.0.0.1"
- common.XID.Port=9876
-
- transId := util.GeneratorUUID()
- bs := session.NewBranchSession().
- SetXid(common.XID.GenerateXID(transId)).
- SetTransactionId(transId).
- SetBranchId(1).
- SetResourceGroupId("my_test_tx_group").
- SetResourceId("tb_1").
- SetLockKey("tb_1:13").
- SetBranchType(meta.BranchTypeAT).
- SetStatus(meta.BranchStatusUnknown).
- SetClientId("c1").
- SetApplicationData([]byte("{\"data\":\"test\"}"))
-
- return bs
- }
|