Browse Source

Add test and changelog entry for sorting included files. Closes #225

Mike Naberezny 10 years ago
parent
commit
b562f7e95b
2 changed files with 38 additions and 0 deletions
  1. 3 0
      CHANGES.txt
  2. 35 0
      supervisor/tests/test_options.py

+ 3 - 0
CHANGES.txt

@@ -1,6 +1,9 @@
 3.2.0 (Next 3.x Release)
 ------------------------
 
+- Files included via the ``[include]`` section are read in sorted order.  In
+  past versions, the order was undefined.  Patch by Ionel Cristian Mărieș.
+
 - ``supervisorctl start`` and ``supervisorctl stop`` now complete more quickly
   when handling many processes.  Thanks to Chris McDonough for this patch.
   See: https://github.com/Supervisor/supervisor/issues/131

+ 35 - 0
supervisor/tests/test_options.py

@@ -647,6 +647,41 @@ class ServerOptionsTests(unittest.TestCase):
         else:
             self.fail("expected exception")
 
+    def test_include_reads_files_in_sorted_order(self):
+        dirname = tempfile.mkdtemp()
+        conf_d = os.path.join(dirname, "conf.d")
+        os.mkdir(conf_d)
+
+        supervisord_conf = os.path.join(dirname, "supervisord.conf")
+        text = lstrip("""\
+        [supervisord]
+
+        [include]
+        files=%s/conf.d/*.conf
+        """ % dirname)
+        with open(supervisord_conf, 'w') as f:
+            f.write(text)
+
+        from supervisor.compat import letters
+        a_z = letters[:26]
+        for letter in reversed(a_z):
+            filename = os.path.join(conf_d, "%s.conf" % letter)
+            with open(filename, "w") as f:
+                f.write("[program:%s]\n"
+                        "command=/bin/%s\n" % (letter, letter))
+
+        instance = self._makeOne()
+        try:
+            instance.read_config(supervisord_conf)
+            expected_msgs = []
+            for letter in sorted(a_z):
+                filename = os.path.join(conf_d, "%s.conf" % letter)
+                expected_msgs.append(
+                    'Included extra file "%s" during parsing' % filename)
+            self.assertEqual(instance.parse_warnings, expected_msgs)
+        finally:
+            shutil.rmtree(dirname)
+
     def test_readFile_failed(self):
         from supervisor.options import readFile
         try: