(t *testing.T)
| 331 | } |
| 332 | |
| 333 | func TestRateLimiterMemoryStore_Allow(t *testing.T) { |
| 334 | var inMemoryStore = NewRateLimiterMemoryStoreWithConfig(RateLimiterMemoryStoreConfig{Rate: 1, Burst: 3, ExpiresIn: 2 * time.Second}) |
| 335 | testCases := []struct { |
| 336 | id string |
| 337 | allowed bool |
| 338 | }{ |
| 339 | {"127.0.0.1", true}, // 0 ms |
| 340 | {"127.0.0.1", true}, // 220 ms burst #2 |
| 341 | {"127.0.0.1", true}, // 440 ms burst #3 |
| 342 | {"127.0.0.1", false}, // 660 ms block |
| 343 | {"127.0.0.1", false}, // 880 ms block |
| 344 | {"127.0.0.1", true}, // 1100 ms next second #1 |
| 345 | {"127.0.0.2", true}, // 1320 ms allow other ip |
| 346 | {"127.0.0.1", false}, // 1540 ms no burst |
| 347 | {"127.0.0.1", false}, // 1760 ms no burst |
| 348 | {"127.0.0.1", false}, // 1980 ms no burst |
| 349 | {"127.0.0.1", true}, // 2200 ms no burst |
| 350 | {"127.0.0.1", false}, // 2420 ms no burst |
| 351 | {"127.0.0.1", false}, // 2640 ms no burst |
| 352 | {"127.0.0.1", false}, // 2860 ms no burst |
| 353 | {"127.0.0.1", true}, // 3080 ms no burst |
| 354 | {"127.0.0.1", false}, // 3300 ms no burst |
| 355 | {"127.0.0.1", false}, // 3520 ms no burst |
| 356 | {"127.0.0.1", false}, // 3740 ms no burst |
| 357 | {"127.0.0.1", false}, // 3960 ms no burst |
| 358 | {"127.0.0.1", true}, // 4180 ms no burst |
| 359 | {"127.0.0.1", false}, // 4400 ms no burst |
| 360 | {"127.0.0.1", false}, // 4620 ms no burst |
| 361 | {"127.0.0.1", false}, // 4840 ms no burst |
| 362 | {"127.0.0.1", true}, // 5060 ms no burst |
| 363 | } |
| 364 | |
| 365 | for i, tc := range testCases { |
| 366 | t.Logf("Running testcase #%d => %v", i, time.Duration(i)*220*time.Millisecond) |
| 367 | inMemoryStore.timeNow = func() time.Time { |
| 368 | return time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC).Add(time.Duration(i) * 220 * time.Millisecond) |
| 369 | } |
| 370 | allowed, _ := inMemoryStore.Allow(tc.id) |
| 371 | assert.Equal(t, tc.allowed, allowed) |
| 372 | } |
| 373 | } |
| 374 | |
| 375 | func TestRateLimiterMemoryStore_cleanupStaleVisitors(t *testing.T) { |
| 376 | var inMemoryStore = NewRateLimiterMemoryStoreWithConfig(RateLimiterMemoryStoreConfig{Rate: 1, Burst: 3}) |
nothing calls this directly
no test coverage detected
searching dependent graphs…