public function MonitoringCoreKernelTest::testCoreRequirementsSensorPlugin in Monitoring 8
Tests requirements sensors.
The module monitoring_test implements custom requirements injected through state monitoring_test.requirements.
See also
\Drupal\monitoring\Plugin\monitoring\SensorPlugin\CoreRequirementsSensorPlugin
File
- tests/
src/ Kernel/ MonitoringCoreKernelTest.php, line 335
Class
- MonitoringCoreKernelTest
- Kernel tests for the core pieces of monitoring.
Namespace
Drupal\Tests\monitoring\KernelCode
public function testCoreRequirementsSensorPlugin() {
$result = $this
->runSensor('core_requirements_monitoring_test');
$this
->assertTrue($result
->isOk());
$this
->assertEqual($result
->getMessage(), 'Requirements check OK');
// Set basic requirements saying that all is OK.
$requirements = array(
'requirement1' => array(
'title' => 'requirement1',
'description' => 'requirement1 description',
'severity' => REQUIREMENT_OK,
),
'requirement_excluded' => array(
'title' => 'excluded requirement',
'description' => 'requirement that should be excluded from monitoring by the sensor',
// Set the severity to ERROR to test if the sensor result is not
// affected by this requirement.
'severity' => REQUIREMENT_ERROR,
),
);
\Drupal::state()
->set('monitoring_test.requirements', $requirements);
// Set requirements exclude keys into the sensor settings.
$sensor_config = SensorConfig::load('core_requirements_monitoring_test');
$settings = $sensor_config
->getSettings();
$settings['exclude_keys'] = array(
'requirement_excluded',
);
$sensor_config->settings = $settings;
$sensor_config
->save();
// We still have OK status but with different message.
$result = $this
->runSensor('core_requirements_monitoring_test');
// We expect OK status as REQUIREMENT_ERROR is set by excluded requirement.
$this
->assertTrue($result
->isOk());
$this
->assertEqual($result
->getMessage(), 'requirement1, requirement1 description');
// Add warning state.
$requirements['requirement2'] = array(
'title' => 'requirement2',
'description' => 'requirement2 description',
'severity' => REQUIREMENT_WARNING,
);
\Drupal::state()
->set('monitoring_test.requirements', $requirements);
// Now the sensor escalates to the requirement in warning state.
$result = $this
->runSensor('core_requirements_monitoring_test');
$this
->assertTrue($result
->isWarning());
$this
->assertEqual($result
->getMessage(), 'requirement2, requirement2 description');
// Add error state.
$requirements['requirement3'] = array(
'title' => 'requirement3',
'description' => 'requirement3 description',
'severity' => REQUIREMENT_ERROR,
);
\Drupal::state()
->set('monitoring_test.requirements', $requirements);
// Now the sensor escalates to the requirement in critical state.
$result = $this
->runSensor('core_requirements_monitoring_test');
$this
->assertTrue($result
->isCritical());
$this
->assertEqual($result
->getMessage(), 'requirement3, requirement3 description');
// Check verbose message. All output should be part of it.
$verbose_output = $result
->getVerboseOutput();
$this
->setRawContent(\Drupal::service('renderer')
->renderPlain($verbose_output));
$this
->assertText('requirement1');
$this
->assertText('requirement1 description');
$this
->assertText('requirement_excluded');
$this
->assertText('excluded requirement');
$this
->assertText('requirement that should be excluded from monitoring by the sensor');
$this
->assertText('requirement2');
$this
->assertText('requirement2 description');
// Add error state.
$requirements = [
'requirement4' => [
'title' => [
'#markup' => 'requirement 4',
],
'description' => [
'#markup' => 'Description as a render array',
],
'severity' => REQUIREMENT_WARNING,
],
];
\Drupal::state()
->set('monitoring_test.requirements', $requirements);
// Check verbose message. Make sure that the render array is converted to
// a string.
$result = $this
->runSensor('core_requirements_monitoring_test');
$this
->assertTrue($result
->isWarning());
$this
->assertEquals('requirement 4, Description as a render array', $result
->getMessage());
$verbose_output = $result
->getVerboseOutput();
$this
->setRawContent(\Drupal::service('renderer')
->renderPlain($verbose_output));
$this
->assertText('requirement 4');
$this
->assertText('Description as a render array');
}