[ Index ] |
PHP Cross Reference of moodle-2.8 |
[Summary view] [Print] [Text view]
1 <?php 2 // This file is part of Moodle - http://moodle.org/ 3 // 4 // Moodle is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // Moodle is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 16 17 /** 18 * External database log store tests. 19 * 20 * @package logstore_database 21 * @copyright 2014 Petr Skoda {@link http://skodak.org/} 22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 23 */ 24 25 defined('MOODLE_INTERNAL') || die(); 26 27 require_once (__DIR__ . '/fixtures/event.php'); 28 require_once (__DIR__ . '/fixtures/store.php'); 29 30 class logstore_database_store_testcase extends advanced_testcase { 31 public function test_log_writing() { 32 global $DB, $CFG; 33 $this->resetAfterTest(); 34 $this->preventResetByRollback(); // Logging waits till the transaction gets committed. 35 36 $dbman = $DB->get_manager(); 37 $this->assertTrue($dbman->table_exists('logstore_standard_log')); 38 $DB->delete_records('logstore_standard_log'); 39 40 $this->setAdminUser(); 41 $user1 = $this->getDataGenerator()->create_user(); 42 $user2 = $this->getDataGenerator()->create_user(); 43 $course1 = $this->getDataGenerator()->create_course(); 44 $module1 = $this->getDataGenerator()->create_module('resource', array('course' => $course1)); 45 $course2 = $this->getDataGenerator()->create_course(); 46 $module2 = $this->getDataGenerator()->create_module('resource', array('course' => $course2)); 47 48 // Test all plugins are disabled by this command. 49 set_config('enabled_stores', '', 'tool_log'); 50 $manager = get_log_manager(true); 51 $stores = $manager->get_readers(); 52 $this->assertCount(0, $stores); 53 54 // Fake the settings, we will abuse the standard plugin table here... 55 $parts = explode('_', get_class($DB)); 56 set_config('dbdriver', $parts[1] . '/' . $parts[0], 'logstore_database'); 57 set_config('dbhost', $CFG->dbhost, 'logstore_database'); 58 set_config('dbuser', $CFG->dbuser, 'logstore_database'); 59 set_config('dbpass', $CFG->dbpass, 'logstore_database'); 60 set_config('dbname', $CFG->dbname, 'logstore_database'); 61 set_config('dbtable', $CFG->prefix . 'logstore_standard_log', 'logstore_database'); 62 if (!empty($CFG->dboptions['dbpersist'])) { 63 set_config('dbpersist', 1, 'logstore_database'); 64 } else { 65 set_config('dbpersist', 0, 'logstore_database'); 66 } 67 if (!empty($CFG->dboptions['dbsocket'])) { 68 set_config('dbsocket', $CFG->dboptions['dbsocket'], 'logstore_database'); 69 } else { 70 set_config('dbsocket', '', 'logstore_database'); 71 } 72 if (!empty($CFG->dboptions['dbport'])) { 73 set_config('dbport', $CFG->dboptions['dbport'], 'logstore_database'); 74 } else { 75 set_config('dbport', '', 'logstore_database'); 76 } 77 if (!empty($CFG->dboptions['dbschema'])) { 78 set_config('dbschema', $CFG->dboptions['dbschema'], 'logstore_database'); 79 } else { 80 set_config('dbschema', '', 'logstore_database'); 81 } 82 if (!empty($CFG->dboptions['dbcollation'])) { 83 set_config('dbcollation', $CFG->dboptions['dbcollation'], 'logstore_database'); 84 } else { 85 set_config('dbcollation', '', 'logstore_database'); 86 } 87 88 // Enable logging plugin. 89 set_config('enabled_stores', 'logstore_database', 'tool_log'); 90 set_config('buffersize', 0, 'logstore_database'); 91 set_config('logguests', 1, 'logstore_database'); 92 $manager = get_log_manager(true); 93 94 $stores = $manager->get_readers(); 95 $this->assertCount(1, $stores); 96 $this->assertEquals(array('logstore_database'), array_keys($stores)); 97 $store = $stores['logstore_database']; 98 $this->assertInstanceOf('logstore_database\log\store', $store); 99 $this->assertInstanceOf('tool_log\log\writer', $store); 100 $this->assertTrue($store->is_logging()); 101 102 $logs = $DB->get_records('logstore_standard_log', array(), 'id ASC'); 103 $this->assertCount(0, $logs); 104 105 $this->setCurrentTimeStart(); 106 107 $this->setUser(0); 108 $event1 = \logstore_database\event\unittest_executed::create( 109 array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10))); 110 $event1->trigger(); 111 112 $logs = $DB->get_records('logstore_standard_log', array(), 'id ASC'); 113 $this->assertCount(1, $logs); 114 115 $log1 = reset($logs); 116 unset($log1->id); 117 $log1->other = unserialize($log1->other); 118 $log1 = (array)$log1; 119 $data = $event1->get_data(); 120 $data['origin'] = 'cli'; 121 $data['ip'] = null; 122 $data['realuserid'] = null; 123 $this->assertEquals($data, $log1); 124 125 $this->setAdminUser(); 126 \core\session\manager::loginas($user1->id, context_system::instance()); 127 $this->assertEquals(2, $DB->count_records('logstore_standard_log')); 128 129 $event2 = \logstore_database\event\unittest_executed::create( 130 array('context' => context_module::instance($module2->cmid), 'other' => array('sample' => 6, 'xx' => 9))); 131 $event2->trigger(); 132 133 \core\session\manager::init_empty_session(); 134 $this->assertFalse(\core\session\manager::is_loggedinas()); 135 136 $logs = $DB->get_records('logstore_standard_log', array(), 'id ASC'); 137 $this->assertCount(3, $logs); 138 array_shift($logs); 139 $log2 = array_shift($logs); 140 $this->assertSame('\core\event\user_loggedinas', $log2->eventname); 141 142 $log3 = array_shift($logs); 143 unset($log3->id); 144 $log3->other = unserialize($log3->other); 145 $log3 = (array)$log3; 146 $data = $event2->get_data(); 147 $data['origin'] = 'cli'; 148 $data['ip'] = null; 149 $data['realuserid'] = 2; 150 $this->assertEquals($data, $log3); 151 152 // Test reading. 153 $this->assertSame(3, $store->get_events_select_count('', array())); 154 $events = $store->get_events_select('', array(), 'timecreated ASC', 0, 0); // Is actually sorted by "timecreated ASC, id ASC". 155 $this->assertCount(3, $events); 156 $resev1 = array_shift($events); 157 array_shift($events); 158 $resev2 = array_shift($events); 159 $this->assertEquals($event1->get_data(), $resev1->get_data()); 160 $this->assertEquals($event2->get_data(), $resev2->get_data()); 161 162 // Test buffering. 163 set_config('buffersize', 3, 'logstore_database'); 164 $manager = get_log_manager(true); 165 $stores = $manager->get_readers(); 166 /** @var \logstore_database\log\store $store */ 167 $store = $stores['logstore_database']; 168 $DB->delete_records('logstore_standard_log'); 169 170 \logstore_database\event\unittest_executed::create( 171 array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger(); 172 $this->assertEquals(0, $DB->count_records('logstore_standard_log')); 173 \logstore_database\event\unittest_executed::create( 174 array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger(); 175 $this->assertEquals(0, $DB->count_records('logstore_standard_log')); 176 $store->flush(); 177 $this->assertEquals(2, $DB->count_records('logstore_standard_log')); 178 \logstore_database\event\unittest_executed::create( 179 array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger(); 180 $this->assertEquals(2, $DB->count_records('logstore_standard_log')); 181 \logstore_database\event\unittest_executed::create( 182 array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger(); 183 $this->assertEquals(2, $DB->count_records('logstore_standard_log')); 184 \logstore_database\event\unittest_executed::create( 185 array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger(); 186 $this->assertEquals(5, $DB->count_records('logstore_standard_log')); 187 \logstore_database\event\unittest_executed::create( 188 array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger(); 189 $this->assertEquals(5, $DB->count_records('logstore_standard_log')); 190 \logstore_database\event\unittest_executed::create( 191 array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger(); 192 $this->assertEquals(5, $DB->count_records('logstore_standard_log')); 193 \logstore_database\event\unittest_executed::create( 194 array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger(); 195 $this->assertEquals(8, $DB->count_records('logstore_standard_log')); 196 197 // Test guest logging setting. 198 set_config('logguests', 0, 'logstore_database'); 199 set_config('buffersize', 0, 'logstore_database'); 200 get_log_manager(true); 201 $DB->delete_records('logstore_standard_log'); 202 get_log_manager(true); 203 204 $this->setUser(null); 205 \logstore_database\event\unittest_executed::create( 206 array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger(); 207 $this->assertEquals(0, $DB->count_records('logstore_standard_log')); 208 209 $this->setGuestUser(); 210 \logstore_database\event\unittest_executed::create( 211 array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger(); 212 $this->assertEquals(0, $DB->count_records('logstore_standard_log')); 213 214 $this->setUser($user1); 215 \logstore_database\event\unittest_executed::create( 216 array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger(); 217 $this->assertEquals(1, $DB->count_records('logstore_standard_log')); 218 219 $this->setUser($user2); 220 \logstore_database\event\unittest_executed::create( 221 array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger(); 222 $this->assertEquals(2, $DB->count_records('logstore_standard_log')); 223 224 set_config('enabled_stores', '', 'tool_log'); 225 get_log_manager(true); 226 } 227 228 /** 229 * Test method is_event_ignored. 230 */ 231 public function test_is_event_ignored() { 232 $this->resetAfterTest(); 233 234 // Test guest filtering. 235 set_config('logguests', 0, 'logstore_database'); 236 $this->setGuestUser(); 237 $event = \logstore_database\event\unittest_executed::create( 238 array('context' => context_system::instance(), 'other' => array('sample' => 5, 'xx' => 10))); 239 $logmanager = get_log_manager(); 240 $store = new \logstore_database\test\store($logmanager); 241 $this->assertTrue($store->is_event_ignored($event)); 242 243 set_config('logguests', 1, 'logstore_database'); 244 $store = new \logstore_database\test\store($logmanager); // Reload. 245 $this->assertFalse($store->is_event_ignored($event)); 246 247 // Test action/level filtering. 248 set_config('includelevels', '', 'logstore_database'); 249 set_config('includeactions', '', 'logstore_database'); 250 $store = new \logstore_database\test\store($logmanager); // Reload. 251 $this->assertTrue($store->is_event_ignored($event)); 252 253 set_config('includelevels', '0,1', 'logstore_database'); 254 $store = new \logstore_database\test\store($logmanager); // Reload. 255 $this->assertTrue($store->is_event_ignored($event)); 256 257 set_config('includelevels', '0,1,2', 'logstore_database'); 258 $store = new \logstore_database\test\store($logmanager); // Reload. 259 $this->assertFalse($store->is_event_ignored($event)); 260 261 set_config('includelevels', '', 'logstore_database'); 262 set_config('includeactions', 'c,r,d', 'logstore_database'); 263 $store = new \logstore_database\test\store($logmanager); // Reload. 264 $this->assertTrue($store->is_event_ignored($event)); 265 266 set_config('includeactions', 'c,r,u,d', 'logstore_database'); 267 $store = new \logstore_database\test\store($logmanager); // Reload. 268 $this->assertFalse($store->is_event_ignored($event)); 269 } 270 271 /** 272 * Test logmanager::get_supported_reports returns all reports that require this store. 273 */ 274 public function test_get_supported_reports() { 275 $logmanager = get_log_manager(); 276 $allreports = \core_component::get_plugin_list('report'); 277 278 $supportedreports = array( 279 'report_log' => '/report/log', 280 'report_loglive' => '/report/loglive' 281 ); 282 283 // Make sure all supported reports are installed. 284 $expectedreports = array_keys(array_intersect_key($allreports, $supportedreports)); 285 $reports = $logmanager->get_supported_reports('logstore_database'); 286 $reports = array_keys($reports); 287 foreach ($expectedreports as $expectedreport) { 288 $this->assertContains($expectedreport, $reports); 289 } 290 } 291 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 20:29:05 2014 | Cross-referenced by PHPXref 0.7.1 |