Issue #2528292 by Fabianx, dawehner: Decouple Error testing from relying on a cached on disk-container that is created by a different Kernel
parent
d9d2e5f3d8
commit
0f4319e418
|
|
@ -52,8 +52,6 @@ use Symfony\Component\Routing\Route;
|
|||
*/
|
||||
class DrupalKernel implements DrupalKernelInterface, TerminableInterface {
|
||||
|
||||
const CONTAINER_BASE_CLASS = '\Drupal\Core\DependencyInjection\Container';
|
||||
|
||||
/**
|
||||
* Holds the container instance.
|
||||
*
|
||||
|
|
@ -815,7 +813,8 @@ class DrupalKernel implements DrupalKernelInterface, TerminableInterface {
|
|||
\Drupal::setContainer($this->container);
|
||||
|
||||
// If needs dumping flag was set, dump the container.
|
||||
if ($this->containerNeedsDumping && !$this->dumpDrupalContainer($this->container, static::CONTAINER_BASE_CLASS)) {
|
||||
$base_class = Settings::get('container_base_class', '\Drupal\Core\DependencyInjection\Container');
|
||||
if ($this->containerNeedsDumping && !$this->dumpDrupalContainer($this->container, $base_class)) {
|
||||
$this->container->get('logger.factory')->get('DrupalKernel')->notice('Container cannot be written to disk');
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,22 +0,0 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\system\Tests\System\ErrorContainerRebuildKernel.
|
||||
*/
|
||||
|
||||
namespace Drupal\system\Tests\System;
|
||||
|
||||
use Drupal\Core\DrupalKernel;
|
||||
|
||||
/**
|
||||
* A kernel which produces a container which triggers an error.
|
||||
*/
|
||||
class ErrorContainerRebuildKernel extends DrupalKernel {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
const CONTAINER_BASE_CLASS = '\Drupal\system\Tests\Bootstrap\ErrorContainer';
|
||||
|
||||
}
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\system\Tests\System\ExceptionContainerRebuildKernel.
|
||||
*/
|
||||
|
||||
namespace Drupal\system\Tests\System;
|
||||
|
||||
use Drupal\Core\DrupalKernel;
|
||||
|
||||
/**
|
||||
* A kernel which produces a container which triggers an exception.
|
||||
*/
|
||||
class ExceptionContainerRebuildKernel extends DrupalKernel {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
const CONTAINER_BASE_CLASS = '\Drupal\system\Tests\Bootstrap\ExceptionContainer';
|
||||
|
||||
}
|
||||
|
|
@ -108,10 +108,17 @@ class UncaughtExceptionTest extends WebTestBase {
|
|||
* Tests a container which has an error.
|
||||
*/
|
||||
public function testErrorContainer() {
|
||||
$kernel = ErrorContainerRebuildKernel::createFromRequest($this->prepareRequestForGenerator(), $this->classLoader, 'prod', TRUE);
|
||||
$kernel->rebuildContainer();
|
||||
$settings = [];
|
||||
$settings['settings']['container_base_class'] = (object) [
|
||||
'value' => '\Drupal\system\Tests\Bootstrap\ErrorContainer',
|
||||
'required' => TRUE,
|
||||
];
|
||||
$this->writeSettings($settings);
|
||||
|
||||
// Need to rebuild the container, so the dumped container can be tested
|
||||
// and not the container builder.
|
||||
\Drupal::service('kernel')->rebuildContainer();
|
||||
|
||||
$this->prepareRequestForGenerator();
|
||||
// Ensure that we don't use the now broken generated container on the test
|
||||
// process.
|
||||
\Drupal::setContainer($this->container);
|
||||
|
|
@ -137,10 +144,17 @@ class UncaughtExceptionTest extends WebTestBase {
|
|||
* Tests a container which has an exception really early.
|
||||
*/
|
||||
public function testExceptionContainer() {
|
||||
$kernel = ExceptionContainerRebuildKernel::createFromRequest($this->prepareRequestForGenerator(), $this->classLoader, 'prod', TRUE);
|
||||
$kernel->rebuildContainer();
|
||||
$settings = [];
|
||||
$settings['settings']['container_base_class'] = (object) [
|
||||
'value' => '\Drupal\system\Tests\Bootstrap\ExceptionContainer',
|
||||
'required' => TRUE,
|
||||
];
|
||||
$this->writeSettings($settings);
|
||||
|
||||
// Need to rebuild the container, so the dumped container can be tested
|
||||
// and not the container builder.
|
||||
\Drupal::service('kernel')->rebuildContainer();
|
||||
|
||||
$this->prepareRequestForGenerator();
|
||||
// Ensure that we don't use the now broken generated container on the test
|
||||
// process.
|
||||
\Drupal::setContainer($this->container);
|
||||
|
|
|
|||
|
|
@ -632,6 +632,15 @@ if ($settings['hash_salt']) {
|
|||
*/
|
||||
$settings['container_yamls'][] = __DIR__ . '/services.yml';
|
||||
|
||||
/**
|
||||
* Override the default service container class.
|
||||
*
|
||||
* This is useful for example to trace the service container for performance
|
||||
* tracking purposes, for testing a service container with an error condition or
|
||||
* to test a service container that throws an exception.
|
||||
*/
|
||||
# $settings['container_base_class'] = '\Drupal\Core\DependencyInjection\Container';
|
||||
|
||||
/**
|
||||
* Trusted host configuration.
|
||||
*
|
||||
|
|
|
|||
Loading…
Reference in New Issue