]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - tests/include/SugarLogger/SugarLoggerTest.php
Release 6.5.8
[Github/sugarcrm.git] / tests / include / SugarLogger / SugarLoggerTest.php
1 <?php
2 /*********************************************************************************
3  * SugarCRM Community Edition is a customer relationship management program developed by
4  * SugarCRM, Inc. Copyright (C) 2004-2012 SugarCRM Inc.
5  * 
6  * This program is free software; you can redistribute it and/or modify it under
7  * the terms of the GNU Affero General Public License version 3 as published by the
8  * Free Software Foundation with the addition of the following permission added
9  * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
10  * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
11  * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
12  * 
13  * This program is distributed in the hope that it will be useful, but WITHOUT
14  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15  * FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public License for more
16  * details.
17  * 
18  * You should have received a copy of the GNU Affero General Public License along with
19  * this program; if not, see http://www.gnu.org/licenses or write to the Free
20  * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21  * 02110-1301 USA.
22  * 
23  * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
24  * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
25  * 
26  * The interactive user interfaces in modified source and object code versions
27  * of this program must display Appropriate Legal Notices, as required under
28  * Section 5 of the GNU Affero General Public License version 3.
29  * 
30  * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
31  * these Appropriate Legal Notices must retain the display of the "Powered by
32  * SugarCRM" logo. If the display of the logo is not reasonably feasible for
33  * technical reasons, the Appropriate Legal Notices must display the words
34  * "Powered by SugarCRM".
35  ********************************************************************************/
36
37
38 class SugarLoggerTest extends Sugar_PHPUnit_Framework_TestCase
39 {
40     public function tearDown()
41     {
42         // reset the logger level
43         $level = SugarConfig::getInstance()->get('logger.level');
44         if (!empty($level))
45             $GLOBALS['log']->setLevel($level);
46     }
47
48     public function providerWriteLogEntries()
49     {
50         return array(
51             array('debug','debug','foo1',true,'[DEBUG] foo1'),
52             array('debug','info','foo2',true,'[INFO] foo2'),
53             array('debug','warn','foo3',true,'[WARN] foo3'),
54             array('debug','error','foo4',true,'[ERROR] foo4'),
55             array('debug','fatal','foo5',true,'[FATAL] foo5'),
56             array('debug','security','foo6',true,'[SECURITY] foo6'),
57             array('fatal','warn','foo7',false,'[WARN] foo7'),
58             );
59     }
60
61     /**
62      * @dataProvider providerWriteLogEntries
63      */
64     public function testWriteLogEntries(
65         $currentLevel,
66         $logLevel,
67         $logMessage,
68         $shouldMessageBeWritten,
69         $messageWritten
70         )
71     {
72         $GLOBALS['log']->setLevel($currentLevel);
73         $GLOBALS['log']->$logLevel($logMessage);
74
75         $config = SugarConfig::getInstance();
76         $ext = $config->get('logger.file.ext');
77         $logfile = $config->get('logger.file.name');
78         $log_dir = $config->get('log_dir');
79         $log_dir = $log_dir . (empty($log_dir)?'':'/');
80         $file_suffix = $config->get('logger.file.suffix');
81         $date_suffix = "";
82
83         if( !empty($file_suffix) )
84         {
85             $date_suffix = "_" . date(str_replace("%", "", $file_suffix));
86         }
87
88
89         $logFile = file_get_contents($log_dir . $logfile . $date_suffix . $ext);
90
91         if ( $shouldMessageBeWritten )
92             $this->assertContains($messageWritten,$logFile);
93         else
94             $this->assertNotContains($messageWritten,$logFile);
95     }
96
97     public function testAssertLogging()
98     {
99         $GLOBALS['log']->setLevel('debug');
100         $GLOBALS['log']->assert('this was asserted true',true);
101         $GLOBALS['log']->assert('this was asserted false',false);
102
103         $config = SugarConfig::getInstance();
104         $ext = $config->get('logger.file.ext');
105         $logfile = $config->get('logger.file.name');
106         $log_dir = $config->get('log_dir');
107         $log_dir = $log_dir . (empty($log_dir)?'':'/');
108         $file_suffix = $config->get('logger.file.suffix');
109         $date_suffix = "";
110
111         if( !empty($file_suffix) )
112         {
113             $date_suffix = "_" . date(str_replace("%", "", $file_suffix));
114         }
115
116         $logFile = file_get_contents($log_dir . $logfile . $date_suffix . $ext);
117
118         $this->assertContains('[DEBUG] this was asserted false',$logFile);
119         $this->assertNotContains('[DEBUG] this was asserted true',$logFile);
120     }
121
122     /**
123      * @bug#50265: Parse the file size format string in the field for log size
124      */
125     public function providerFileSizes()
126     {
127         return array(
128             array("10MB", 10 * 1024 * 1024, true),
129             array("3KB", 3 * 1024, true),
130             array("3 kb", 3 * 1024, true),
131             array(" 2Mb", 2 * 1024 * 1024, true),
132             array("500 Bytes", 500 * 1, true),
133             array(".5Mb", 0.5 * 1024 * 1024, true),
134             array("0.7kb", 0.7 * 1024, true),
135             array(".0.5Mb", 0.5 * 1024 * 1024, false),
136             array("1GBtyes", 1024 * 1024 * 1024, true),
137             array("1 Bytes", 1 * 1, true),
138             array("1 FB", 1 * 1, false),
139         );
140     }
141
142     /**
143      * @dataProvider providerFileSizes
144      */
145     public function testFileSizes($size, $value, $assert_equal)
146     {
147
148         $units = array(
149             'b' => 1,
150             'k' => 1024,
151             'm' => 1024 * 1024,
152             'g' => 1024 * 1024 * 1024,
153         );
154
155
156         if( preg_match('/^\s*([0-9]+\.[0-9]+|\.?[0-9]+)\s*(k|m|g|b)(b?ytes)?/i', $size, $match) )
157         {
158             $file_size = $match[1] * $units[strtolower($match[2])];
159             if($assert_equal)
160             {
161                 $this->assertEquals($value, $file_size, "[DEBUG] File size parsed invalid");
162             }
163             else
164             {
165                 $this->assertNotEquals($value, $file_size, "[DEBUG] File size parsed invalid");
166             }
167
168         } else {
169             $this->assertFalse($assert_equal, '[DEBUG]Unitformat is out of the expression boundary.');
170         }
171
172     }
173
174    /**
175      * bug#: 50188
176      * Fix the Logger to create dateformat suffix in the file name
177      */
178     public function testFileName() {
179
180         $config = SugarConfig::getInstance();
181         $file_name = $config->get('logger.file.name');
182         $log_dir = $config->get('log_dir');
183         $log_dir = $log_dir . (empty($log_dir)?'':'/');
184         $ext = $config->get('logger.file.ext');
185
186         $file_suffix = $config->get('logger.file.suffix');
187         //reviewing the suffix in the global configuration stores in the valid format
188         $this->assertArrayHasKey($file_suffix, SugarLogger::$filename_suffix, 'File suffix type is invalid');
189
190         $invalid_file_suffix = "%d_y%s";
191         $this->assertArrayNotHasKey($invalid_file_suffix, SugarLogger::$filename_suffix, 'invalid format is included in the SugarLogger');
192
193         $suffix_date_part = "";
194         // IF there has been a suffix manually entered, let's include it,
195         // otherwise this should be empty so we get "sugarcrm.log" in the full_path
196         if( !empty( $file_suffix ) )
197             $suffix_date_part = "_" . date(str_replace("%", "", $file_suffix));
198
199         $full_path = $log_dir . $file_name . $suffix_date_part . $ext;
200         $logger = new SugarLogger;
201         //Asserting the file format the tester expects with the file format from the SugarLogger
202         $this->assertEquals($full_path, $logger->getLogFileNameWithPath(), "SugarLogger generates invalid log file format");
203
204         //If the logger returns correct file format, the file must exist in the path.
205         $this->assertFileExists($full_path, "SugarLogger generates invalid log file format");
206     }
207
208     /**
209      * @dataProvider providerWriteLogEntries
210      */
211     public function testWouldLog(
212         $currentLevel,
213         $logLevel,
214         $logMessage,
215         $shouldMessageBeWritten,
216         $messageWritten
217         )
218     {
219         $GLOBALS['log']->setLevel($currentLevel);
220         $this->assertEquals($shouldMessageBeWritten, $GLOBALS['log']->wouldLog($logLevel));
221
222     }
223 }