DbLogTest.php

Same filename in this branch
  1. 10 core/modules/dblog/tests/src/Functional/DbLogTest.php
Same filename and directory in other branches
  1. 9 core/modules/dblog/tests/src/Kernel/DbLogTest.php
  2. 9 core/modules/dblog/tests/src/Functional/DbLogTest.php
  3. 8.9.x core/modules/dblog/tests/src/Kernel/DbLogTest.php
  4. 8.9.x core/modules/dblog/tests/src/Functional/DbLogTest.php
  5. 11.x core/modules/dblog/tests/src/Kernel/DbLogTest.php
  6. 11.x core/modules/dblog/tests/src/Functional/DbLogTest.php

Namespace

Drupal\Tests\dblog\Kernel

File

core/modules/dblog/tests/src/Kernel/DbLogTest.php

View source
<?php

declare (strict_types=1);
namespace Drupal\Tests\dblog\Kernel;

use Drupal\Core\Database\Database;
use Drupal\KernelTests\KernelTestBase;
use Drupal\Tests\dblog\Functional\FakeLogEntries;

/**
 * Generate events and verify dblog entries.
 *
 * @group dblog
 */
class DbLogTest extends KernelTestBase {
  use FakeLogEntries;
  
  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'dblog',
    'system',
  ];
  
  /**
   * {@inheritdoc}
   */
  protected function setUp() : void {
    parent::setUp();
    $this->installSchema('dblog', [
      'watchdog',
    ]);
    $this->installConfig([
      'system',
    ]);
  }
  
  /**
   * Tests that cron correctly applies the database log row limit.
   */
  public function testDbLogCron() : void {
    $row_limit = 100;
    // Generate additional log entries.
    $this->generateLogEntries($row_limit + 10);
    // Verify that the database log row count exceeds the row limit.
    $count = Database::getConnection()->select('watchdog')
      ->countQuery()
      ->execute()
      ->fetchField();
    $this->assertGreaterThan($row_limit, $count, "Dblog row count of {$count} exceeds row limit of {$row_limit}");
    // Get the number of enabled modules. Cron adds a log entry for each module.
    $implementation_count = 0;
    \Drupal::moduleHandler()->invokeAllWith('cron', function (callable $hook, string $module) use (&$implementation_count) {
      $implementation_count++;
    });
    $cron_detailed_count = $this->runCron();
    $expected_count = $implementation_count + 2;
    $this->assertEquals($expected_count, $cron_detailed_count, "Cron added {$cron_detailed_count} of {$expected_count} new log entries");
    // Test disabling of detailed cron logging.
    $this->config('system.cron')
      ->set('logging', FALSE)
      ->save();
    $cron_count = $this->runCron();
    $this->assertEquals(1, $cron_count, "Cron added {$cron_count} of 1 new log entries");
  }
  
  /**
   * Tests that only valid placeholders are stored in the variables column.
   */
  public function testInvalidPlaceholders() : void {
    \Drupal::logger('my_module')->warning('Hello @string @array @object', [
      '@string' => '',
      '@array' => [],
      '@object' => new \stdClass(),
    ]);
    $variables = \Drupal::database()->select('watchdog', 'w')
      ->fields('w', [
      'variables',
    ])
      ->orderBy('wid', 'DESC')
      ->range(0, 1)
      ->execute()
      ->fetchField();
    $this->assertSame(serialize([
      '@string' => '',
    ]), $variables);
  }
  
  /**
   * Runs cron and returns number of new log entries.
   *
   * @return int
   *   Number of new watchdog entries.
   */
  private function runCron() {
    $connection = Database::getConnection();
    // Get last ID to compare against; log entries get deleted, so we can't
    // reliably add the number of newly created log entries to the current count
    // to measure number of log entries created by cron.
    $query = $connection->select('watchdog');
    $query->addExpression('MAX([wid])');
    $last_id = $query->execute()
      ->fetchField();
    // Run a cron job.
    $this->container
      ->get('cron')
      ->run();
    // Get last ID after cron was run.
    $query = $connection->select('watchdog');
    $query->addExpression('MAX([wid])');
    $current_id = $query->execute()
      ->fetchField();
    return $current_id - $last_id;
  }

}

Classes

Title Deprecated Summary
DbLogTest Generate events and verify dblog entries.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.