redislock_test.go 1.2 KB

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