add redis lock test of rwlocker

This commit is contained in:
douxu 2025-03-28 16:48:56 +08:00
parent 1cf6137f9f
commit 182f8ac634
1 changed files with 102 additions and 0 deletions

View File

@ -385,3 +385,105 @@ func TestRWLockReentrantWLock(t *testing.T) {
t.Log("rwLock reentrant lock test success")
return
}
// TODO 设计两个客户端分别加读锁与写锁
func TestRWLock2CWithRLockAndWLock(t *testing.T) {
ctx := context.TODO()
rdb := redis.NewClient(&redis.Options{
Network: "tcp",
Addr: "192.168.2.104:6379",
Password: "cnstar",
PoolSize: 50,
DialTimeout: 10 * time.Second,
})
rwLocker1 := GetRWLocker(rdb, &RedissionLockConfig{
LockLeaseTime: 120,
NeedRefresh: true,
Key: "component",
Token: "fd348a84-e07c-4a61-8c19-f753e6bc556a",
})
rwLocker1.logger = log
rwLocker2 := GetRWLocker(rdb, &RedissionLockConfig{
LockLeaseTime: 30,
NeedRefresh: true,
Key: "component",
Token: "fd348a84-e07c-4a61-8c19-f753e6bc5577",
})
rwLocker2.logger = log
duration := 10 * time.Second
// locker1加读锁
err := rwLocker1.RLock(ctx, duration)
assert.Equal(t, nil, err)
tokenKey1 := strings.Join([]string{rwLocker1.rwTokenTimeoutPrefix, rwLocker1.token}, ":")
num, err := rdb.HGet(ctx, rwLocker1.key, tokenKey1).Int()
assert.Equal(t, nil, err)
assert.Equal(t, 1, num)
// locker2加写锁锁
duration = 2 * time.Second
err = rwLocker2.WLock(ctx, duration)
// 预测加写锁失败
assert.Equal(t, nil, err)
// locker1解写锁
err = rwLocker1.UnRLock(ctx)
assert.Equal(t, nil, err)
t.Log("rwLock 2 client lock test success")
return
}
// TODO 设计两个客户端分别加读锁与写锁
func TestRWLock2CWithWLockAndRLock(t *testing.T) {
ctx := context.TODO()
rdb := redis.NewClient(&redis.Options{
Network: "tcp",
Addr: "192.168.2.104:6379",
Password: "cnstar",
PoolSize: 50,
DialTimeout: 10 * time.Second,
})
rwLocker1 := GetRWLocker(rdb, &RedissionLockConfig{
LockLeaseTime: 120,
NeedRefresh: true,
Key: "component",
Token: "fd348a84-e07c-4a61-8c19-f753e6bc556a",
})
rwLocker1.logger = log
rwLocker2 := GetRWLocker(rdb, &RedissionLockConfig{
LockLeaseTime: 30,
NeedRefresh: true,
Key: "component",
Token: "fd348a84-e07c-4a61-8c19-f753e6bc5577",
})
rwLocker2.logger = log
duration := 10 * time.Second
// locker1加读锁
err := rwLocker1.WLock(ctx, duration)
assert.Equal(t, nil, err)
tokenKey1 := strings.Join([]string{rwLocker1.rwTokenTimeoutPrefix, rwLocker1.token}, ":")
num, err := rdb.HGet(ctx, rwLocker1.key, tokenKey1).Int()
assert.Equal(t, nil, err)
assert.Equal(t, 1, num)
// locker2加读锁
duration = 2 * time.Second
err = rwLocker2.RLock(ctx, duration)
// TODO 预测加读锁失败
assert.Equal(t, nil, err)
// locker1解写锁
err = rwLocker1.UnWLock(ctx)
assert.Equal(t, nil, err)
t.Log("rwLock 2 client lock test success")
return
}