X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=tests%2FUtilsTest.php;h=6a7870c4620ac5cd3bbf2a838f108c27755dd411;hb=f63632a6fb84594b8aeacb387a5cd17b4a841d2c;hp=90392dfba26554c864640f41bae7aad6a7008d5c;hpb=e92f1ba59edb9fd60b185dc633e64a62dffe3b04;p=github%2Fshaarli%2FShaarli.git diff --git a/tests/UtilsTest.php b/tests/UtilsTest.php index 90392dfb..6a7870c4 100644 --- a/tests/UtilsTest.php +++ b/tests/UtilsTest.php @@ -4,12 +4,94 @@ */ require_once 'application/Utils.php'; +require_once 'tests/utils/ReferenceSessionIdHashes.php'; + +// Initialize reference data before PHPUnit starts a session +ReferenceSessionIdHashes::genAllHashes(); + /** * Unitary tests for Shaarli utilities */ class UtilsTest extends PHPUnit_Framework_TestCase { + // Session ID hashes + protected static $sidHashes = null; + + // Log file + protected static $testLogFile = 'tests.log'; + + // Expected log date format + protected static $dateFormat = 'Y/m/d H:i:s'; + + + /** + * Assign reference data + */ + public static function setUpBeforeClass() + { + self::$sidHashes = ReferenceSessionIdHashes::getHashes(); + } + + /** + * Resets test data before each test + */ + protected function setUp() + { + if (file_exists(self::$testLogFile)) { + unlink(self::$testLogFile); + } + } + + /** + * Returns a list of the elements from the last logged entry + * + * @return list (date, ip address, message) + */ + protected function getLastLogEntry() + { + $logFile = file(self::$testLogFile); + return explode(' - ', trim(array_pop($logFile), PHP_EOL)); + } + + /** + * Log a message to a file - IPv4 client address + */ + public function testLogmIp4() + { + $logMessage = 'IPv4 client connected'; + logm(self::$testLogFile, '127.0.0.1', $logMessage); + list($date, $ip, $message) = $this->getLastLogEntry(); + + $this->assertInstanceOf( + 'DateTime', + DateTime::createFromFormat(self::$dateFormat, $date) + ); + $this->assertTrue( + filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false + ); + $this->assertEquals($logMessage, $message); + } + + /** + * Log a message to a file - IPv6 client address + */ + public function testLogmIp6() + { + $logMessage = 'IPv6 client connected'; + logm(self::$testLogFile, '2001:db8::ff00:42:8329', $logMessage); + list($date, $ip, $message) = $this->getLastLogEntry(); + + $this->assertInstanceOf( + 'DateTime', + DateTime::createFromFormat(self::$dateFormat, $date) + ); + $this->assertTrue( + filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) !== false + ); + $this->assertEquals($logMessage, $message); + } + /** * Represent a link by its hash */ @@ -93,5 +175,82 @@ class UtilsTest extends PHPUnit_Framework_TestCase $this->assertFalse(checkDateFormat('Y-m-d', '2015-06')); $this->assertFalse(checkDateFormat('Ymd', 'DeLorean')); } + + /** + * Test generate location with valid data. + */ + public function testGenerateLocation() { + $ref = 'http://localhost/?test'; + $this->assertEquals($ref, generateLocation($ref, 'localhost')); + $ref = 'http://localhost:8080/?test'; + $this->assertEquals($ref, generateLocation($ref, 'localhost:8080')); + $ref = '?localreferer#hash'; + $this->assertEquals($ref, generateLocation($ref, 'localhost:8080')); + } + + /** + * Test generate location - anti loop. + */ + public function testGenerateLocationLoop() { + $ref = 'http://localhost/?test'; + $this->assertEquals('?', generateLocation($ref, 'localhost', array('test'))); + } + + /** + * Test generate location - from other domain. + */ + public function testGenerateLocationOut() { + $ref = 'http://somewebsite.com/?test'; + $this->assertEquals('?', generateLocation($ref, 'localhost')); + } + + /** + * Test is_session_id_valid with a valid ID - TEST ALL THE HASHES! + * + * This tests extensively covers all hash algorithms / bit representations + */ + public function testIsAnyHashSessionIdValid() + { + foreach (self::$sidHashes as $algo => $bpcs) { + foreach ($bpcs as $bpc => $hash) { + $this->assertTrue(is_session_id_valid($hash)); + } + } + } + + /** + * Test is_session_id_valid with a valid ID - SHA-1 hashes + */ + public function testIsSha1SessionIdValid() + { + $this->assertTrue(is_session_id_valid(sha1('shaarli'))); + } + + /** + * Test is_session_id_valid with a valid ID - SHA-256 hashes + */ + public function testIsSha256SessionIdValid() + { + $this->assertTrue(is_session_id_valid(hash('sha256', 'shaarli'))); + } + + /** + * Test is_session_id_valid with a valid ID - SHA-512 hashes + */ + public function testIsSha512SessionIdValid() + { + $this->assertTrue(is_session_id_valid(hash('sha512', 'shaarli'))); + } + + /** + * Test is_session_id_valid with invalid IDs. + */ + public function testIsSessionIdInvalid() + { + $this->assertFalse(is_session_id_valid('')); + $this->assertFalse(is_session_id_valid(array())); + $this->assertFalse( + is_session_id_valid('c0ZqcWF3VFE2NmJBdm1HMVQ0ZHJ3UmZPbTFsNGhkNHI=') + ); + } } -?>