統計
| ブランチ: | リビジョン:

pictcode / lib / Cake / Test / Case / Log / Engine / FileLogTest.php @ 0b1b8047

履歴 | 表示 | アノテート | ダウンロード (5.991 KB)

1
<?php
2
/**
3
 * FileLogTest file
4
 *
5
 * CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
6
 * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
7
 *
8
 * Licensed under The MIT License
9
 * For full copyright and license information, please see the LICENSE.txt
10
 * Redistributions of files must retain the above copyright notice
11
 *
12
 * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
13
 * @link          http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
14
 * @package       Cake.Test.Case.Log.Engine
15
 * @since         CakePHP(tm) v 1.3
16
 * @license       http://www.opensource.org/licenses/mit-license.php MIT License
17
 */
18

    
19
App::uses('FileLog', 'Log/Engine');
20

    
21
/**
22
 * CakeLogTest class
23
 *
24
 * @package       Cake.Test.Case.Log.Engine
25
 */
26
class FileLogTest extends CakeTestCase {
27

    
28
/**
29
 * testLogFileWriting method
30
 *
31
 * @return void
32
 */
33
        public function testLogFileWriting() {
34
                $this->_deleteLogs(LOGS);
35

    
36
                $log = new FileLog();
37
                $log->write('warning', 'Test warning');
38
                $this->assertTrue(file_exists(LOGS . 'error.log'));
39

    
40
                $result = file_get_contents(LOGS . 'error.log');
41
                $this->assertRegExp('/^2[0-9]{3}-[0-9]+-[0-9]+ [0-9]+:[0-9]+:[0-9]+ Warning: Test warning/', $result);
42

    
43
                $log->write('debug', 'Test warning');
44
                $this->assertTrue(file_exists(LOGS . 'debug.log'));
45

    
46
                $result = file_get_contents(LOGS . 'debug.log');
47
                $this->assertRegExp('/^2[0-9]{3}-[0-9]+-[0-9]+ [0-9]+:[0-9]+:[0-9]+ Debug: Test warning/', $result);
48

    
49
                $log->write('random', 'Test warning');
50
                $this->assertTrue(file_exists(LOGS . 'random.log'));
51

    
52
                $result = file_get_contents(LOGS . 'random.log');
53
                $this->assertRegExp('/^2[0-9]{3}-[0-9]+-[0-9]+ [0-9]+:[0-9]+:[0-9]+ Random: Test warning/', $result);
54
        }
55

    
56
/**
57
 * test using the path setting to write logs in other places.
58
 *
59
 * @return void
60
 */
61
        public function testPathSetting() {
62
                $path = TMP . 'tests' . DS;
63
                $this->_deleteLogs($path);
64

    
65
                $log = new FileLog(compact('path'));
66
                $log->write('warning', 'Test warning');
67
                $this->assertTrue(file_exists($path . 'error.log'));
68
        }
69

    
70
/**
71
 * test log rotation
72
 *
73
 * @return void
74
 */
75
        public function testRotation() {
76
                $path = TMP . 'tests' . DS;
77
                $this->_deleteLogs($path);
78

    
79
                file_put_contents($path . 'error.log', "this text is under 35 bytes\n");
80
                $log = new FileLog(array(
81
                        'path' => $path,
82
                        'size' => 35,
83
                        'rotate' => 2
84
                ));
85
                $log->write('warning', 'Test warning one');
86
                $this->assertTrue(file_exists($path . 'error.log'));
87

    
88
                $result = file_get_contents($path . 'error.log');
89
                $this->assertRegExp('/Warning: Test warning one/', $result);
90
                $this->assertEquals(0, count(glob($path . 'error.log.*')));
91

    
92
                clearstatcache();
93
                $log->write('warning', 'Test warning second');
94

    
95
                $files = glob($path . 'error.log.*');
96
                $this->assertEquals(1, count($files));
97

    
98
                $result = file_get_contents($files[0]);
99
                $this->assertRegExp('/this text is under 35 bytes/', $result);
100
                $this->assertRegExp('/Warning: Test warning one/', $result);
101

    
102
                sleep(1);
103
                clearstatcache();
104
                $log->write('warning', 'Test warning third');
105

    
106
                $result = file_get_contents($path . 'error.log');
107
                $this->assertRegExp('/Warning: Test warning third/', $result);
108

    
109
                $files = glob($path . 'error.log.*');
110
                $this->assertEquals(2, count($files));
111

    
112
                $result = file_get_contents($files[0]);
113
                $this->assertRegExp('/this text is under 35 bytes/', $result);
114

    
115
                $result = file_get_contents($files[1]);
116
                $this->assertRegExp('/Warning: Test warning second/', $result);
117

    
118
                file_put_contents($path . 'error.log.0000000000', "The oldest log file with over 35 bytes.\n");
119

    
120
                sleep(1);
121
                clearstatcache();
122
                $log->write('warning', 'Test warning fourth');
123

    
124
                // rotate count reached so file count should not increase
125
                $files = glob($path . 'error.log.*');
126
                $this->assertEquals(2, count($files));
127

    
128
                $result = file_get_contents($path . 'error.log');
129
                $this->assertRegExp('/Warning: Test warning fourth/', $result);
130

    
131
                $result = file_get_contents(array_pop($files));
132
                $this->assertRegExp('/Warning: Test warning third/', $result);
133

    
134
                $result = file_get_contents(array_pop($files));
135
                $this->assertRegExp('/Warning: Test warning second/', $result);
136

    
137
                file_put_contents($path . 'debug.log', "this text is just greater than 35 bytes\n");
138
                $log = new FileLog(array(
139
                        'path' => $path,
140
                        'size' => 35,
141
                        'rotate' => 0
142
                ));
143
                file_put_contents($path . 'debug.log.0000000000', "The oldest log file with over 35 bytes.\n");
144
                $log->write('debug', 'Test debug');
145
                $this->assertTrue(file_exists($path . 'debug.log'));
146

    
147
                $result = file_get_contents($path . 'debug.log');
148
                $this->assertRegExp('/^2[0-9]{3}-[0-9]+-[0-9]+ [0-9]+:[0-9]+:[0-9]+ Debug: Test debug/', $result);
149
                $this->assertFalse(strstr($result, 'greater than 5 bytes'));
150
                $this->assertEquals(0, count(glob($path . 'debug.log.*')));
151
        }
152

    
153
        public function testMaskSetting() {
154
                if (DS === '\\') {
155
                        $this->markTestSkipped('File permission testing does not work on Windows.');
156
                }
157

    
158
                $path = TMP . 'tests' . DS;
159
                $this->_deleteLogs($path);
160

    
161
                $log = new FileLog(array('path' => $path, 'mask' => 0666));
162
                $log->write('warning', 'Test warning one');
163
                $result = substr(sprintf('%o', fileperms($path . 'error.log')), -4);
164
                $expected = '0666';
165
                $this->assertEquals($expected, $result);
166
                unlink($path . 'error.log');
167

    
168
                $log = new FileLog(array('path' => $path, 'mask' => 0644));
169
                $log->write('warning', 'Test warning two');
170
                $result = substr(sprintf('%o', fileperms($path . 'error.log')), -4);
171
                $expected = '0644';
172
                $this->assertEquals($expected, $result);
173
                unlink($path . 'error.log');
174

    
175
                $log = new FileLog(array('path' => $path, 'mask' => 0640));
176
                $log->write('warning', 'Test warning three');
177
                $result = substr(sprintf('%o', fileperms($path . 'error.log')), -4);
178
                $expected = '0640';
179
                $this->assertEquals($expected, $result);
180
                unlink($path . 'error.log');
181
        }
182

    
183
/**
184
 * helper function to clears all log files in specified directory
185
 *
186
 * @return void
187
 */
188
        protected function _deleteLogs($dir) {
189
                $files = array_merge(glob($dir . '*.log'), glob($dir . '*.log.*'));
190
                foreach ($files as $file) {
191
                        unlink($file);
192
                }
193
        }
194
}