redislock_test.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package redis
  2. import (
  3. "context"
  4. "testing"
  5. "github.com/stretchr/testify/assert"
  6. "github.com/wuntsong-org/go-zero-plus/core/stringx"
  7. )
  8. func TestRedisLock(t *testing.T) {
  9. testFn := func(ctx context.Context) func(client *Redis) {
  10. return func(client *Redis) {
  11. key := stringx.Rand()
  12. firstLock := NewRedisLock(client, key)
  13. firstLock.SetExpire(5)
  14. firstAcquire, err := firstLock.Acquire()
  15. assert.Nil(t, err)
  16. assert.True(t, firstAcquire)
  17. secondLock := NewRedisLock(client, key)
  18. secondLock.SetExpire(5)
  19. againAcquire, err := secondLock.Acquire()
  20. assert.Nil(t, err)
  21. assert.False(t, againAcquire)
  22. release, err := firstLock.Release()
  23. assert.Nil(t, err)
  24. assert.True(t, release)
  25. endAcquire, err := secondLock.Acquire()
  26. assert.Nil(t, err)
  27. assert.True(t, endAcquire)
  28. }
  29. }
  30. t.Run("normal", func(t *testing.T) {
  31. runOnRedis(t, testFn(nil))
  32. })
  33. t.Run("withContext", func(t *testing.T) {
  34. runOnRedis(t, testFn(context.Background()))
  35. })
  36. }
  37. func TestRedisLock_Expired(t *testing.T) {
  38. runOnRedis(t, func(client *Redis) {
  39. key := stringx.Rand()
  40. redisLock := NewRedisLock(client, key)
  41. ctx, cancel := context.WithCancel(context.Background())
  42. cancel()
  43. _, err := redisLock.AcquireCtx(ctx)
  44. assert.NotNil(t, err)
  45. })
  46. runOnRedis(t, func(client *Redis) {
  47. key := stringx.Rand()
  48. redisLock := NewRedisLock(client, key)
  49. ctx, cancel := context.WithCancel(context.Background())
  50. cancel()
  51. _, err := redisLock.ReleaseCtx(ctx)
  52. assert.NotNil(t, err)
  53. })
  54. }