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  }