Author: laukpe
Date: Fri Sep 26 12:07:16 2008
New Revision: 841

Modified:
   trunk/proto/remote/run_tests.py

Log:
possibility to stop server started manually, cleanup, better errors

Modified: trunk/proto/remote/run_tests.py
==============================================================================
--- trunk/proto/remote/run_tests.py     (original)
+++ trunk/proto/remote/run_tests.py     Fri Sep 26 12:07:16 2008
@@ -1,11 +1,16 @@
 #!/usr/bin/env python
 """Script for running the remote library tests against different servers.

-Usage: run_tests.py lang [[options] datasources]
+Usage 1: run_tests.py lang [[options] datasources]

-Currently lang can be 'python' or 'ruby'.
-By default, all tests under 'test' directory are run, but this can be changed -by providing options, which can be any Robot Framework command line options.
+Valid languages are 'python', 'jython' or 'ruby'. By default, all
+tests under 'test' directory are run, but this can be changed by
+providing options, which can be any Robot Framework command line
+options.
+
+Usage 2: run_tests.py stop [port]
+
+Stops remote server in specified port. Default port is 8270..
 """
 import sys
 import xmlrpclib
@@ -16,7 +21,10 @@

 class Library:

-    def __init__(self, lang):
+    def __init__(self, lang=None):
+        if lang is None:
+            self._stdout = self._stderr = None
+            return
ext = {'python': 'py', 'jython': 'py', 'ruby': 'rb', 'perl': 'pl'}[lang]
         dirname = lang if lang != 'jython' else 'python'
         cmd = '%s %s/examplelibrary.%s' % (lang, dirname, ext)
@@ -28,20 +36,26 @@
         url = 'http://localhost:%s' % port
         for i in range(attempts):
             try:
-                server = xmlrpclib.ServerProxy(url)
-                server.get_keyword_names()
-            except socket.error:
+                xmlrpclib.ServerProxy(url).get_keyword_names()
+            except socket.error, (errno, errmsg):
                 time.sleep(1)
+            except xmlrpclib.Error, err:
+                errmsg = err.faultString
+                break
             else:
-                print "Server at %s seems to work OK." % url
-                return
- print "Failed to connect to server at %s with %d attempts." % (url, attempts)
+                print "Server is running on port %s." % port
+                return True
+        print "Failed to connect to server on port %s: %s" % (port, errmsg)
+        return False

     def stop(self, port=8270):
-        server = xmlrpclib.ServerProxy('http://localhost:%s' % port)
-        server.stop_remote_server()
-        self._stdout.close()
-        self._stderr.close()
+        if not self.test(port):
+            return
+ xmlrpclib.ServerProxy('http://localhost:%s' % port).stop_remote_server()
+        if self._stdout:
+            self._stdout.close()
+            self._stderr.close()
+        print "Server on port %s stopped." % port


 if __name__ == '__main__':
@@ -49,6 +63,10 @@
         print __doc__
         sys.exit(1)
     lang = sys.argv[1]
+    if lang == 'stop':
+        Library().stop(*sys.argv[2:])
+        sys.exit()
+
     include = lang if lang != 'jython' else 'python'
     args = 'test' if len(sys.argv) == 2 else ' '.join(sys.argv[2:])
     lib = Library(lang)

Reply via email to