, ThrottleRequests-Middleware. :
public function test_lock_opens_immediately_after_decay()
{
Carbon::setTestNow(null);
Route::get('/', function () {
return 'yes';
})->middleware(ThrottleRequests::class.':2,1');
$response = $this->withoutExceptionHandling()->get('/');
$this->assertEquals('yes', $response->getContent());
$this->assertEquals(2, $response->headers->get('X-RateLimit-Limit'));
$this->assertEquals(1, $response->headers->get('X-RateLimit-Remaining'));
Carbon::setTestNow(
Carbon::now()->addSeconds(10)
);
$response = $this->withoutExceptionHandling()->get('/');
$this->assertEquals('yes', $response->getContent());
$this->assertEquals(2, $response->headers->get('X-RateLimit-Limit'));
$this->assertEquals(0, $response->headers->get('X-RateLimit-Remaining'));
Carbon::setTestNow(
Carbon::now()->addSeconds(58)
);
try {
$this->withoutExceptionHandling()->get('/');
} catch (Throwable $e) {
$this->assertEquals(429, $e->getStatusCode());
$this->assertEquals(2, $e->getHeaders()['X-RateLimit-Limit']);
$this->assertEquals(0, $e->getHeaders()['X-RateLimit-Remaining']);
$this->assertEquals(2, $e->getHeaders()['Retry-After']);
$this->assertEquals(Carbon::now()->addSeconds(2)->getTimestamp(), $e->getHeaders()['X-RateLimit-Reset']);
}
}
Carbon::setTestNow(
Carbon::now()->addSeconds(10)
);
. phpunit:
./vendor/bin/phpunit tests/Integration/Http/ThrottleRequestsTest.php
PHPUnit 6.5.5 by Sebastian Bergmann and contributors.
Runtime: PHP 7.2.1
Configuration: /Volumes/Workspace/Projects/laravel/phpunit.xml.dist
F 1 / 1 (100%)
Time: 172 ms, Memory: 10.00MB
There was 1 failure:
1) Illuminate\Tests\Integration\Http\ThrottleRequestsTest::test_lock_opens_immediately_after_decay
Failed asserting that -8 matches expected 2.
/Volumes/Workspace/Projects/laravel/tests/Integration/Http/ThrottleRequestsTest.php:54
PR ~, , , - : ~
https://github.com/laravel/framework/pull/22725/files
edit: PR, . API, , . .
, .