浏览代码

Return a BAD_NAME fault if clearProcessLogs() can't resolve the name

Mike Naberezny 11 年之前
父节点
当前提交
b47ad00f8f
共有 3 个文件被更改,包括 28 次插入3 次删除
  1. 4 0
      CHANGES.txt
  2. 3 0
      supervisor/rpcinterface.py
  3. 21 3
      supervisor/tests/test_rpcinterfaces.py

+ 4 - 0
CHANGES.txt

@@ -34,6 +34,10 @@
 - The ``status`` command in ``supervisorctl`` now supports group name
   syntax: ``status groupname:*``.
 
+- Fixed an XML-RPC bug where calling supervisor.clearProcessLogs() with a
+  name like "group:*" would cause a 500 Internal Server Error rather than
+  returning a BAD_NAME fault.
+
 3.0 (2013-07-30)
 ----------------
 

+ 3 - 0
supervisor/rpcinterface.py

@@ -656,6 +656,9 @@ class SupervisorNamespaceRPCInterface:
 
         group, process = self._getGroupAndProcess(name)
 
+        if process is None:
+            raise RPCError(Faults.BAD_NAME, name)
+
         try:
             # implies a reopen
             process.removelogs()

+ 21 - 3
supervisor/tests/test_rpcinterfaces.py

@@ -1402,13 +1402,31 @@ class SupervisorNamespaceXMLRPCInterfaceTests(TestBase):
         self.assertEqual(offset, 0)
         self.assertEqual(data, '')
 
-    def test_clearProcessLogs_bad_name(self):
+    def test_clearProcessLogs_bad_name_no_group(self):
         from supervisor import xmlrpc
-        supervisord = DummySupervisor()
+        options = DummyOptions()
+        pconfig = DummyPConfig(options, 'foo', 'foo')
+        process = DummyProcess(pconfig)
+        pgroup = DummyProcessGroup(None)
+        pgroup.processes = {'foo': process}
+        supervisord = DummySupervisor(process_groups={'foo':pgroup})
+        interface = self._makeOne(supervisord)
+        self._assertRPCError(xmlrpc.Faults.BAD_NAME,
+                             interface.clearProcessLogs,
+                             'badgroup')
+
+    def test_clearProcessLogs_bad_name_no_process(self):
+        from supervisor import xmlrpc
+        options = DummyOptions()
+        pconfig = DummyPConfig(options, 'foo', 'foo')
+        process = DummyProcess(pconfig)
+        pgroup = DummyProcessGroup(None)
+        pgroup.processes = {'foo': process}
+        supervisord = DummySupervisor(process_groups={'foo':pgroup})
         interface = self._makeOne(supervisord)
         self._assertRPCError(xmlrpc.Faults.BAD_NAME,
                              interface.clearProcessLogs,
-                             'spew')
+                             'foo:*')
 
     def test_clearProcessLogs(self):
         options = DummyOptions()