MCPcopy
hub / github.com/unkeyed/unkey / TestRedisCounterDecrement

Function TestRedisCounterDecrement

pkg/counter/redis_test.go:450–537  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

448}
449
450func TestRedisCounterDecrement(t *testing.T) {
451 ctx := context.Background()
452 redisURL := containers.Redis(t)
453
454 // Create a Redis counter
455 ctr, err := newTestRedis(t, redisURL)
456 require.NoError(t, err)
457 defer func() { require.NoError(t, ctr.Close()) }()
458
459 t.Run("BasicDecrement", func(t *testing.T) {
460 key := uid.New(uid.TestPrefix)
461
462 // Start with initial value
463 _, err := ctr.Increment(ctx, key, 10)
464 require.NoError(t, err)
465
466 // Decrement by 3 should return 7
467 val, err := ctr.Decrement(ctx, key, 3)
468 require.NoError(t, err)
469 require.Equal(t, int64(7), val)
470
471 // Decrement by 5 should return 2
472 val, err = ctr.Decrement(ctx, key, 5)
473 require.NoError(t, err)
474 require.Equal(t, int64(2), val)
475
476 // Decrement by 10 should return -8 (negative values allowed)
477 val, err = ctr.Decrement(ctx, key, 10)
478 require.NoError(t, err)
479 require.Equal(t, int64(-8), val)
480 })
481
482 t.Run("DecrementWithTTL", func(t *testing.T) {
483 key := uid.New(uid.TestPrefix)
484 ttl := 1 * time.Second
485
486 // First decrement creates the key with TTL
487 val, err := ctr.Decrement(ctx, key, 5, ttl)
488 require.NoError(t, err)
489 require.Equal(t, int64(-5), val) // Starting from 0, decrement by 5 = -5
490
491 // Get the value immediately
492 val, err = ctr.Get(ctx, key)
493 require.NoError(t, err)
494 require.Equal(t, int64(-5), val)
495
496 // Wait for the key to expire
497 time.Sleep(2 * time.Second)
498
499 // Key should be gone or zero
500 val, err = ctr.Get(ctx, key)
501 require.NoError(t, err)
502 require.Equal(t, int64(0), val)
503 })
504
505 t.Run("ConcurrentDecrements", func(t *testing.T) {
506 key := uid.New(uid.TestPrefix)
507 numWorkers := 10

Callers

nothing calls this directly

Calls 11

RedisFunction · 0.92
NewFunction · 0.92
newTestRedisFunction · 0.85
DoneMethod · 0.80
CloseMethod · 0.65
RunMethod · 0.65
IncrementMethod · 0.65
DecrementMethod · 0.65
GetMethod · 0.65
WaitMethod · 0.65
AddMethod · 0.45

Tested by

no test coverage detected