|
Moodle
2.2.1
http://www.collinsharper.com
|
00001 <?php 00002 00003 // This file is part of Moodle - http://moodle.org/ 00004 // 00005 // Moodle is free software: you can redistribute it and/or modify 00006 // it under the terms of the GNU General Public License as published by 00007 // the Free Software Foundation, either version 3 of the License, or 00008 // (at your option) any later version. 00009 // 00010 // Moodle is distributed in the hope that it will be useful, 00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 // GNU General Public License for more details. 00014 // 00015 // You should have received a copy of the GNU General Public License 00016 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 00017 00025 // Prevent direct access to this file 00026 if (!defined('MOODLE_INTERNAL')) { 00027 die('Direct access to this script is forbidden.'); 00028 } 00029 00030 // Include all the needed stuff 00031 require_once($CFG->dirroot . '/backup/util/interfaces/checksumable.class.php'); 00032 require_once($CFG->dirroot . '/backup/backup.class.php'); 00033 require_once($CFG->dirroot . '/backup/util/loggers/base_logger.class.php'); 00034 require_once($CFG->dirroot . '/backup/util/loggers/error_log_logger.class.php'); 00035 require_once($CFG->dirroot . '/backup/util/loggers/output_indented_logger.class.php'); 00036 require_once($CFG->dirroot . '/backup/util/loggers/database_logger.class.php'); 00037 require_once($CFG->dirroot . '/backup/util/loggers/file_logger.class.php'); 00038 require_once($CFG->dirroot . '/backup/util/factories/backup_factory.class.php'); 00039 00040 /* 00041 * backup_factory tests (all) 00042 */ 00043 class backup_factories_test extends UnitTestCase { 00044 00045 public static $includecoverage = array('backup/util/factories'); 00046 public static $excludecoverage = array('backup/util/factories/simpletest'); 00047 00048 protected $errorlogloggerlevel; // To store $CFG->backup_error_log_logger_level 00049 protected $fileloggerlevel; // To store level $CFG->backup_file_logger_level 00050 protected $databaseloggerlevel; // To store $CFG->backup_database_logger_level 00051 protected $outputindentedloggerlevel; // To store $CFG->backup_output_indented_logger_level 00052 protected $fileloggerextra; // To store $CFG->backup_file_logger_extra 00053 protected $fileloggerlevelextra; // To store level $CFG->backup_file_logger_level_extra 00054 protected $debugging; // To store $CFG->debug 00055 protected $debugdisplay; // To store $CFG->debugdisplay 00056 00057 function setUp() { 00058 global $CFG; 00059 parent::setUp(); 00060 // Avoid any file logger to be created, we'll restore original settings on tearDown() 00061 // Fetch the rest of CFG variables to be able to restore them after tests 00062 // and normalize default values 00063 $this->errorlogloggerlevel = isset($CFG->backup_error_log_logger_level) ? $CFG->backup_error_log_logger_level : null; 00064 $CFG->backup_error_log_logger_level = backup::LOG_NONE; 00065 00066 $this->outputindentedloggerlevel = isset($CFG->backup_output_indented_logger_level) ? $CFG->backup_output_indented_logger_level : null; 00067 $CFG->backup_output_indented_logger_level = backup::LOG_NONE; 00068 00069 $this->fileloggerlevel = isset($CFG->backup_file_logger_level) ? $CFG->backup_file_logger_level : null; 00070 $CFG->backup_file_logger_level = backup::LOG_NONE; 00071 00072 $this->databaseloggerlevel = isset($CFG->backup_database_logger_level) ? $CFG->backup_database_logger_level : null; 00073 $CFG->backup_database_logger_level = backup::LOG_NONE; 00074 00075 $this->fileloggerextra = isset($CFG->backup_file_logger_extra) ? $CFG->backup_file_logger_extra : null; 00076 unset($CFG->backup_file_logger_extra); 00077 $this->fileloggerlevelextra = isset($CFG->backup_file_logger_level_extra) ? $CFG->backup_file_logger_level_extra : null; 00078 $CFG->backup_file_logger_level_extra = backup::LOG_NONE; 00079 00080 $this->debugging = isset($CFG->debug) ? $CFG->debug : null; 00081 $this->debugdisplay = isset($CFG->debugdisplay) ? $CFG->debugdisplay : null; 00082 } 00083 00084 function tearDown() { 00085 global $CFG; 00086 // Restore original file_logger levels 00087 if ($this->errorlogloggerlevel !== null) { 00088 $CFG->backup_error_log_logger_level = $this->errorlogloggerlevel; 00089 } else { 00090 unset($CFG->backup_error_log_logger_level); 00091 } 00092 00093 if ($this->outputindentedloggerlevel !== null) { 00094 $CFG->backup_output_indented_logger_level = $this->outputindentedloggerlevel; 00095 } else { 00096 unset($CFG->backup_output_indented_logger_level); 00097 } 00098 00099 if ($this->fileloggerlevel !== null) { 00100 $CFG->backup_file_logger_level = $this->fileloggerlevel; 00101 } else { 00102 unset($CFG->backup_file_logger_level); 00103 } 00104 00105 if ($this->databaseloggerlevel !== null) { 00106 $CFG->backup_database_logger_level = $this->databaseloggerlevel; 00107 } else { 00108 unset($CFG->backup_database_logger_level); 00109 } 00110 00111 if ($this->fileloggerextra !== null) { 00112 $CFG->backup_file_logger_extra = $this->fileloggerextra; 00113 } else { 00114 unset($CFG->backup_file_logger_extra); 00115 } 00116 if ($this->fileloggerlevelextra !== null) { 00117 $CFG->backup_file_logger_level_extra = $this->fileloggerlevelextra; 00118 } else { 00119 unset($CFG->backup_file_logger_level_extra); 00120 } 00121 // Restore the rest of $CFG settings 00122 if ($this->debugging !== null) { 00123 $CFG->debug = $this->debugging; 00124 } else { 00125 unset($CFG->debug); 00126 } 00127 if ($this->debugdisplay !== null) { 00128 $CFG->debugdisplay = $this->debugdisplay; 00129 } else { 00130 unset($CFG->debugdisplay); 00131 } 00132 parent::tearDown(); 00133 } 00134 00135 00136 /* 00137 * test get_logger_chain() method 00138 */ 00139 function test_backup_factory() { 00140 global $CFG; 00141 00142 // Default instantiate, all levels = backup::LOG_NONE 00143 // With debugdisplay enabled 00144 $CFG->debugdisplay = true; 00145 $logger1 = backup_factory::get_logger_chain(backup::INTERACTIVE_YES, backup::EXECUTION_INMEDIATE, 'test'); 00146 $this->assertTrue($logger1 instanceof error_log_logger); // 1st logger is error_log_logger 00147 $this->assertEqual($logger1->get_level(), backup::LOG_NONE); 00148 $logger2 = $logger1->get_next(); 00149 $this->assertTrue($logger2 instanceof output_indented_logger); // 2nd logger is output_indented_logger 00150 $this->assertEqual($logger2->get_level(), backup::LOG_NONE); 00151 $logger3 = $logger2->get_next(); 00152 $this->assertTrue($logger3 instanceof file_logger); // 3rd logger is file_logger 00153 $this->assertEqual($logger3->get_level(), backup::LOG_NONE); 00154 $logger4 = $logger3->get_next(); 00155 $this->assertTrue($logger4 instanceof database_logger); // 4th logger is database_logger 00156 $this->assertEqual($logger4->get_level(), backup::LOG_NONE); 00157 $logger5 = $logger4->get_next(); 00158 $this->assertTrue($logger5 === null); 00159 00160 // With debugdisplay disabled 00161 $CFG->debugdisplay = false; 00162 $logger1 = backup_factory::get_logger_chain(backup::INTERACTIVE_YES, backup::EXECUTION_INMEDIATE, 'test'); 00163 $this->assertTrue($logger1 instanceof error_log_logger); // 1st logger is error_log_logger 00164 $this->assertEqual($logger1->get_level(), backup::LOG_NONE); 00165 $logger2 = $logger1->get_next(); 00166 $this->assertTrue($logger2 instanceof file_logger); // 2nd logger is file_logger 00167 $this->assertEqual($logger2->get_level(), backup::LOG_NONE); 00168 $logger3 = $logger2->get_next(); 00169 $this->assertTrue($logger3 instanceof database_logger); // 3rd logger is database_logger 00170 $this->assertEqual($logger3->get_level(), backup::LOG_NONE); 00171 $logger4 = $logger3->get_next(); 00172 $this->assertTrue($logger4 === null); 00173 00174 // Instantiate with debugging enabled and $CFG->backup_error_log_logger_level not set 00175 $CFG->debugdisplay = true; 00176 $CFG->debug = DEBUG_DEVELOPER; 00177 unset($CFG->backup_error_log_logger_level); 00178 $logger1 = backup_factory::get_logger_chain(backup::INTERACTIVE_YES, backup::EXECUTION_INMEDIATE, 'test'); 00179 $this->assertTrue($logger1 instanceof error_log_logger); // 1st logger is error_log_logger 00180 $this->assertEqual($logger1->get_level(), backup::LOG_DEBUG); // and must have backup::LOG_DEBUG level 00181 // Set $CFG->backup_error_log_logger_level to backup::LOG_WARNING and test again 00182 $CFG->backup_error_log_logger_level = backup::LOG_WARNING; 00183 $logger1 = backup_factory::get_logger_chain(backup::INTERACTIVE_YES, backup::EXECUTION_INMEDIATE, 'test'); 00184 $this->assertTrue($logger1 instanceof error_log_logger); // 1st logger is error_log_logger 00185 $this->assertEqual($logger1->get_level(), backup::LOG_WARNING); // and must have backup::LOG_WARNING level 00186 00187 // Instantiate in non-interactive mode, output_indented_logger must be out 00188 $logger1 = backup_factory::get_logger_chain(backup::INTERACTIVE_NO, backup::EXECUTION_INMEDIATE, 'test'); 00189 $logger2 = $logger1->get_next(); 00190 $this->assertTrue($logger2 instanceof file_logger); // 2nd logger is file_logger (output_indented_logger skiped) 00191 00192 // Define extra file logger and instantiate, should be 5th and last logger 00193 $CFG->backup_file_logger_extra = '/tmp/test.html'; 00194 $CFG->backup_file_logger_level_extra = backup::LOG_NONE; 00195 $logger1 = backup_factory::get_logger_chain(backup::INTERACTIVE_YES, backup::EXECUTION_INMEDIATE, 'test'); 00196 $logger2 = $logger1->get_next(); 00197 $logger3 = $logger2->get_next(); 00198 $logger4 = $logger3->get_next(); 00199 $logger5 = $logger4->get_next(); 00200 $this->assertTrue($logger5 instanceof file_logger); // 5rd logger is file_logger (extra) 00201 $this->assertEqual($logger3->get_level(), backup::LOG_NONE); 00202 $logger6 = $logger5->get_next(); 00203 $this->assertTrue($logger6 === null); 00204 } 00205 }