DbLogTest.php

Same filename in this branch
  1. 8.9.x core/modules/dblog/tests/src/Functional/DbLogTest.php
Same filename in other branches
  1. 9 core/modules/dblog/tests/src/Kernel/DbLogTest.php
  2. 9 core/modules/dblog/tests/src/Functional/DbLogTest.php
  3. 10 core/modules/dblog/tests/src/Kernel/DbLogTest.php
  4. 10 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

namespace Drupal\Tests\dblog\Kernel;

use Drupal\Component\Render\FormattableMarkup;
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() {
        parent::setUp();
        $this->installSchema('dblog', [
            'watchdog',
        ]);
        $this->installSchema('system', [
            'key_value_expire',
            'sequences',
        ]);
        $this->installConfig([
            'system',
        ]);
    }
    
    /**
     * Tests that cron correctly applies the database log row limit.
     */
    public function testDbLogCron() {
        $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, new FormattableMarkup('Dblog row count of @count exceeds row limit of @limit', [
            '@count' => $count,
            '@limit' => $row_limit,
        ]));
        // Get the number of enabled modules. Cron adds a log entry for each module.
        $list = $this->container
            ->get('module_handler')
            ->getImplementations('cron');
        $module_count = count($list);
        $cron_detailed_count = $this->runCron();
        $this->assertEquals($module_count + 2, $cron_detailed_count, new FormattableMarkup('Cron added @count of @expected new log entries', [
            '@count' => $cron_detailed_count,
            '@expected' => $module_count + 2,
        ]));
        // Test disabling of detailed cron logging.
        $this->config('system.cron')
            ->set('logging', 0)
            ->save();
        $cron_count = $this->runCron();
        $this->assertEquals(1, $cron_count, new FormattableMarkup('Cron added @count of @expected new log entries', [
            '@count' => $cron_count,
            '@expected' => 1,
        ]));
    }
    
    /**
     * 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.