Kaynağa Gözat

fix: HitQuota should be returned instead of Allowed when limit is equal to 1. (#1581)

qi 3 yıl önce
ebeveyn
işleme
96c128c58a
2 değiştirilmiş dosya ile 12 ekleme ve 2 silme
  1. 2 2
      core/limit/periodlimit.go
  2. 10 0
      core/limit/periodlimit_test.go

+ 2 - 2
core/limit/periodlimit.go

@@ -14,8 +14,8 @@ local window = tonumber(ARGV[2])
 local current = redis.call("INCRBY", KEYS[1], 1)
 if current == 1 then
     redis.call("expire", KEYS[1], window)
-    return 1
-elseif current < limit then
+end
+if current < limit then
     return 1
 elseif current == limit then
     return 2

+ 10 - 0
core/limit/periodlimit_test.go

@@ -65,3 +65,13 @@ func testPeriodLimit(t *testing.T, opts ...PeriodOption) {
 	assert.Equal(t, 1, hitQuota)
 	assert.Equal(t, total-quota, overQuota)
 }
+
+func TestQuotaFull(t *testing.T) {
+	s, err := miniredis.Run()
+	assert.Nil(t, err)
+
+	l := NewPeriodLimit(1, 1, redis.New(s.Addr()), "periodlimit")
+	val, err := l.Take("first")
+	assert.Nil(t, err)
+	assert.Equal(t, HitQuota, val)
+}