[ Index ]

PHP Cross Reference of moodle-2.8

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          $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  }


Generated: Fri Nov 28 20:29:05 2014 Cross-referenced by PHPXref 0.7.1