package redis import ( "testing" "github.com/stretchr/testify/assert" "github.com/tal-tech/go-zero/core/stringx" ) func TestRedisLock(t *testing.T) { runOnRedis(t, func(client *Redis) { key := stringx.Rand() firstLock := NewRedisLock(client, key) firstLock.SetExpire(5) firstAcquire, err := firstLock.Acquire() assert.Nil(t, err) assert.True(t, firstAcquire) secondLock := NewRedisLock(client, key) secondLock.SetExpire(5) againAcquire, err := secondLock.Acquire() assert.Nil(t, err) assert.False(t, againAcquire) release, err := firstLock.Release() assert.Nil(t, err) assert.True(t, release) endAcquire, err := secondLock.Acquire() assert.Nil(t, err) assert.True(t, endAcquire) endAcquire, err = secondLock.Acquire() assert.Nil(t, err) assert.True(t, endAcquire) release, err = secondLock.Release() assert.Nil(t, err) assert.True(t, release) againAcquire, err = firstLock.Acquire() assert.Nil(t, err) assert.False(t, againAcquire) release, err = secondLock.Release() assert.Nil(t, err) assert.True(t, release) firstAcquire, err = firstLock.Acquire() assert.Nil(t, err) assert.True(t, firstAcquire) }) }