TrafficLimiterTest.php 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. <?php
  2. use PHPUnit\Framework\TestCase;
  3. use PrivateBin\Persistence\TrafficLimiter;
  4. class TrafficLimiterTest extends TestCase
  5. {
  6. private $_path;
  7. public function setUp(): void
  8. {
  9. /* Setup Routine */
  10. $this->_path = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'trafficlimit';
  11. TrafficLimiter::setPath($this->_path);
  12. }
  13. public function tearDown(): void
  14. {
  15. /* Tear Down Routine */
  16. Helper::rmDir($this->_path . DIRECTORY_SEPARATOR);
  17. }
  18. public function testTrafficGetsLimited()
  19. {
  20. $this->assertEquals($this->_path, TrafficLimiter::getPath());
  21. $file = 'baz';
  22. $this->assertEquals($this->_path . DIRECTORY_SEPARATOR . $file, TrafficLimiter::getPath($file));
  23. TrafficLimiter::setLimit(4);
  24. $_SERVER['REMOTE_ADDR'] = '127.0.0.1';
  25. $this->assertTrue(TrafficLimiter::canPass(), 'first request may pass');
  26. sleep(1);
  27. $this->assertFalse(TrafficLimiter::canPass(), 'second request is to fast, may not pass');
  28. sleep(4);
  29. $this->assertTrue(TrafficLimiter::canPass(), 'third request waited long enough and may pass');
  30. $_SERVER['REMOTE_ADDR'] = '2001:1620:2057:dead:beef::cafe:babe';
  31. $this->assertTrue(TrafficLimiter::canPass(), 'fourth request has different ip and may pass');
  32. $_SERVER['REMOTE_ADDR'] = '127.0.0.1';
  33. $this->assertFalse(TrafficLimiter::canPass(), 'fifth request is to fast, may not pass');
  34. }
  35. }