[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/admin/tool/log/store/database/tests/ -> store_test.php (source)

   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          set_config('dbdriver', $CFG->dblibrary . '/' . $CFG->dbtype, 'logstore_database');
  56          set_config('dbhost', $CFG->dbhost, 'logstore_database');
  57          set_config('dbuser', $CFG->dbuser, 'logstore_database');
  58          set_config('dbpass', $CFG->dbpass, 'logstore_database');
  59          set_config('dbname', $CFG->dbname, 'logstore_database');
  60          set_config('dbtable', $CFG->prefix . 'logstore_standard_log', 'logstore_database');
  61          if (!empty($CFG->dboptions['dbpersist'])) {
  62              set_config('dbpersist', 1, 'logstore_database');
  63          } else {
  64              set_config('dbpersist', 0, 'logstore_database');
  65          }
  66          if (!empty($CFG->dboptions['dbsocket'])) {
  67              set_config('dbsocket', $CFG->dboptions['dbsocket'], 'logstore_database');
  68          } else {
  69              set_config('dbsocket', '', 'logstore_database');
  70          }
  71          if (!empty($CFG->dboptions['dbport'])) {
  72              set_config('dbport', $CFG->dboptions['dbport'], 'logstore_database');
  73          } else {
  74              set_config('dbport', '', 'logstore_database');
  75          }
  76          if (!empty($CFG->dboptions['dbschema'])) {
  77              set_config('dbschema', $CFG->dboptions['dbschema'], 'logstore_database');
  78          } else {
  79              set_config('dbschema', '', 'logstore_database');
  80          }
  81          if (!empty($CFG->dboptions['dbcollation'])) {
  82              set_config('dbcollation', $CFG->dboptions['dbcollation'], 'logstore_database');
  83          } else {
  84              set_config('dbcollation', '', 'logstore_database');
  85          }
  86  
  87          // Enable logging plugin.
  88          set_config('enabled_stores', 'logstore_database', 'tool_log');
  89          set_config('buffersize', 0, 'logstore_database');
  90          set_config('logguests', 1, 'logstore_database');
  91          $manager = get_log_manager(true);
  92  
  93          $stores = $manager->get_readers();
  94          $this->assertCount(1, $stores);
  95          $this->assertEquals(array('logstore_database'), array_keys($stores));
  96          $store = $stores['logstore_database'];
  97          $this->assertInstanceOf('logstore_database\log\store', $store);
  98          $this->assertInstanceOf('tool_log\log\writer', $store);
  99          $this->assertTrue($store->is_logging());
 100  
 101          $logs = $DB->get_records('logstore_standard_log', array(), 'id ASC');
 102          $this->assertCount(0, $logs);
 103  
 104          $this->setCurrentTimeStart();
 105  
 106          $this->setUser(0);
 107          $event1 = \logstore_database\event\unittest_executed::create(
 108              array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)));
 109          $event1->trigger();
 110  
 111          $logs = $DB->get_records('logstore_standard_log', array(), 'id ASC');
 112          $this->assertCount(1, $logs);
 113  
 114          $log1 = reset($logs);
 115          unset($log1->id);
 116          $log1->other = unserialize($log1->other);
 117          $log1 = (array)$log1;
 118          $data = $event1->get_data();
 119          $data['origin'] = 'cli';
 120          $data['ip'] = null;
 121          $data['realuserid'] = null;
 122          $this->assertEquals($data, $log1);
 123  
 124          $this->setAdminUser();
 125          \core\session\manager::loginas($user1->id, context_system::instance());
 126          $this->assertEquals(2, $DB->count_records('logstore_standard_log'));
 127  
 128          $event2 = \logstore_database\event\unittest_executed::create(
 129              array('context' => context_module::instance($module2->cmid), 'other' => array('sample' => 6, 'xx' => 9)));
 130          $event2->trigger();
 131  
 132          \core\session\manager::init_empty_session();
 133          $this->assertFalse(\core\session\manager::is_loggedinas());
 134  
 135          $logs = $DB->get_records('logstore_standard_log', array(), 'id ASC');
 136          $this->assertCount(3, $logs);
 137          array_shift($logs);
 138          $log2 = array_shift($logs);
 139          $this->assertSame('\core\event\user_loggedinas', $log2->eventname);
 140  
 141          $log3 = array_shift($logs);
 142          unset($log3->id);
 143          $log3->other = unserialize($log3->other);
 144          $log3 = (array)$log3;
 145          $data = $event2->get_data();
 146          $data['origin'] = 'cli';
 147          $data['ip'] = null;
 148          $data['realuserid'] = 2;
 149          $this->assertEquals($data, $log3);
 150  
 151          // Test reading.
 152          $this->assertSame(3, $store->get_events_select_count('', array()));
 153          $events = $store->get_events_select('', array(), 'timecreated ASC', 0, 0); // Is actually sorted by "timecreated ASC, id ASC".
 154          $this->assertCount(3, $events);
 155          $resev1 = array_shift($events);
 156          array_shift($events);
 157          $resev2 = array_shift($events);
 158          $this->assertEquals($event1->get_data(), $resev1->get_data());
 159          $this->assertEquals($event2->get_data(), $resev2->get_data());
 160  
 161          // Test buffering.
 162          set_config('buffersize', 3, 'logstore_database');
 163          $manager = get_log_manager(true);
 164          $stores = $manager->get_readers();
 165          /** @var \logstore_database\log\store $store */
 166          $store = $stores['logstore_database'];
 167          $DB->delete_records('logstore_standard_log');
 168  
 169          \logstore_database\event\unittest_executed::create(
 170              array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
 171          $this->assertEquals(0, $DB->count_records('logstore_standard_log'));
 172          \logstore_database\event\unittest_executed::create(
 173              array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
 174          $this->assertEquals(0, $DB->count_records('logstore_standard_log'));
 175          $store->flush();
 176          $this->assertEquals(2, $DB->count_records('logstore_standard_log'));
 177          \logstore_database\event\unittest_executed::create(
 178              array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
 179          $this->assertEquals(2, $DB->count_records('logstore_standard_log'));
 180          \logstore_database\event\unittest_executed::create(
 181              array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
 182          $this->assertEquals(2, $DB->count_records('logstore_standard_log'));
 183          \logstore_database\event\unittest_executed::create(
 184              array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
 185          $this->assertEquals(5, $DB->count_records('logstore_standard_log'));
 186          \logstore_database\event\unittest_executed::create(
 187              array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
 188          $this->assertEquals(5, $DB->count_records('logstore_standard_log'));
 189          \logstore_database\event\unittest_executed::create(
 190              array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
 191          $this->assertEquals(5, $DB->count_records('logstore_standard_log'));
 192          \logstore_database\event\unittest_executed::create(
 193              array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
 194          $this->assertEquals(8, $DB->count_records('logstore_standard_log'));
 195  
 196          // Test guest logging setting.
 197          set_config('logguests', 0, 'logstore_database');
 198          set_config('buffersize', 0, 'logstore_database');
 199          get_log_manager(true);
 200          $DB->delete_records('logstore_standard_log');
 201          get_log_manager(true);
 202  
 203          $this->setUser(null);
 204          \logstore_database\event\unittest_executed::create(
 205              array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
 206          $this->assertEquals(0, $DB->count_records('logstore_standard_log'));
 207  
 208          $this->setGuestUser();
 209          \logstore_database\event\unittest_executed::create(
 210              array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
 211          $this->assertEquals(0, $DB->count_records('logstore_standard_log'));
 212  
 213          $this->setUser($user1);
 214          \logstore_database\event\unittest_executed::create(
 215              array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
 216          $this->assertEquals(1, $DB->count_records('logstore_standard_log'));
 217  
 218          $this->setUser($user2);
 219          \logstore_database\event\unittest_executed::create(
 220              array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
 221          $this->assertEquals(2, $DB->count_records('logstore_standard_log'));
 222  
 223          set_config('enabled_stores', '', 'tool_log');
 224          get_log_manager(true);
 225      }
 226  
 227      /**
 228       * Test method is_event_ignored.
 229       */
 230      public function test_is_event_ignored() {
 231          $this->resetAfterTest();
 232  
 233          // Test guest filtering.
 234          set_config('logguests', 0, 'logstore_database');
 235          $this->setGuestUser();
 236          $event = \logstore_database\event\unittest_executed::create(
 237                  array('context' => context_system::instance(), 'other' => array('sample' => 5, 'xx' => 10)));
 238          $logmanager = get_log_manager();
 239          $store = new \logstore_database\test\store($logmanager);
 240          $this->assertTrue($store->is_event_ignored($event));
 241  
 242          set_config('logguests', 1, 'logstore_database');
 243          $store = new \logstore_database\test\store($logmanager); // Reload.
 244          $this->assertFalse($store->is_event_ignored($event));
 245  
 246          // Test action/level filtering.
 247          set_config('includelevels', '', 'logstore_database');
 248          set_config('includeactions', '', 'logstore_database');
 249          $store = new \logstore_database\test\store($logmanager); // Reload.
 250          $this->assertTrue($store->is_event_ignored($event));
 251  
 252          set_config('includelevels', '0,1', 'logstore_database');
 253          $store = new \logstore_database\test\store($logmanager); // Reload.
 254          $this->assertTrue($store->is_event_ignored($event));
 255  
 256          set_config('includelevels', '0,1,2', 'logstore_database');
 257          $store = new \logstore_database\test\store($logmanager); // Reload.
 258          $this->assertFalse($store->is_event_ignored($event));
 259  
 260          set_config('includelevels', '', 'logstore_database');
 261          set_config('includeactions', 'c,r,d', 'logstore_database');
 262          $store = new \logstore_database\test\store($logmanager); // Reload.
 263          $this->assertTrue($store->is_event_ignored($event));
 264  
 265          set_config('includeactions', 'c,r,u,d', 'logstore_database');
 266          $store = new \logstore_database\test\store($logmanager); // Reload.
 267          $this->assertFalse($store->is_event_ignored($event));
 268      }
 269  
 270      /**
 271       * Test logmanager::get_supported_reports returns all reports that require this store.
 272       */
 273      public function test_get_supported_reports() {
 274          $logmanager = get_log_manager();
 275          $allreports = \core_component::get_plugin_list('report');
 276  
 277          $supportedreports = array(
 278              'report_log' => '/report/log',
 279              'report_loglive' => '/report/loglive'
 280          );
 281  
 282          // Make sure all supported reports are installed.
 283          $expectedreports = array_keys(array_intersect_key($allreports, $supportedreports));
 284          $reports = $logmanager->get_supported_reports('logstore_database');
 285          $reports = array_keys($reports);
 286          foreach ($expectedreports as $expectedreport) {
 287              $this->assertContains($expectedreport, $reports);
 288          }
 289      }
 290  }


Generated: Thu Aug 11 10:00:09 2016 Cross-referenced by PHPXref 0.7.1