Verified Commit 5563d9ca authored by Jess's avatar Jess
Browse files

Revert "Issue #2106939 by smustgrave, dawehner, jungle: Improve test coverage...

Revert "Issue #2106939 by smustgrave, dawehner, jungle: Improve test coverage of the flood memory backend test and convert it to a unit test"

This reverts commit 267b2b2f.
parent de862a2b
Loading
Loading
Loading
Loading
+40 −0
Original line number Diff line number Diff line
@@ -46,6 +46,46 @@ public function testCleanUp() {
    $this->assertFalse($flood->isAllowed($name, $threshold));
  }

  /**
   * Tests 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));
  }

  /**
   * Tests memory backend records events to the nearest microsecond.
   */
  public function testMemoryBackendThreshold() {
    $request_stack = \Drupal::service('request_stack');
    $flood = new MemoryBackend($request_stack);
    $flood->register('new event');
    $this->assertTrue($flood->isAllowed('new event', '2'));
    $flood->register('new event');
    $this->assertFalse($flood->isAllowed('new event', '2'));
  }

  /**
   * Tests flood control database backend.
   */
+0 −106
Original line number Diff line number Diff line
<?php

namespace Drupal\Tests\Core\Flood;

use Drupal\Core\Flood\MemoryBackend;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Request;
use Drupal\Tests\UnitTestCase;

/**
 * Tests the memory flood implementation.
 *
 * @group flood
 * @coversDefaultClass \Drupal\Core\Flood\MemoryBackend
 */
class MemoryBackendTest extends UnitTestCase {

  /**
   * The tested memory flood backend.
   *
   * @var \Drupal\Core\Flood\MemoryBackend
   */
  protected $flood;

  protected function setUp(): void {
    $request = new RequestStack();
    $request_mock = $this->getMockBuilder(Request::class)
      ->onlyMethods(['getClientIp'])
      ->getMock();
    $request->push($request_mock);
    $this->flood = new MemoryBackend($request);
  }

  /**
   * Tests an allowed flood event.
   */
  public function testAllowedProceeding() {
    $threshold = 2;
    $window_expired = -1;

    $this->flood->register('test_event', $window_expired);
    $this->assertTrue($this->flood->isAllowed('test_event', $threshold));
  }

  /**
   * Tests a flood event with more than the allowed calls.
   */
  public function testNotAllowedProceeding() {
    $threshold = 1;
    $window_expired = -1;

    // Register the event twice, so it is not allowed to proceed.
    $this->flood->register('test_event', $window_expired);
    $this->flood->register('test_event', $window_expired, 1);

    $this->assertFalse($this->flood->isAllowed('test_event', $threshold));
  }

  /**
   * Tests a flood event with expiring, so cron will allow to proceed.
   *
   * @medium
   */
  public function testExpiring() {
    $threshold = 1;
    $window_expired = -1;

    $this->flood->register('test_event', $window_expired);
    usleep(2);
    $this->flood->register('test_event', $window_expired);

    $this->assertFalse($this->flood->isAllowed('test_event', $threshold));

    // "Run cron", which clears the flood data and verify event is now allowed.
    $this->flood->garbageCollection();
    $this->assertTrue($this->flood->isAllowed('test_event', $threshold));
  }

  /**
   * Tests a flood event with no expiring, so cron will not allow to proceed.
   */
  public function testNotExpiring() {
    $threshold = 2;

    $this->flood->register('test_event', 1);
    usleep(3);
    $this->flood->register('test_event', 1);

    $this->assertFalse($this->flood->isAllowed('test_event', $threshold));

    // "Run cron", which clears the flood data and verify event is not allowed.
    $this->flood->garbageCollection();
    $this->assertFalse($this->flood->isAllowed('test_event', $threshold));
  }

  /**
   * Tests memory backend records events to the nearest microsecond.
   */
  public function testMemoryBackendThreshold() {
    $this->flood->register('new event');
    $this->assertTrue($this->flood->isAllowed('new event', '2'));
    $this->flood->register('new event');
    $this->assertFalse($this->flood->isAllowed('new event', '2'));
  }

}