File 0004-handle-repeating-mysqld-options-containing-equals.patch of Package openstack-trove

Index: trove-2014.1.1.dev10.gf103b49/trove/guestagent/datastore/mysql/service.py
===================================================================
--- trove-2014.1.1.dev10.gf103b49.orig/trove/guestagent/datastore/mysql/service.py
+++ trove-2014.1.1.dev10.gf103b49/trove/guestagent/datastore/mysql/service.py
@@ -19,6 +19,7 @@
 import os
 import re
 import uuid
+from collections import defaultdict
 from datetime import date
 import sqlalchemy
 from sqlalchemy import exc
@@ -138,13 +139,13 @@ def load_mysqld_options():
         out, err = utils.execute(mysqld_bin, "--print-defaults",
                                  run_as_root=True, root_helper="sudo")
         arglist = re.split("\n", out)[1].split()
-        args = {}
+        args = defaultdict(list)
         for item in arglist:
             if "=" in item:
-                key, value = item.split("=")
-                args[key.lstrip("--")] = value
+                key, value = item.split("=", 1)
+                args[key.lstrip("--")].append(value)
             else:
-                args[item.lstrip("--")] = None
+                args[item.lstrip("--")].append(None)
         return args
     except exception.ProcessExecutionError:
         return {}
@@ -178,7 +179,7 @@ class MySqlAppStatus(service.BaseDbStatu
             except exception.ProcessExecutionError:
                 mysql_args = load_mysqld_options()
                 pid_file = mysql_args.get('pid_file',
-                                          '/var/run/mysqld/mysqld.pid')
+                                          ['/var/run/mysqld/mysqld.pid'])[0]
                 if os.path.exists(pid_file):
                     LOG.info("Service Status is CRASHED.")
                     return rd_instance.ServiceStatuses.CRASHED
Index: trove-2014.1.1.dev10.gf103b49/trove/tests/unittests/guestagent/test_dbaas.py
===================================================================
--- trove-2014.1.1.dev10.gf103b49.orig/trove/tests/unittests/guestagent/test_dbaas.py
+++ trove-2014.1.1.dev10.gf103b49/trove/tests/unittests/guestagent/test_dbaas.py
@@ -125,12 +125,26 @@ class DbaasTest(testtools.TestCase):
             options = dbaas.load_mysqld_options()
 
         self.assertEqual(5, len(options))
-        self.assertEqual(options["user"], "mysql")
-        self.assertEqual(options["port"], "3306")
-        self.assertEqual(options["basedir"], "/usr")
-        self.assertEqual(options["tmpdir"], "/tmp")
+        self.assertEqual(options["user"], ["mysql"])
+        self.assertEqual(options["port"], ["3306"])
+        self.assertEqual(options["basedir"], ["/usr"])
+        self.assertEqual(options["tmpdir"], ["/tmp"])
         self.assertTrue("skip-external-locking" in options)
 
+    def test_load_mysqld_options_contains_plugin_loads_options(self):
+        output = ("mysqld would've been started with the these args:\n"
+                  "--plugin-load=blackhole=ha_blackhole.so "
+                  "--plugin-load=federated=ha_federated.so")
+
+        with patch.object(os.path, 'isfile', return_value=True):
+            dbaas.utils.execute = Mock(return_value=(output, None))
+            options = dbaas.load_mysqld_options()
+
+        self.assertEqual(1, len(options))
+        self.assertEqual(options["plugin-load"],
+                         ["blackhole=ha_blackhole.so",
+                          "federated=ha_federated.so"])
+
     def test_load_mysqld_options_error(self):
 
         dbaas.utils.execute = Mock(side_effect=ProcessExecutionError())
@@ -1168,7 +1182,7 @@ class MySqlAppStatusTest(testtools.TestC
 
         mocked = Mock(side_effect=ProcessExecutionError())
         dbaas.utils.execute_with_timeout = mocked
-        dbaas.load_mysqld_options = Mock()
+        dbaas.load_mysqld_options = Mock(return_value={})
         dbaas.os.path.exists = Mock(return_value=False)
 
         self.mySqlAppStatus = MySqlAppStatus()
openSUSE Build Service is sponsored by