浏览代码

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

Mike Naberezny 10 年之前
父节点
当前提交
2f2d17aca3
共有 2 个文件被更改,包括 38 次插入0 次删除
  1. 3 0
      CHANGES.txt
  2. 35 0
      supervisor/tests/test_options.py

+ 3 - 0
CHANGES.txt

@@ -48,6 +48,9 @@
   happen is if a log filename was accidentally set to a directory instead
   of a file.  Thanks to Grzegorz Nosek for reporting this issue.
 
+- Files included via the `[include]` section are read in sorted order.  In
+  past versions, the order was undefined.  Patch by Ionel Cristian Mărieș.
+
 3.1.3 (2014-10-28)
 ------------------
 

+ 35 - 0
supervisor/tests/test_options.py

@@ -896,6 +896,41 @@ class ServerOptionsTests(unittest.TestCase):
         finally:
             shutil.rmtree(dirname)
 
+    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_read_config_include_extra_file_malformed(self):
         dirname = tempfile.mkdtemp()
         conf_d = os.path.join(dirname, "conf.d")