batch_image_worker_runtime_redis_test.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. //go:build unit
  2. package service_test
  3. import (
  4. "context"
  5. "strings"
  6. "testing"
  7. "time"
  8. "github.com/Wei-Shaw/sub2api/internal/config"
  9. "github.com/Wei-Shaw/sub2api/internal/repository"
  10. "github.com/Wei-Shaw/sub2api/internal/service"
  11. "github.com/alicebob/miniredis/v2"
  12. "github.com/redis/go-redis/v9"
  13. "github.com/stretchr/testify/require"
  14. )
  15. func TestBatchImageWorkerRuntime_StartupDoesNotCreateRedisBatchImageKeys(t *testing.T) {
  16. mr := miniredis.RunT(t)
  17. rdb := redis.NewClient(&redis.Options{Addr: mr.Addr()})
  18. t.Cleanup(func() {
  19. _ = rdb.Close()
  20. })
  21. cfg := &config.Config{BatchImage: config.BatchImageConfig{
  22. QueueEnabled: true,
  23. QueueReadyKey: "batch_image:queue:ready",
  24. QueueDelayedKey: "batch_image:queue:delayed",
  25. QueueActiveKey: "batch_image:queue:active",
  26. InflightKeyPrefix: "batch_image:queue:inflight:",
  27. LockKeyPrefix: "batch_image:queue:lock:",
  28. InflightTTLSeconds: 60,
  29. JobLockTTLSeconds: 60,
  30. DelayedMoverIntervalSeconds: 60,
  31. RecoveryIntervalSeconds: 60,
  32. StaleActiveAfterSeconds: 60,
  33. DelayedMoveLimit: 10,
  34. RecoverLimit: 10,
  35. }}
  36. queue := repository.NewBatchImageQueue(rdb, cfg)
  37. worker := service.NewBatchImageWorker(queue, noopBatchImageProcessor{}, service.NewBatchImageWorkerOptionsFromConfig(cfg))
  38. runtime := service.NewBatchImageWorkerRuntime(worker, cfg)
  39. runtime.Start()
  40. require.Eventually(t, runtime.Running, time.Second, 10*time.Millisecond)
  41. runtime.Stop()
  42. for _, key := range mr.Keys() {
  43. require.False(t, strings.HasPrefix(key, "batch_image:"), "unexpected Redis key created at startup: %s", key)
  44. }
  45. }
  46. type noopBatchImageProcessor struct{}
  47. func (noopBatchImageProcessor) Process(context.Context, string) (service.BatchImageProcessResult, error) {
  48. return service.BatchImageProcessResult{}, nil
  49. }