Issue #2927012 by deviantintegral, alexpott, arunkumark: _drupal_log_error() returns a 0 exit code on errors
parent
91fe1d2f77
commit
08879cc009
|
@ -180,7 +180,7 @@ function _drupal_log_error($error, $fatal = FALSE) {
|
|||
// Should not translate the string to avoid errors producing more errors.
|
||||
$response->setContent(html_entity_decode(strip_tags(new FormattableMarkup('%type: @message in %function (line %line of %file).', $error))) . "\n");
|
||||
$response->send();
|
||||
exit;
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,55 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\Tests\Core\Error;
|
||||
|
||||
use Drupal\Tests\UnitTestCase;
|
||||
use Symfony\Component\Process\PhpProcess;
|
||||
|
||||
/**
|
||||
* Tests logging of errors in core/error.inc.
|
||||
*
|
||||
* @group Error
|
||||
*/
|
||||
class DrupalLogErrorTest extends UnitTestCase {
|
||||
|
||||
/**
|
||||
* Test that fatal errors return a non-zero exit code.
|
||||
*/
|
||||
public function testFatalExitCode() {
|
||||
$script = <<<'EOT'
|
||||
<?php
|
||||
if (PHP_SAPI !== 'cli') {
|
||||
return;
|
||||
}
|
||||
|
||||
$autoloader = require_once 'autoload.php';
|
||||
require_once 'core/includes/bootstrap.inc';
|
||||
require_once 'core/includes/errors.inc';
|
||||
define('DRUPAL_TEST_IN_CHILD_SITE', FALSE);
|
||||
|
||||
$error = [
|
||||
'%type' => 'kernel test',
|
||||
'@message' => 'This is a test message',
|
||||
'%function' => 'test_function',
|
||||
'%file' => 'test.module',
|
||||
'%line' => 456,
|
||||
'@backtrace_string' => 'backtrace',
|
||||
'severity_level' => 0,
|
||||
'backtrace' => [],
|
||||
];
|
||||
_drupal_log_error($error, TRUE);
|
||||
EOT;
|
||||
|
||||
// We need to override the current working directory for invocations from
|
||||
// run-tests.sh to work properly.
|
||||
$process = new PhpProcess($script, $this->root);
|
||||
$process->run();
|
||||
|
||||
// Assert the output strings as unrelated errors (like the log-exit.php
|
||||
// script throwing a PHP error) would still pass the final assertion.
|
||||
$this->assertEquals("kernel test: This is a test message in test_function (line 456 of test.module).\n", $process->getOutput());
|
||||
$this->assertEquals("kernel test: This is a test message in test.module on line 456 backtrace\n", $process->getErrorOutput());
|
||||
$this->assertFalse($process->isSuccessful());
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue