user_msg_queue_service_test.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. //go:build unit
  2. package service
  3. import (
  4. "context"
  5. "sync/atomic"
  6. "testing"
  7. "time"
  8. "github.com/stretchr/testify/require"
  9. )
  10. type cleanupWorkerUserMsgQueueCache struct {
  11. reconcileCalls atomic.Int64
  12. maxCount atomic.Int64
  13. }
  14. var _ UserMsgQueueCache = (*cleanupWorkerUserMsgQueueCache)(nil)
  15. func (c *cleanupWorkerUserMsgQueueCache) AcquireLock(context.Context, int64, string, int) (bool, error) {
  16. return true, nil
  17. }
  18. func (c *cleanupWorkerUserMsgQueueCache) ReleaseLock(context.Context, int64, string) (bool, error) {
  19. return true, nil
  20. }
  21. func (c *cleanupWorkerUserMsgQueueCache) GetLastCompletedMs(context.Context, int64) (int64, error) {
  22. return 0, nil
  23. }
  24. func (c *cleanupWorkerUserMsgQueueCache) GetCurrentTimeMs(context.Context) (int64, error) {
  25. return time.Now().UnixMilli(), nil
  26. }
  27. func (c *cleanupWorkerUserMsgQueueCache) ReconcileExpiredLockCandidates(_ context.Context, maxCount int) (int, error) {
  28. c.reconcileCalls.Add(1)
  29. c.maxCount.Store(int64(maxCount))
  30. return 1, nil
  31. }
  32. func TestStartCleanupWorker_ReconcilesExpiredLockCandidates(t *testing.T) {
  33. cache := &cleanupWorkerUserMsgQueueCache{}
  34. svc := NewUserMessageQueueService(cache, nil, nil)
  35. defer svc.Stop()
  36. svc.StartCleanupWorker(time.Millisecond)
  37. require.Eventually(t, func() bool {
  38. return cache.reconcileCalls.Load() > 0
  39. }, time.Second, 10*time.Millisecond)
  40. require.EqualValues(t, 1000, cache.maxCount.Load())
  41. }