/** * @depends testRetrieveDomainlist */ public function testBlocked() { $this->mockReferer(null); $this->assertFalse(\Nabble\Semalt::blocked(), 'Should not block unset referral'); $this->mockReferer(''); $this->assertFalse(\Nabble\Semalt::blocked(), 'Should not block empty referral'); $this->mockReferer('NotAnUrl'); $this->assertFalse(\Nabble\Semalt::blocked(), 'Should not block invalid referral'); $badReferrals = $this->getBadReferrals(); if (empty($badReferrals)) { $this->markTestIncomplete('Could not fetch bad referrals for testing'); } foreach ($badReferrals as $badReferral) { if ($badReferral && substr($badReferral, 0, 1) !== '#') { $this->mockReferer($badReferral); $this->assertTrue(\Nabble\Semalt::blocked(), 'Should block bad referral ' . $badReferral); } } foreach ($this->goodReferrals as $goodReferral) { $this->mockReferer($goodReferral); $this->assertFalse(\Nabble\Semalt::blocked(), 'Should not block good referral ' . $goodReferral); } }
<?php require '../vendor/autoload.php'; if (\Nabble\Semalt::blocked()) { $protocol = isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0'; header($protocol . ' 403 Forbidden'); } ?> <html> <head> <title>semalt blocker test target</title> </head> <body> <?php echo \Nabble\Semalt::blocked(true); ?> </body> </html>
$time_pre = microtime(true); $i = $c; while ($i--) { \Nabble\Semalt::blocked(); } echo number_format((microtime(true) - $time_pre) / $c * 1000, 8) . "ms\n"; echo "Testing invalid referer : "; mockReferer('NotAnUrl'); $time_pre = microtime(true); $i = $c; while ($i--) { \Nabble\Semalt::blocked(); } echo number_format((microtime(true) - $time_pre) / $c * 1000, 8) . "ms\n"; echo "Testing good referer : "; mockReferer('http://www.google.com/?q=query'); $time_pre = microtime(true); $i = $c; while ($i--) { \Nabble\Semalt::blocked(); } echo number_format((microtime(true) - $time_pre) / $c * 1000, 8) . "ms\n"; echo "Testing bad referer : "; $domainlist = \Nabble\Semalt::getBlocklist(); mockReferer($domainlist[array_rand($domainlist)]); $time_pre = microtime(true); $i = $c; while ($i--) { \Nabble\Semalt::blocked(); } echo number_format((microtime(true) - $time_pre) / $c * 1000, 8) . "ms\n";