diff --git a/src/Plugin/monitoring/SensorPlugin/CoreRequirementsSensorPlugin.php b/src/Plugin/monitoring/SensorPlugin/CoreRequirementsSensorPlugin.php index b5eca29..5c62d3b 100644 --- a/src/Plugin/monitoring/SensorPlugin/CoreRequirementsSensorPlugin.php +++ b/src/Plugin/monitoring/SensorPlugin/CoreRequirementsSensorPlugin.php @@ -44,32 +44,45 @@ class CoreRequirementsSensorPlugin extends SensorPluginBase implements ExtendedI $requirements = $this->getRequirements($this->sensorConfig->getSetting('module')); $excluded_keys = $this->sensorConfig->getSetting('exclude_keys'); + if (empty($excluded_keys)) { + $excluded_keys = array(); + } $rows = []; foreach ($requirements as $key => $value) { - $severity = $value['severity']; + // Make sure all keys are present. + $value += array( + 'severity' => NULL, + ); + + // Map column key. + $row['key'] = $key; + // Map column excluded. + if (in_array($key, $excluded_keys)) { + $row['excluded'] = 'Yes'; + } + else { + $row['excluded'] = ''; + } + + // Map column severity. + $severity = $value['severity']; if ($severity == REQUIREMENT_ERROR) { $severity = 'Error'; } elseif ($severity == REQUIREMENT_WARNING) { - $severity = 'warning'; + $severity = 'Warning'; } else { - $severity = 'Ok'; + $severity = 'OK'; } + $row['severity'] = $severity; - $row['Key'] = $key; - if (in_array($key, $excluded_keys)) { - $row['Excluded'] = 'Yes'; - } - else { - $row['Excluded'] = ''; - } - $row['Severity'] = $severity; + // Map column message with title and description. $title = ''; if (isset($value['title'])) { - $title .= $value['title'] . ' '; + $title .= $value['title']; } if (isset($value['value'])) { $title .= $value['value']; @@ -78,15 +91,12 @@ class CoreRequirementsSensorPlugin extends SensorPluginBase implements ExtendedI if (isset($value['description'])) { $description = $value['description']; } - // Prepare the requirements message. $message = array( '#type' => 'item', '#title' => $title, '#markup' => $description, ); - - $message = drupal_render($message); - $row['Message'] = $message; + $row['message'] = drupal_render($message); $rows[] = array( 'data' => $row, @@ -95,14 +105,13 @@ class CoreRequirementsSensorPlugin extends SensorPluginBase implements ExtendedI if (count($rows) > 0) { $header = []; - $header[] = t('Key'); - $header[] = t('Excluded'); - $header[] = t('Severity'); - $header[] = t('Message'); + $header['key'] = t('Key'); + $header['excluded'] = t('Excluded'); + $header['severity'] = t('Severity'); + $header['message'] = t('Message'); - $output['exclude_keys'] = array( + $output['requirements'] = array( '#theme' => 'table', - '#title' => 'Requirement Keys', '#header' => $header, '#rows' => $rows, ); @@ -135,7 +144,7 @@ class CoreRequirementsSensorPlugin extends SensorPluginBase implements ExtendedI $form['exclude_keys'] = array( '#type' => 'textarea', '#title' => t('Keys to be excluded.'), - '#description' => t('Seperate the keys by a new line'), + '#description' => t('Seperate the keys by a new line.'), ); if ($this->sensorConfig->getSetting('exclude_keys')) { diff --git a/src/Tests/MonitoringCoreTest.php b/src/Tests/MonitoringCoreTest.php index 0277593..97d498b 100644 --- a/src/Tests/MonitoringCoreTest.php +++ b/src/Tests/MonitoringCoreTest.php @@ -141,6 +141,9 @@ class MonitoringCoreTest extends MonitoringTestBase { /** * Tests requirements sensors. * + * The module monitoring_test implements custom requirements injected through + * state monitoring_test.requirements. + * * @see CoreRequirementsSensorPlugin */ protected function doTestCoreRequirementsSensorPlugin() { @@ -157,7 +160,7 @@ class MonitoringCoreTest extends MonitoringTestBase { $this->assertTrue($result->isOk()); $this->assertEqual($result->getMessage(), 'Requirements check OK'); - // Set basic requirements saying that all is ok. + // Set basic requirements saying that all is OK. $requirements = array( 'requirement1' => array( 'title' => 'requirement1', @@ -181,7 +184,7 @@ class MonitoringCoreTest extends MonitoringTestBase { $sensor_config->settings = $settings; $sensor_config->save(); - // We still should have OK status but with different message. + // 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()); @@ -195,7 +198,7 @@ class MonitoringCoreTest extends MonitoringTestBase { ); \Drupal::state()->set('monitoring_test.requirements', $requirements); - // Now the sensor should have escalated to the requirement in warning state. + // 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'); @@ -208,14 +211,22 @@ class MonitoringCoreTest extends MonitoringTestBase { ); \Drupal::state()->set('monitoring_test.requirements', $requirements); - // Now the sensor should have escalated to the requirement in critical state. + // 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 for excluded keys. + // Check verbose message. All output should be part of it. + $verbose_output = $result->getVerboseOutput(); - $this->assertTrue(strpos(drupal_render($verbose_output), 'requirement_excluded') !== FALSE); + $this->setRawContent(drupal_render($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'); } /** @@ -288,11 +299,10 @@ class MonitoringCoreTest extends MonitoringTestBase { $this->assertTrue(strpos($result->getMessage(), $file->getFileUri()) !== FALSE); $this->assertTrue($result->isWarning()); $verbose_output = $result->getVerboseOutput(); - $this->assertTrue(strpos(drupal_render($verbose_output), 'monitoring_test') !== FALSE); - $verbose_output = $result->getVerboseOutput(); - $this->assertTrue(strpos(drupal_render($verbose_output), 'test_object') !== FALSE); - $verbose_output = $result->getVerboseOutput(); - $this->assertTrue(strpos(drupal_render($verbose_output), '123456789') !== FALSE); + $this->setRawContent(drupal_render($verbose_output)); + $this->assertText('monitoring_test'); + $this->assertText('test_object'); + $this->assertText('123456789'); } /** @@ -367,7 +377,8 @@ class MonitoringCoreTest extends MonitoringTestBase { $this->assertTrue($result->isCritical()); // The verbose output should contain the cmd output. $verbose_output = $result->getVerboseOutput(); - $this->assertTrue(strpos(drupal_render($verbose_output), 'dummy output') !== FALSE); + $this->setRawContent(drupal_render($verbose_output)); + $this->assertText('dummy output'); // Two lines of cmd output. $this->assertEqual($result->getValue(), 2); // If exec() is disabed on an environment, make it visible in output. @@ -928,10 +939,11 @@ class MonitoringCoreTest extends MonitoringTestBase { */ protected function createVocabulary() { // Create a vocabulary. - $vocabulary = entity_create('taxonomy_vocabulary'); - $vocabulary->vid = Unicode::strtolower($this->randomMachineName()); - $vocabulary->name = $this->randomMachineName(); - $vocabulary->description = $this->randomMachineName(); + $vocabulary = entity_create('taxonomy_vocabulary', array( + 'vid' => Unicode::strtolower($this->randomMachineName()), + 'name' => $this->randomMachineName(), + 'description' => $this->randomMachineName(), + )); $vocabulary->save(); return $vocabulary; }