package ratelimit import ( "testing" "time" "github.com/stretchr/testify/assert" ) func TestInMemoryReserve(t *testing.T) { t.Parallel() limiter := NewInMemory() policy := Policy{ Requests: 1, Window: time.Hour, Burst: 1, } first := limiter.Reserve("bucket-1", policy) second := limiter.Reserve("bucket-1", policy) otherBucket := limiter.Reserve("bucket-2", policy) assert.True(t, first.Allowed) assert.False(t, second.Allowed) assert.Positive(t, second.RetryAfter) assert.True(t, otherBucket.Allowed) } func TestInMemoryReserveResetsOnPolicyChange(t *testing.T) { t.Parallel() limiter := NewInMemory() initialPolicy := Policy{ Requests: 1, Window: time.Hour, Burst: 1, } updatedPolicy := Policy{ Requests: 2, Window: time.Hour, Burst: 2, } assert.True(t, limiter.Reserve("bucket-1", initialPolicy).Allowed) assert.False(t, limiter.Reserve("bucket-1", initialPolicy).Allowed) assert.True(t, limiter.Reserve("bucket-1", updatedPolicy).Allowed) }