function ExceptionLoggingSubscriberTest::testExceptionLogging
Same name in other branches
- 10 core/tests/Drupal/KernelTests/Core/EventSubscriber/ExceptionLoggingSubscriberTest.php \Drupal\KernelTests\Core\EventSubscriber\ExceptionLoggingSubscriberTest::testExceptionLogging()
Tests \Drupal\Core\EventSubscriber\ExceptionLoggingSubscriber::onException().
File
-
core/
tests/ Drupal/ KernelTests/ Core/ EventSubscriber/ ExceptionLoggingSubscriberTest.php, line 35
Class
- ExceptionLoggingSubscriberTest
- Tests that HTTP exceptions are logged correctly.
Namespace
Drupal\KernelTests\Core\EventSubscriberCode
public function testExceptionLogging() : void {
$http_kernel = \Drupal::service('http_kernel');
$channel_map = [
400 => 'client error',
401 => 'client error',
403 => 'access denied',
404 => 'page not found',
405 => 'client error',
408 => 'client error',
// Do not check the 500 status code here because it would be caught by
// Drupal\Core\EventSubscriberExceptionTestSiteSubscriber which has lower
// priority.
501 => 'php',
502 => 'php',
503 => 'php',
];
$level_map = [
400 => RfcLogLevel::WARNING,
401 => RfcLogLevel::WARNING,
403 => RfcLogLevel::WARNING,
404 => RfcLogLevel::WARNING,
405 => RfcLogLevel::WARNING,
408 => RfcLogLevel::WARNING,
501 => RfcLogLevel::ERROR,
502 => RfcLogLevel::ERROR,
503 => RfcLogLevel::ERROR,
];
// Ensure that noting is logged.
$this->assertEmpty($this->container
->get($this->testLogServiceName)
->cleanLogs());
// Temporarily disable error log as the ExceptionLoggingSubscriber logs 5xx
// HTTP errors using error_log().
$error_log = ini_set('error_log', '/dev/null');
foreach ($channel_map as $code => $channel) {
$request = Request::create('/test-http-response-exception/' . $code);
$http_kernel->handle($request);
}
ini_set('error_log', $error_log);
$expected_channels = array_values($channel_map);
$expected_levels = array_values($level_map);
$logs = $this->container
->get($this->testLogServiceName)
->cleanLogs();
foreach ($expected_channels as $key => $expected_channel) {
$this->assertEquals($expected_channel, $logs[$key][2]['channel']);
$this->assertEquals($expected_levels[$key], $logs[$key][0]);
// Verify that @backtrace_string is removed from client error.
if ($logs[$key][2]['channel'] === 'client error') {
$this->assertArrayNotHasKey('@backtrace_string', $logs[$key][2]);
}
}
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.