mirror of
				https://github.com/brmlab/brmsklad.git
				synced 2025-10-31 08:13:58 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			194 lines
		
	
	
	
		
			6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			194 lines
		
	
	
	
		
			6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * FileLogTest file
 | |
|  *
 | |
|  * CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
 | |
|  * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 | |
|  *
 | |
|  * Licensed under The MIT License
 | |
|  * For full copyright and license information, please see the LICENSE.txt
 | |
|  * Redistributions of files must retain the above copyright notice
 | |
|  *
 | |
|  * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 | |
|  * @link          http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
 | |
|  * @package       Cake.Test.Case.Log.Engine
 | |
|  * @since         CakePHP(tm) v 1.3
 | |
|  * @license       http://www.opensource.org/licenses/mit-license.php MIT License
 | |
|  */
 | |
| 
 | |
| App::uses('FileLog', 'Log/Engine');
 | |
| 
 | |
| /**
 | |
|  * CakeLogTest class
 | |
|  *
 | |
|  * @package       Cake.Test.Case.Log.Engine
 | |
|  */
 | |
| class FileLogTest extends CakeTestCase {
 | |
| 
 | |
| /**
 | |
|  * testLogFileWriting method
 | |
|  *
 | |
|  * @return void
 | |
|  */
 | |
| 	public function testLogFileWriting() {
 | |
| 		$this->_deleteLogs(LOGS);
 | |
| 
 | |
| 		$log = new FileLog();
 | |
| 		$log->write('warning', 'Test warning');
 | |
| 		$this->assertTrue(file_exists(LOGS . 'error.log'));
 | |
| 
 | |
| 		$result = file_get_contents(LOGS . 'error.log');
 | |
| 		$this->assertRegExp('/^2[0-9]{3}-[0-9]+-[0-9]+ [0-9]+:[0-9]+:[0-9]+ Warning: Test warning/', $result);
 | |
| 
 | |
| 		$log->write('debug', 'Test warning');
 | |
| 		$this->assertTrue(file_exists(LOGS . 'debug.log'));
 | |
| 
 | |
| 		$result = file_get_contents(LOGS . 'debug.log');
 | |
| 		$this->assertRegExp('/^2[0-9]{3}-[0-9]+-[0-9]+ [0-9]+:[0-9]+:[0-9]+ Debug: Test warning/', $result);
 | |
| 
 | |
| 		$log->write('random', 'Test warning');
 | |
| 		$this->assertTrue(file_exists(LOGS . 'random.log'));
 | |
| 
 | |
| 		$result = file_get_contents(LOGS . 'random.log');
 | |
| 		$this->assertRegExp('/^2[0-9]{3}-[0-9]+-[0-9]+ [0-9]+:[0-9]+:[0-9]+ Random: Test warning/', $result);
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * test using the path setting to write logs in other places.
 | |
|  *
 | |
|  * @return void
 | |
|  */
 | |
| 	public function testPathSetting() {
 | |
| 		$path = TMP . 'tests' . DS;
 | |
| 		$this->_deleteLogs($path);
 | |
| 
 | |
| 		$log = new FileLog(compact('path'));
 | |
| 		$log->write('warning', 'Test warning');
 | |
| 		$this->assertTrue(file_exists($path . 'error.log'));
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * test log rotation
 | |
|  *
 | |
|  * @return void
 | |
|  */
 | |
| 	public function testRotation() {
 | |
| 		$path = TMP . 'tests' . DS;
 | |
| 		$this->_deleteLogs($path);
 | |
| 
 | |
| 		file_put_contents($path . 'error.log', "this text is under 35 bytes\n");
 | |
| 		$log = new FileLog(array(
 | |
| 			'path' => $path,
 | |
| 			'size' => 35,
 | |
| 			'rotate' => 2
 | |
| 		));
 | |
| 		$log->write('warning', 'Test warning one');
 | |
| 		$this->assertTrue(file_exists($path . 'error.log'));
 | |
| 
 | |
| 		$result = file_get_contents($path . 'error.log');
 | |
| 		$this->assertRegExp('/Warning: Test warning one/', $result);
 | |
| 		$this->assertEquals(0, count(glob($path . 'error.log.*')));
 | |
| 
 | |
| 		clearstatcache();
 | |
| 		$log->write('warning', 'Test warning second');
 | |
| 
 | |
| 		$files = glob($path . 'error.log.*');
 | |
| 		$this->assertEquals(1, count($files));
 | |
| 
 | |
| 		$result = file_get_contents($files[0]);
 | |
| 		$this->assertRegExp('/this text is under 35 bytes/', $result);
 | |
| 		$this->assertRegExp('/Warning: Test warning one/', $result);
 | |
| 
 | |
| 		sleep(1);
 | |
| 		clearstatcache();
 | |
| 		$log->write('warning', 'Test warning third');
 | |
| 
 | |
| 		$result = file_get_contents($path . 'error.log');
 | |
| 		$this->assertRegExp('/Warning: Test warning third/', $result);
 | |
| 
 | |
| 		$files = glob($path . 'error.log.*');
 | |
| 		$this->assertEquals(2, count($files));
 | |
| 
 | |
| 		$result = file_get_contents($files[0]);
 | |
| 		$this->assertRegExp('/this text is under 35 bytes/', $result);
 | |
| 
 | |
| 		$result = file_get_contents($files[1]);
 | |
| 		$this->assertRegExp('/Warning: Test warning second/', $result);
 | |
| 
 | |
| 		file_put_contents($path . 'error.log.0000000000', "The oldest log file with over 35 bytes.\n");
 | |
| 
 | |
| 		sleep(1);
 | |
| 		clearstatcache();
 | |
| 		$log->write('warning', 'Test warning fourth');
 | |
| 
 | |
| 		// rotate count reached so file count should not increase
 | |
| 		$files = glob($path . 'error.log.*');
 | |
| 		$this->assertEquals(2, count($files));
 | |
| 
 | |
| 		$result = file_get_contents($path . 'error.log');
 | |
| 		$this->assertRegExp('/Warning: Test warning fourth/', $result);
 | |
| 
 | |
| 		$result = file_get_contents(array_pop($files));
 | |
| 		$this->assertRegExp('/Warning: Test warning third/', $result);
 | |
| 
 | |
| 		$result = file_get_contents(array_pop($files));
 | |
| 		$this->assertRegExp('/Warning: Test warning second/', $result);
 | |
| 
 | |
| 		file_put_contents($path . 'debug.log', "this text is just greater than 35 bytes\n");
 | |
| 		$log = new FileLog(array(
 | |
| 			'path' => $path,
 | |
| 			'size' => 35,
 | |
| 			'rotate' => 0
 | |
| 		));
 | |
| 		file_put_contents($path . 'debug.log.0000000000', "The oldest log file with over 35 bytes.\n");
 | |
| 		$log->write('debug', 'Test debug');
 | |
| 		$this->assertTrue(file_exists($path . 'debug.log'));
 | |
| 
 | |
| 		$result = file_get_contents($path . 'debug.log');
 | |
| 		$this->assertRegExp('/^2[0-9]{3}-[0-9]+-[0-9]+ [0-9]+:[0-9]+:[0-9]+ Debug: Test debug/', $result);
 | |
| 		$this->assertFalse(strstr($result, 'greater than 5 bytes'));
 | |
| 		$this->assertEquals(0, count(glob($path . 'debug.log.*')));
 | |
| 	}
 | |
| 
 | |
| 	public function testMaskSetting() {
 | |
| 		if (DS === '\\') {
 | |
| 			$this->markTestSkipped('File permission testing does not work on Windows.');
 | |
| 		}
 | |
| 
 | |
| 		$path = TMP . 'tests' . DS;
 | |
| 		$this->_deleteLogs($path);
 | |
| 
 | |
| 		$log = new FileLog(array('path' => $path, 'mask' => 0666));
 | |
| 		$log->write('warning', 'Test warning one');
 | |
| 		$result = substr(sprintf('%o', fileperms($path . 'error.log')), -4);
 | |
| 		$expected = '0666';
 | |
| 		$this->assertEquals($expected, $result);
 | |
| 		unlink($path . 'error.log');
 | |
| 
 | |
| 		$log = new FileLog(array('path' => $path, 'mask' => 0644));
 | |
| 		$log->write('warning', 'Test warning two');
 | |
| 		$result = substr(sprintf('%o', fileperms($path . 'error.log')), -4);
 | |
| 		$expected = '0644';
 | |
| 		$this->assertEquals($expected, $result);
 | |
| 		unlink($path . 'error.log');
 | |
| 
 | |
| 		$log = new FileLog(array('path' => $path, 'mask' => 0640));
 | |
| 		$log->write('warning', 'Test warning three');
 | |
| 		$result = substr(sprintf('%o', fileperms($path . 'error.log')), -4);
 | |
| 		$expected = '0640';
 | |
| 		$this->assertEquals($expected, $result);
 | |
| 		unlink($path . 'error.log');
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * helper function to clears all log files in specified directory
 | |
|  *
 | |
|  * @return void
 | |
|  */
 | |
| 	protected function _deleteLogs($dir) {
 | |
| 		$files = array_merge(glob($dir . '*.log'), glob($dir . '*.log.*'));
 | |
| 		foreach ($files as $file) {
 | |
| 			unlink($file);
 | |
| 		}
 | |
| 	}
 | |
| }
 | 
