You are here

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\Kernel

Code

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');
}