add new test of RWLock
This commit is contained in:
parent
7b282c49f7
commit
13809b6a31
|
|
@ -156,7 +156,136 @@ func TestRWLockRefreshRLock(t *testing.T) {
|
|||
}
|
||||
|
||||
// TODO 设计两个客户端分别加读锁,测试是否可以加锁成功
|
||||
func TestRWLock2ClientRLock(t *testing.T) {
|
||||
rdb := redis.NewClient(&redis.Options{
|
||||
Network: "tcp",
|
||||
Addr: "192.168.2.103: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: 120,
|
||||
NeedRefresh: true,
|
||||
Key: "component",
|
||||
Token: "fd348a84-e07c-4a61-8c19-f753e6bc5577",
|
||||
})
|
||||
rwLocker2.logger = log
|
||||
|
||||
duration := 10 * time.Second
|
||||
// locker1加读锁
|
||||
err := rwLocker1.RLock(duration)
|
||||
assert.Equal(t, nil, err)
|
||||
|
||||
tokenKey1 := strings.Join([]string{rwLocker1.rwTokenTimeoutPrefix, rwLocker1.token}, ":")
|
||||
num, err := rdb.HGet(rwLocker1.key, tokenKey1).Int()
|
||||
assert.Equal(t, nil, err)
|
||||
assert.Equal(t, 1, num)
|
||||
|
||||
// locker2加读锁
|
||||
err = rwLocker2.RLock(duration)
|
||||
assert.Equal(t, nil, err)
|
||||
|
||||
tokenKey2 := strings.Join([]string{rwLocker2.rwTokenTimeoutPrefix, rwLocker2.token}, ":")
|
||||
num, err = rdb.HGet(rwLocker2.key, tokenKey2).Int()
|
||||
assert.Equal(t, nil, err)
|
||||
assert.Equal(t, 1, num)
|
||||
|
||||
err = rdb.HLen(rwLocker1.key).Err()
|
||||
assert.Equal(t, nil, err)
|
||||
hLen := rdb.HLen(rwLocker1.key).Val()
|
||||
assert.Equal(t, 3, hLen)
|
||||
|
||||
// locker1解读锁
|
||||
err = rwLocker1.UnRLock()
|
||||
assert.Equal(t, nil, err)
|
||||
|
||||
// locker1解读锁
|
||||
err = rwLocker2.UnRLock()
|
||||
assert.Equal(t, nil, err)
|
||||
|
||||
err = rdb.Exists(rwLocker1.key).Err()
|
||||
assert.Equal(t, redis.Nil, err)
|
||||
existNum := rdb.Exists(rwLocker1.key).Val()
|
||||
assert.Equal(t, 0, existNum)
|
||||
t.Log("rwLock 2 client lock test success")
|
||||
return
|
||||
}
|
||||
|
||||
// TODO 设计两个客户端分别加时间不同的读锁,测试ttl时间在有一个key删除后是否可以变换成功
|
||||
func TestRWLock2CWith2DifTimeRLock(t *testing.T) {
|
||||
rdb := redis.NewClient(&redis.Options{
|
||||
Network: "tcp",
|
||||
Addr: "192.168.2.103: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(duration)
|
||||
assert.Equal(t, nil, err)
|
||||
|
||||
tokenKey1 := strings.Join([]string{rwLocker1.rwTokenTimeoutPrefix, rwLocker1.token}, ":")
|
||||
num, err := rdb.HGet(rwLocker1.key, tokenKey1).Int()
|
||||
assert.Equal(t, nil, err)
|
||||
assert.Equal(t, 1, num)
|
||||
|
||||
// locker2加读锁
|
||||
err = rwLocker2.RLock(duration)
|
||||
assert.Equal(t, nil, err)
|
||||
|
||||
tokenKey2 := strings.Join([]string{rwLocker2.rwTokenTimeoutPrefix, rwLocker2.token}, ":")
|
||||
num, err = rdb.HGet(rwLocker2.key, tokenKey2).Int()
|
||||
assert.Equal(t, nil, err)
|
||||
assert.Equal(t, 1, num)
|
||||
|
||||
err = rdb.HLen(rwLocker1.key).Err()
|
||||
assert.Equal(t, nil, err)
|
||||
hLen := rdb.HLen(rwLocker1.key).Val()
|
||||
assert.Equal(t, 3, hLen)
|
||||
|
||||
// locker1解读锁
|
||||
err = rwLocker1.UnRLock()
|
||||
assert.Equal(t, nil, err)
|
||||
|
||||
// locker1解读锁
|
||||
err = rwLocker2.UnRLock()
|
||||
assert.Equal(t, nil, err)
|
||||
|
||||
err = rdb.Exists(rwLocker1.key).Err()
|
||||
assert.Equal(t, redis.Nil, err)
|
||||
existNum := rdb.Exists(rwLocker1.key).Val()
|
||||
assert.Equal(t, 0, existNum)
|
||||
t.Log("rwLock 2 client lock test success")
|
||||
return
|
||||
}
|
||||
|
||||
func TestRWLockWLockAndUnWLock(t *testing.T) {
|
||||
rdb := redis.NewClient(&redis.Options{
|
||||
|
|
@ -195,7 +324,6 @@ func TestRWLockWLockAndUnWLock(t *testing.T) {
|
|||
return
|
||||
}
|
||||
|
||||
// TODO 完成写锁可重入测试
|
||||
func TestRWLockReentrantWLock(t *testing.T) {
|
||||
rdb := redis.NewClient(&redis.Options{
|
||||
Network: "tcp",
|
||||
|
|
|
|||
Loading…
Reference in New Issue