2 /*********************************************************************************
3 * SugarCRM Community Edition is a customer relationship management program developed by
4 * SugarCRM, Inc. Copyright (C) 2004-2012 SugarCRM Inc.
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.
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
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
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.
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.
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 ********************************************************************************/
38 class SugarLoggerTest extends Sugar_PHPUnit_Framework_TestCase
40 public function tearDown()
42 // reset the logger level
43 $level = SugarConfig::getInstance()->get('logger.level');
45 $GLOBALS['log']->setLevel($level);
48 public function providerWriteLogEntries()
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'),
62 * @dataProvider providerWriteLogEntries
64 public function testWriteLogEntries(
68 $shouldMessageBeWritten,
72 $GLOBALS['log']->setLevel($currentLevel);
73 $GLOBALS['log']->$logLevel($logMessage);
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');
83 if( !empty($file_suffix) )
85 $date_suffix = "_" . date(str_replace("%", "", $file_suffix));
89 $logFile = file_get_contents($log_dir . $logfile . $date_suffix . $ext);
91 if ( $shouldMessageBeWritten )
92 $this->assertContains($messageWritten,$logFile);
94 $this->assertNotContains($messageWritten,$logFile);
97 public function testAssertLogging()
99 $GLOBALS['log']->setLevel('debug');
100 $GLOBALS['log']->assert('this was asserted true',true);
101 $GLOBALS['log']->assert('this was asserted false',false);
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');
111 if( !empty($file_suffix) )
113 $date_suffix = "_" . date(str_replace("%", "", $file_suffix));
116 $logFile = file_get_contents($log_dir . $logfile . $date_suffix . $ext);
118 $this->assertContains('[DEBUG] this was asserted false',$logFile);
119 $this->assertNotContains('[DEBUG] this was asserted true',$logFile);
123 * @bug#50265: Parse the file size format string in the field for log size
125 public function providerFileSizes()
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),
143 * @dataProvider providerFileSizes
145 public function testFileSizes($size, $value, $assert_equal)
152 'g' => 1024 * 1024 * 1024,
156 if( preg_match('/^\s*([0-9]+\.[0-9]+|\.?[0-9]+)\s*(k|m|g|b)(b?ytes)?/i', $size, $match) )
158 $file_size = $match[1] * $units[strtolower($match[2])];
161 $this->assertEquals($value, $file_size, "[DEBUG] File size parsed invalid");
165 $this->assertNotEquals($value, $file_size, "[DEBUG] File size parsed invalid");
169 $this->assertFalse($assert_equal, '[DEBUG]Unitformat is out of the expression boundary.');
176 * Fix the Logger to create dateformat suffix in the file name
178 public function testFileName() {
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');
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');
190 $invalid_file_suffix = "%d_y%s";
191 $this->assertArrayNotHasKey($invalid_file_suffix, SugarLogger::$filename_suffix, 'invalid format is included in the SugarLogger');
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));
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");
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");
209 * @dataProvider providerWriteLogEntries
211 public function testWouldLog(
215 $shouldMessageBeWritten,
219 $GLOBALS['log']->setLevel($currentLevel);
220 $this->assertEquals($shouldMessageBeWritten, $GLOBALS['log']->wouldLog($logLevel));