[Zodb-checkins] SVN: zdaemon/trunk/ Fixed: The start command exited with a zero exit status even when

jim cvs-admin at zope.org
Mon Jul 30 17:47:19 UTC 2012


Log message for revision 127404:
  Fixed: The start command exited with a zero exit status even when
  the program being started failed to start (or exited imediately).
  

Changed:
  U   zdaemon/trunk/CHANGES.txt
  U   zdaemon/trunk/src/zdaemon/tests/tests.py
  U   zdaemon/trunk/src/zdaemon/tests/testuser.py
  U   zdaemon/trunk/src/zdaemon/zdctl.py

-=-
Modified: zdaemon/trunk/CHANGES.txt
===================================================================
--- zdaemon/trunk/CHANGES.txt	2012-07-30 13:59:51 UTC (rev 127403)
+++ zdaemon/trunk/CHANGES.txt	2012-07-30 17:47:14 UTC (rev 127404)
@@ -2,6 +2,12 @@
 Change log
 ==========
 
+3.0.4 (2012-07-30)
+==================
+
+- Fixed: The start command exited with a zero exit status even when
+  the program being started failed to start (or exited imediately).
+
 3.0.3 (2012-07-10)
 ==================
 

Modified: zdaemon/trunk/src/zdaemon/tests/tests.py
===================================================================
--- zdaemon/trunk/src/zdaemon/tests/tests.py	2012-07-30 13:59:51 UTC (rev 127403)
+++ zdaemon/trunk/src/zdaemon/tests/tests.py	2012-07-30 17:47:14 UTC (rev 127404)
@@ -78,6 +78,7 @@
     >>> system("./zdaemon -Cconf start")
     . .
     daemon manager not running
+    Failed: 1
 
     """
 
@@ -267,7 +268,49 @@
     True
     """
 
+def nonzeo_exit_on_program_failure():
+    """
+    >>> write('conf',
+    ... '''
+    ... <runner>
+    ...   backoff-limit 1
+    ...   program nosuch
+    ... </runner>
+    ... ''')
 
+    >>> system("./zdaemon -Cconf start", echo=True) # doctest: +ELLIPSIS
+    ./zdaemon...
+    daemon manager not running
+    Failed: 1
+
+    >>> write('conf',
+    ... '''
+    ... <runner>
+    ...   backoff-limit 1
+    ...   program cat nosuch
+    ... </runner>
+    ... ''')
+
+    >>> system("./zdaemon -Cconf start", echo=True) # doctest: +ELLIPSIS
+    ./zdaemon...
+    daemon manager not running
+    Failed: 1
+
+    >>> write('conf',
+    ... '''
+    ... <runner>
+    ...   backoff-limit 1
+    ...   program pwd
+    ... </runner>
+    ... ''')
+
+    >>> system("./zdaemon -Cconf start", echo=True) # doctest: +ELLIPSIS
+    ./zdaemon...
+    daemon manager not running
+    Failed: 1
+
+    """
+
 def setUp(test):
     test.globs['_td'] = td = []
     here = os.getcwd()
@@ -292,7 +335,9 @@
     for f in test.globs['_td']:
         f()
 
-def system(command, input='', quiet=False):
+def system(command, input='', quiet=False, echo=False):
+    if echo:
+        print command
     p = subprocess.Popen(
         command, shell=True,
         stdin=subprocess.PIPE,

Modified: zdaemon/trunk/src/zdaemon/tests/testuser.py
===================================================================
--- zdaemon/trunk/src/zdaemon/tests/testuser.py	2012-07-30 13:59:51 UTC (rev 127403)
+++ zdaemon/trunk/src/zdaemon/tests/testuser.py	2012-07-30 17:47:14 UTC (rev 127404)
@@ -83,7 +83,8 @@
     ...   O(gr_gid=7, gr_mem =['h', ]),
     ... ]
 
-    >>> zdaemon.zdctl.main(['-C', 'conf', 'status'])
+    >>> with mock.patch('sys.exit'):
+    ...     zdaemon.zdctl.main(['-C', 'conf', 'status'])
     daemon manager not running
 
     >>> import pwd, os
@@ -108,6 +109,7 @@
     ... ''')
 
     >>> with mock.patch('os.geteuid') as geteuid:
+    ...   with mock.patch('sys.exit'):
     ...     geteuid.return_value = 99
     ...     zdaemon.zdctl.main(['-C', 'conf', 'status'])
     ...     os.geteuid.assert_called_with()

Modified: zdaemon/trunk/src/zdaemon/zdctl.py
===================================================================
--- zdaemon/trunk/src/zdaemon/zdctl.py	2012-07-30 13:59:51 UTC (rev 127403)
+++ zdaemon/trunk/src/zdaemon/zdctl.py	2012-07-30 17:47:14 UTC (rev 127404)
@@ -267,7 +267,7 @@
                     was_running = True
                 elif (was_running or n > 10) and not cond(n):
                     print "\ndaemon manager not running"
-                    return
+                    return 1
 
         except KeyboardInterrupt:
             print "^C"
@@ -318,9 +318,8 @@
             print "daemon process already running; pid=%d" % self.zd_pid
             return
         if self.options.daemon:
-            self.awhile(self._start_cond,
-                        "daemon process started, pid=%(zd_pid)d",
-                        )
+            return self.awhile(
+                self._start_cond, "daemon process started, pid=%(zd_pid)d")
 
     def _get_override(self, opt, name, svalue=None, flag=0):
         value = getattr(self.options, name)
@@ -611,7 +610,7 @@
         options = ZDCtlOptions()
     options.realize(args)
     c = cmdclass(options)
-    c.onecmd(" ".join(options.args))
+    sys.exit(c.onecmd(" ".join(options.args)))
 
 if __name__ == "__main__":
     main()



More information about the Zodb-checkins mailing list