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 {
|
class DrupalKernel implements DrupalKernelInterface, TerminableInterface {
|
||||||
|
|
||||||
const CONTAINER_BASE_CLASS = '\Drupal\Core\DependencyInjection\Container';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds the container instance.
|
* Holds the container instance.
|
||||||
*
|
*
|
||||||
|
|
@ -815,7 +813,8 @@ class DrupalKernel implements DrupalKernelInterface, TerminableInterface {
|
||||||
\Drupal::setContainer($this->container);
|
\Drupal::setContainer($this->container);
|
||||||
|
|
||||||
// If needs dumping flag was set, dump the 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');
|
$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.
|
* Tests a container which has an error.
|
||||||
*/
|
*/
|
||||||
public function testErrorContainer() {
|
public function testErrorContainer() {
|
||||||
$kernel = ErrorContainerRebuildKernel::createFromRequest($this->prepareRequestForGenerator(), $this->classLoader, 'prod', TRUE);
|
$settings = [];
|
||||||
$kernel->rebuildContainer();
|
$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
|
// Ensure that we don't use the now broken generated container on the test
|
||||||
// process.
|
// process.
|
||||||
\Drupal::setContainer($this->container);
|
\Drupal::setContainer($this->container);
|
||||||
|
|
@ -137,10 +144,17 @@ class UncaughtExceptionTest extends WebTestBase {
|
||||||
* Tests a container which has an exception really early.
|
* Tests a container which has an exception really early.
|
||||||
*/
|
*/
|
||||||
public function testExceptionContainer() {
|
public function testExceptionContainer() {
|
||||||
$kernel = ExceptionContainerRebuildKernel::createFromRequest($this->prepareRequestForGenerator(), $this->classLoader, 'prod', TRUE);
|
$settings = [];
|
||||||
$kernel->rebuildContainer();
|
$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
|
// Ensure that we don't use the now broken generated container on the test
|
||||||
// process.
|
// process.
|
||||||
\Drupal::setContainer($this->container);
|
\Drupal::setContainer($this->container);
|
||||||
|
|
|
||||||
|
|
@ -632,6 +632,15 @@ if ($settings['hash_salt']) {
|
||||||
*/
|
*/
|
||||||
$settings['container_yamls'][] = __DIR__ . '/services.yml';
|
$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.
|
* Trusted host configuration.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue