瀏覽代碼

Fix error message not showing the main config file. Refs #516

Mike Naberezny 9 年之前
父節點
當前提交
c038042a3d
共有 2 個文件被更改,包括 65 次插入3 次删除
  1. 2 2
      supervisor/options.py
  2. 63 1
      supervisor/tests/test_options.py

+ 2 - 2
supervisor/options.py

@@ -816,8 +816,8 @@ class ServerOptions(Options):
             return self._processes_from_section(
             return self._processes_from_section(
                 parser, section, group_name, klass)
                 parser, section, group_name, klass)
         except ValueError, e:
         except ValueError, e:
-            filename = parser.section_to_file.get(section, '???')
-            raise ValueError('%s in section %r (file: %s)'
+            filename = parser.section_to_file.get(section, self.configfile)
+            raise ValueError('%s in section %r (file: %r)'
                              % (e, section, filename))
                              % (e, section, filename))
 
 
     def _processes_from_section(self, parser, section, group_name,
     def _processes_from_section(self, parser, section, group_name,

+ 63 - 1
supervisor/tests/test_options.py

@@ -1843,6 +1843,68 @@ class ServerOptionsTests(unittest.TestCase):
             )
             )
         self.assertEqual(cat_0.command, expected)
         self.assertEqual(cat_0.command, expected)
 
 
+    def test_options_error_handler_shows_main_filename(self):
+        dirname = tempfile.mkdtemp()
+        supervisord_conf = os.path.join(dirname, 'supervisord.conf')
+        text = lstrip('''
+        [supervisord]
+
+        [program:cat]
+        command = /bin/cat
+        stopsignal = NOTASIGNAL
+        ''')
+        with open(supervisord_conf, 'w') as f:
+            f.write(text)
+
+        instance = self._makeOne()
+        try:
+            instance.configfile = supervisord_conf
+            try:
+                instance.process_config(do_usage=False)
+                self.fail('nothing raised')
+            except ValueError as e:
+                self.assertEqual(str(e.args[0]),
+                    "value 'NOTASIGNAL' is not a valid signal name "
+                    "in section 'program:cat' (file: %r)" % supervisord_conf)
+        finally:
+            shutil.rmtree(dirname, ignore_errors=True)
+
+    def test_options_error_handler_shows_included_filename(self):
+        dirname = tempfile.mkdtemp()
+        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)
+
+        conf_d = os.path.join(dirname, "conf.d")
+        os.mkdir(conf_d)
+        included_conf = os.path.join(conf_d, "included.conf")
+        text = lstrip('''\
+        [program:cat]
+        command = /bin/cat
+        stopsignal = NOTASIGNAL
+        ''')
+        with open(included_conf, 'w') as f:
+            f.write(text)
+
+        instance = self._makeOne()
+        try:
+            instance.configfile = supervisord_conf
+            try:
+                instance.process_config(do_usage=False)
+                self.fail('nothing raised')
+            except ValueError as e:
+                self.assertEqual(str(e.args[0]),
+                    "value 'NOTASIGNAL' is not a valid signal name "
+                    "in section 'program:cat' (file: %r)" % included_conf)
+        finally:
+            shutil.rmtree(dirname, ignore_errors=True)
+
     def test_processes_from_section_bad_program_name_spaces(self):
     def test_processes_from_section_bad_program_name_spaces(self):
         instance = self._makeOne()
         instance = self._makeOne()
         text = lstrip("""\
         text = lstrip("""\
@@ -2003,7 +2065,7 @@ class ServerOptionsTests(unittest.TestCase):
             except ValueError, e:
             except ValueError, e:
                 self.assertEqual(e.args[0],
                 self.assertEqual(e.args[0],
                     "program section program:foo does not specify a command "
                     "program section program:foo does not specify a command "
-                    "in section 'program:foo' (file: %s)" % f.name)
+                    "in section 'program:foo' (file: %r)" % f.name)
             else:
             else:
                 self.fail('nothing raised')
                 self.fail('nothing raised')
         finally:
         finally: