From 1a4d61e5164e93c5253c8edf1b3ac25914eddedc Mon Sep 17 00:00:00 2001
From: Alex Pott <alex.a.pott@googlemail.com>
Date: Sat, 29 Apr 2017 21:58:00 +0100
Subject: [PATCH] Issue #2534760 by mr.baileys, GeduR, phenaproxima, dagmar,
 tstoeckler: syslog.settings.facility should be an integer

---
 .../syslog/config/install/syslog.settings.yml |  5 ++-
 .../syslog/config/schema/syslog.schema.yml    |  2 +-
 .../src/Tests/Update/SyslogUpdateTest.php     | 39 +++++++++++++++++++
 core/modules/syslog/syslog.install            |  9 +++++
 .../Migrate/d6/MigrateSyslogConfigsTest.php   |  2 +-
 .../Migrate/d7/MigrateSyslogConfigsTest.php   |  2 +-
 6 files changed, 55 insertions(+), 4 deletions(-)
 create mode 100644 core/modules/syslog/src/Tests/Update/SyslogUpdateTest.php

diff --git a/core/modules/syslog/config/install/syslog.settings.yml b/core/modules/syslog/config/install/syslog.settings.yml
index 1aa5b9087452..396b75179865 100644
--- a/core/modules/syslog/config/install/syslog.settings.yml
+++ b/core/modules/syslog/config/install/syslog.settings.yml
@@ -1,3 +1,6 @@
 identity: drupal
-facility: ''
+# The default facility setting depends on the operating system, and will be
+# overwritten during installation.
+# @see syslog_install().
+facility: 8
 format: '!base_url|!timestamp|!type|!ip|!request_uri|!referer|!uid|!link|!message'
diff --git a/core/modules/syslog/config/schema/syslog.schema.yml b/core/modules/syslog/config/schema/syslog.schema.yml
index 5d2707a5a151..f980828f806c 100644
--- a/core/modules/syslog/config/schema/syslog.schema.yml
+++ b/core/modules/syslog/config/schema/syslog.schema.yml
@@ -8,7 +8,7 @@ syslog.settings:
       type: string
       label: 'Identity'
     facility:
-      type: string
+      type: integer
       label: 'Facility'
     format:
       type: string
diff --git a/core/modules/syslog/src/Tests/Update/SyslogUpdateTest.php b/core/modules/syslog/src/Tests/Update/SyslogUpdateTest.php
new file mode 100644
index 000000000000..2b0482ff9307
--- /dev/null
+++ b/core/modules/syslog/src/Tests/Update/SyslogUpdateTest.php
@@ -0,0 +1,39 @@
+<?php
+
+namespace Drupal\syslog\Tests\Update;
+
+use Drupal\system\Tests\Update\UpdatePathTestBase;
+
+/**
+ * Tests that syslog settings are properly updated during database updates.
+ *
+ * @group syslog
+ */
+class SyslogUpdateTest extends UpdatePathTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setDatabaseDumpFiles() {
+    $this->databaseDumpFiles = [
+      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.filled.standard.php.gz',
+    ];
+  }
+
+  /**
+   * Tests that syslog.settings.facility has been converted from string to int.
+   *
+   * @see syslog_update_8400()
+   */
+  public function testSyslogSettingsFacilityDataType() {
+    $config = $this->config('syslog.settings');
+    $this->assertIdentical('128', $config->get('facility'));
+
+    // Run updates.
+    $this->runUpdates();
+
+    $config = $this->config('syslog.settings');
+    $this->assertIdentical(128, $config->get('facility'));
+  }
+
+}
diff --git a/core/modules/syslog/syslog.install b/core/modules/syslog/syslog.install
index e3377c8aeb74..f0ce5cc68a3b 100644
--- a/core/modules/syslog/syslog.install
+++ b/core/modules/syslog/syslog.install
@@ -13,3 +13,12 @@ function syslog_install() {
   // to be set dynamically during installation.
   \Drupal::configFactory()->getEditable('syslog.settings')->set('facility', defined('LOG_LOCAL0') ? LOG_LOCAL0 : LOG_USER)->save();
 }
+
+/**
+ * Convert syslog.settings.facility to an integer.
+ */
+function syslog_update_8400() {
+  $config = \Drupal::configFactory()->getEditable('syslog.settings');
+  $facility = (int) $config->get('facility');
+  $config->set('facility', $facility)->save(TRUE);
+}
diff --git a/core/modules/syslog/tests/src/Kernel/Migrate/d6/MigrateSyslogConfigsTest.php b/core/modules/syslog/tests/src/Kernel/Migrate/d6/MigrateSyslogConfigsTest.php
index aa66203113d6..935af8d8aa05 100644
--- a/core/modules/syslog/tests/src/Kernel/Migrate/d6/MigrateSyslogConfigsTest.php
+++ b/core/modules/syslog/tests/src/Kernel/Migrate/d6/MigrateSyslogConfigsTest.php
@@ -33,7 +33,7 @@ protected function setUp() {
   public function testSyslogSettings() {
     $config = $this->config('syslog.settings');
     $this->assertIdentical('drupal', $config->get('identity'));
-    $this->assertIdentical('128', $config->get('facility'));
+    $this->assertIdentical(128, $config->get('facility'));
     $this->assertConfigSchema(\Drupal::service('config.typed'), 'syslog.settings', $config->get());
   }
 
diff --git a/core/modules/syslog/tests/src/Kernel/Migrate/d7/MigrateSyslogConfigsTest.php b/core/modules/syslog/tests/src/Kernel/Migrate/d7/MigrateSyslogConfigsTest.php
index 2996b4241930..ef5d8c305dd2 100644
--- a/core/modules/syslog/tests/src/Kernel/Migrate/d7/MigrateSyslogConfigsTest.php
+++ b/core/modules/syslog/tests/src/Kernel/Migrate/d7/MigrateSyslogConfigsTest.php
@@ -36,7 +36,7 @@ protected function setUp() {
   public function testSyslogSettings() {
     $config = $this->config('syslog.settings');
     // 8 == LOG_USER
-    $this->assertIdentical('8', $config->get('facility'));
+    $this->assertIdentical(8, $config->get('facility'));
     $this->assertIdentical('!base_url|!timestamp|!type|!ip|!request_uri|!referer|!uid|!link|!message', $config->get('format'));
     $this->assertIdentical('drupal', $config->get('identity'));
   }
-- 
GitLab