47 lines
895 B
Go
47 lines
895 B
Go
|
|
package distributed_lock
|
||
|
|
|
||
|
|
import (
|
||
|
|
"testing"
|
||
|
|
"time"
|
||
|
|
|
||
|
|
"github.com/go-redis/redis"
|
||
|
|
"go.uber.org/zap"
|
||
|
|
)
|
||
|
|
|
||
|
|
var log *zap.Logger
|
||
|
|
|
||
|
|
func init() {
|
||
|
|
log = zap.Must(zap.NewDevelopment())
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestRWLockReentrantLock(t *testing.T) {
|
||
|
|
rdb := redis.NewClient(&redis.Options{
|
||
|
|
Network: "tcp",
|
||
|
|
Addr: "192.168.2.103:6379",
|
||
|
|
Password: "cnstar",
|
||
|
|
PoolSize: 50,
|
||
|
|
DialTimeout: 10 * time.Second,
|
||
|
|
})
|
||
|
|
|
||
|
|
rwLocker := GetRWLocker(rdb, &RedissionLockConfig{
|
||
|
|
LockLeaseTime: 120,
|
||
|
|
Key: "component",
|
||
|
|
})
|
||
|
|
|
||
|
|
rwLocker.logger = log
|
||
|
|
t.Logf("%+v\n", rwLocker)
|
||
|
|
|
||
|
|
duration := 10 * time.Second
|
||
|
|
// 第一次加读锁
|
||
|
|
err := rwLocker.RLock(duration)
|
||
|
|
t.Logf("err:%+v\n", err)
|
||
|
|
// TODO 实现可重入读锁测试
|
||
|
|
// rwLocker.UnRLock()
|
||
|
|
// // 第二次加读锁
|
||
|
|
// rwLocker.RLock(duration)
|
||
|
|
// // 查看 redis 中相关 key 的值
|
||
|
|
// rwLocker.UnRLock()
|
||
|
|
t.Log("test success")
|
||
|
|
select {}
|
||
|
|
}
|