github.com/shuguocloud/go-zero@v1.3.0/core/stores/redis/redislock_test.go (about) 1 package redis 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 "github.com/shuguocloud/go-zero/core/stringx" 8 ) 9 10 func TestRedisLock(t *testing.T) { 11 runOnRedis(t, func(client *Redis) { 12 key := stringx.Rand() 13 firstLock := NewRedisLock(client, key) 14 firstLock.SetExpire(5) 15 firstAcquire, err := firstLock.Acquire() 16 assert.Nil(t, err) 17 assert.True(t, firstAcquire) 18 19 secondLock := NewRedisLock(client, key) 20 secondLock.SetExpire(5) 21 againAcquire, err := secondLock.Acquire() 22 assert.Nil(t, err) 23 assert.False(t, againAcquire) 24 25 release, err := firstLock.Release() 26 assert.Nil(t, err) 27 assert.True(t, release) 28 29 endAcquire, err := secondLock.Acquire() 30 assert.Nil(t, err) 31 assert.True(t, endAcquire) 32 33 endAcquire, err = secondLock.Acquire() 34 assert.Nil(t, err) 35 assert.True(t, endAcquire) 36 37 release, err = secondLock.Release() 38 assert.Nil(t, err) 39 assert.True(t, release) 40 41 againAcquire, err = firstLock.Acquire() 42 assert.Nil(t, err) 43 assert.False(t, againAcquire) 44 45 release, err = secondLock.Release() 46 assert.Nil(t, err) 47 assert.True(t, release) 48 49 firstAcquire, err = firstLock.Acquire() 50 assert.Nil(t, err) 51 assert.True(t, firstAcquire) 52 }) 53 }