You are here

class SyslogTest in Drupal 10

Same name in this branch
  1. 10 core/modules/syslog/tests/src/Functional/SyslogTest.php \Drupal\Tests\syslog\Functional\SyslogTest
  2. 10 core/modules/syslog/tests/src/Kernel/SyslogTest.php \Drupal\Tests\syslog\Kernel\SyslogTest
  3. 10 core/modules/syslog/tests/modules/syslog_test/src/Logger/SysLogTest.php \Drupal\syslog_test\Logger\SysLogTest
Same name and namespace in other branches
  1. 8 core/modules/syslog/tests/src/Kernel/SyslogTest.php \Drupal\Tests\syslog\Kernel\SyslogTest
  2. 9 core/modules/syslog/tests/src/Kernel/SyslogTest.php \Drupal\Tests\syslog\Kernel\SyslogTest

Test syslog logger functionality.

@group syslog @coversDefaultClass \Drupal\syslog\Logger\SysLog

Hierarchy

Expanded class hierarchy of SyslogTest

File

core/modules/syslog/tests/src/Kernel/SyslogTest.php, line 14

Namespace

Drupal\Tests\syslog\Kernel
View source
class SyslogTest extends KernelTestBase {
  protected static $modules = [
    'syslog',
    'syslog_test',
  ];

  /**
   * {@inheritdoc}
   */
  protected function setUp() : void {
    parent::setUp();
    $this
      ->installConfig([
      'syslog',
    ]);
  }

  /**
   * @covers ::log
   */
  public function testSyslogWriting() {
    $request = Request::create('/page-not-found', 'GET', [], [], [], [
      'REMOTE_ADDR' => '1.2.3.4',
    ]);
    $request->headers
      ->set('Referer', 'other-site');
    \Drupal::requestStack()
      ->push($request);
    $user = $this
      ->getMockBuilder('Drupal\\Core\\Session\\AccountInterface')
      ->getMock();
    $user
      ->method('id')
      ->willReturn(42);
    $this->container
      ->set('current_user', $user);
    \Drupal::logger('my_module')
      ->warning('My warning message.', [
      'link' => '/my-link',
    ]);
    $log_filename = $this->container
      ->get('file_system')
      ->realpath('public://syslog.log');
    $logs = explode(PHP_EOL, file_get_contents($log_filename));
    $log = explode('|', $logs[0]);
    global $base_url;
    $this
      ->assertEquals($base_url, $log[0]);
    $this
      ->assertEquals('my_module', $log[2]);
    $this
      ->assertEquals('1.2.3.4', $log[3]);
    $this
      ->assertEquals($base_url . '/page-not-found', $log[4]);
    $this
      ->assertEquals('other-site', $log[5]);
    $this
      ->assertEquals('42', $log[6]);
    $this
      ->assertEquals('/my-link', $log[7]);
    $this
      ->assertEquals('My warning message.', $log[8]);

    // Test that an empty format prevents writing to the syslog.

    /** @var \Drupal\Core\Config\Config $config */
    $config = $this->container
      ->get('config.factory')
      ->getEditable('syslog.settings');
    $config
      ->set('format', '');
    $config
      ->save();
    unlink($log_filename);
    \Drupal::logger('my_module')
      ->warning('My warning message.', [
      'link' => '/my-link',
    ]);
    $this
      ->assertFileDoesNotExist($log_filename);
  }

  /**
   * Tests severity level logging.
   *
   * @covers ::log
   */
  public function testSyslogSeverity() {

    /** @var \Drupal\Core\Config\Config $config */
    $config = $this->container
      ->get('config.factory')
      ->getEditable('syslog.settings');
    $config
      ->set('format', '!type|!message|!severity');
    $config
      ->save();
    \Drupal::logger('my_module')
      ->warning('My warning message.');
    $log_filename = $this->container
      ->get('file_system')
      ->realpath('public://syslog.log');
    $logs = explode(PHP_EOL, file_get_contents($log_filename));
    $log = explode('|', $logs[0]);
    $this
      ->assertEquals('my_module', $log[0]);
    $this
      ->assertEquals('My warning message.', $log[1]);
    $this
      ->assertEquals('4', $log[2]);
  }

}

Members