Mercurial > hg > isophonics-drupal-site
diff core/modules/system/src/Tests/System/FloodTest.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/system/src/Tests/System/FloodTest.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,113 @@ +<?php + +namespace Drupal\system\Tests\System; + +use Drupal\Core\Flood\DatabaseBackend; +use Drupal\Core\Flood\MemoryBackend; +use Drupal\simpletest\WebTestBase; +use Symfony\Component\HttpFoundation\Request; + +/** + * Functional tests for the flood control mechanism. + * + * @group system + */ +class FloodTest extends WebTestBase { + + /** + * {@inheritdoc} + */ + protected function setUp() { + parent::setUp(); + + // Flood backends need a request object. Create a dummy one and insert it + // to the container. + $request = Request::createFromGlobals(); + $this->container->get('request_stack')->push($request); + } + + /** + * Test flood control mechanism clean-up. + */ + public function testCleanUp() { + $threshold = 1; + $window_expired = -1; + $name = 'flood_test_cleanup'; + + $flood = \Drupal::flood(); + $this->assertTrue($flood->isAllowed($name, $threshold)); + // Register expired event. + $flood->register($name, $window_expired); + // Verify event is not allowed. + $this->assertFalse($flood->isAllowed($name, $threshold)); + // Run cron and verify event is now allowed. + $this->cronRun(); + $this->assertTrue($flood->isAllowed($name, $threshold)); + + // Register unexpired event. + $flood->register($name); + // Verify event is not allowed. + $this->assertFalse($flood->isAllowed($name, $threshold)); + // Run cron and verify event is still not allowed. + $this->cronRun(); + $this->assertFalse($flood->isAllowed($name, $threshold)); + } + + /** + * Test flood control memory backend. + */ + public function testMemoryBackend() { + $threshold = 1; + $window_expired = -1; + $name = 'flood_test_cleanup'; + + $request_stack = \Drupal::service('request_stack'); + $flood = new MemoryBackend($request_stack); + $this->assertTrue($flood->isAllowed($name, $threshold)); + // Register expired event. + $flood->register($name, $window_expired); + // Verify event is not allowed. + $this->assertFalse($flood->isAllowed($name, $threshold)); + // Run cron and verify event is now allowed. + $flood->garbageCollection(); + $this->assertTrue($flood->isAllowed($name, $threshold)); + + // Register unexpired event. + $flood->register($name); + // Verify event is not allowed. + $this->assertFalse($flood->isAllowed($name, $threshold)); + // Run cron and verify event is still not allowed. + $flood->garbageCollection(); + $this->assertFalse($flood->isAllowed($name, $threshold)); + } + + /** + * Test flood control database backend. + */ + public function testDatabaseBackend() { + $threshold = 1; + $window_expired = -1; + $name = 'flood_test_cleanup'; + + $connection = \Drupal::service('database'); + $request_stack = \Drupal::service('request_stack'); + $flood = new DatabaseBackend($connection, $request_stack); + $this->assertTrue($flood->isAllowed($name, $threshold)); + // Register expired event. + $flood->register($name, $window_expired); + // Verify event is not allowed. + $this->assertFalse($flood->isAllowed($name, $threshold)); + // Run cron and verify event is now allowed. + $flood->garbageCollection(); + $this->assertTrue($flood->isAllowed($name, $threshold)); + + // Register unexpired event. + $flood->register($name); + // Verify event is not allowed. + $this->assertFalse($flood->isAllowed($name, $threshold)); + // Run cron and verify event is still not allowed. + $flood->garbageCollection(); + $this->assertFalse($flood->isAllowed($name, $threshold)); + } + +}