|
14 | 14 | use PHPUnit\Framework\TestCase;
|
15 | 15 | use Symfony\Bridge\PhpUnit\ClockMock;
|
16 | 16 | use Symfony\Component\RateLimiter\Policy\FixedWindowLimiter;
|
| 17 | +use Symfony\Component\RateLimiter\Policy\Window; |
17 | 18 | use Symfony\Component\RateLimiter\RateLimit;
|
18 | 19 | use Symfony\Component\RateLimiter\Storage\InMemoryStorage;
|
19 | 20 | use Symfony\Component\RateLimiter\Tests\Resources\DummyWindow;
|
@@ -90,6 +91,19 @@ public function testWrongWindowFromCache()
|
90 | 91 | $this->assertEquals(9, $rateLimit->getRemainingTokens());
|
91 | 92 | }
|
92 | 93 |
|
| 94 | + public function testWindowResilientToTimeShifting() |
| 95 | + { |
| 96 | + $serverOneClock = microtime(true) - 1; |
| 97 | + $serverTwoClock = microtime(true) + 1; |
| 98 | + $window = new Window('id', 300, 100, $serverTwoClock); |
| 99 | + $this->assertSame(100, $window->getAvailableTokens($serverTwoClock)); |
| 100 | + $this->assertSame(100, $window->getAvailableTokens($serverOneClock)); |
| 101 | + |
| 102 | + $window = new Window('id', 300, 100, $serverOneClock); |
| 103 | + $this->assertSame(100, $window->getAvailableTokens($serverTwoClock)); |
| 104 | + $this->assertSame(100, $window->getAvailableTokens($serverOneClock)); |
| 105 | + } |
| 106 | + |
93 | 107 | private function createLimiter(): FixedWindowLimiter
|
94 | 108 | {
|
95 | 109 | return new FixedWindowLimiter('test', 10, new \DateInterval('PT1M'), $this->storage);
|
|
0 commit comments