Tighten mysql mode in test environment
authoreileen <emcnaughton@wikimedia.org>
Tue, 16 Mar 2021 02:08:06 +0000 (15:08 +1300)
committerSeamus Lee <seamuslee001@gmail.com>
Mon, 22 Mar 2021 06:55:21 +0000 (17:55 +1100)
At least one test fails (and the corresponding bug appears on our live site)
with the mysql modes IGNORE_SPACE, ERROR_FOR_DIVISION_BY_ZERO and STRICT_TRANS

(I think any 2 of the above is OK)

Let's throw it at jenkins & see how many friends it has

tests/phpunit/CiviTest/CiviUnitTestCase.php

index b063711737f94691f2769dcb2913662f05716e6a..9fd3369ab68aa2728e0081fa05b18aa3d723f28f 100644 (file)
@@ -372,12 +372,13 @@ class CiviUnitTestCase extends PHPUnit\Framework\TestCase {
 
     $this->renameLabels();
     $this->_sethtmlGlobals();
+    $this->ensureMySQLMode(['IGNORE_SPACE', 'ERROR_FOR_DIVISION_BY_ZERO', 'STRICT_TRANS_TABLES']);
   }
 
   /**
    * Read everything from the datasets directory and insert into the db.
    */
-  public function loadAllFixtures() {
+  public function loadAllFixtures(): void {
     $fixturesDir = __DIR__ . '/../../fixtures';
 
     CRM_Core_DAO::executeQuery("SET FOREIGN_KEY_CHECKS = 0;");
@@ -3790,4 +3791,15 @@ WHERE a1.is_primary = 0
     '));
   }
 
+  /**
+   * Ensure the specified mysql mode/s are activated.
+   *
+   * @param array $modes
+   */
+  protected function ensureMySQLMode(array $modes): void {
+    $currentModes = array_fill_keys(CRM_Utils_SQL::getSqlModes(), 1);
+    $currentModes = array_merge($currentModes, array_fill_keys($modes, 1));
+    CRM_Core_DAO::executeQuery("SET GLOBAL sql_mode = '" . implode(',', array_keys($currentModes)) . "'");
+  }
+
 }