diff options
author | David Sommerseth <davids@redhat.com> | 2010-05-14 20:59:42 +0200 |
---|---|---|
committer | David Sommerseth <davids@redhat.com> | 2010-05-14 20:59:42 +0200 |
commit | 883e6a6663b04126a16db682f3ed2c2241d48fa0 (patch) | |
tree | 8015662aba15f5ce22ff2a46493211f30da94ddc | |
parent | 09c18db0baebb77c02de066638ad2ed27edb15cc (diff) | |
download | rteval-883e6a6663b04126a16db682f3ed2c2241d48fa0.tar.gz rteval-883e6a6663b04126a16db682f3ed2c2241d48fa0.tar.xz rteval-883e6a6663b04126a16db682f3ed2c2241d48fa0.zip |
Added first-cut of a unit-test for XML-RPC server/client
-rw-r--r-- | server/rteval_testserver.py | 36 | ||||
-rw-r--r-- | server/testclient.py | 18 | ||||
-rw-r--r-- | server/unittest.py | 90 | ||||
-rwxr-xr-x | unit-tests/unittest.py | 3 |
4 files changed, 128 insertions, 19 deletions
diff --git a/server/rteval_testserver.py b/server/rteval_testserver.py index 927c70a..49bbfd7 100644 --- a/server/rteval_testserver.py +++ b/server/rteval_testserver.py @@ -44,11 +44,39 @@ class RequestHandler(SimpleXMLRPCRequestHandler): rpc_paths = ('/rteval/API1/',) +class RTevald_config(object): + def __init__(self): + self.config = {'datadir': '/tmp/rteval-xmlrpc-testsrv', + 'db_server': 'localhost', + 'db_port': 5432, + 'database': 'dummy', + 'db_username': None, + 'db_password': None} + self.__update_vars() + + def __update_vars(self): + for k in self.config.keys(): + self.__dict__[k] = self.config[k] + + class RTevald(): def __init__(self, options, log): self.options = options self.log = log self.server = None + self.config = RTevald_config() + + def __prepare_datadir(self): + startdir = os.getcwd() + for dir in self.config.datadir.split("/"): + if dir is '': + continue + if not os.path.exists(dir): + os.mkdir(dir, 0700) + os.chdir(dir) + if not os.path.exists('queue'): + os.mkdir('queue', 0700) + os.chdir(startdir) def StartServer(self): # Create server @@ -57,19 +85,21 @@ class RTevald(): self.server.register_introspection_functions() # setup a class to handle requests - self.server.register_instance(xmlrpc_API1.XMLRPC_API1("./testsrv/", nodbaction=True, debug=True)) + self.server.register_instance(xmlrpc_API1.XMLRPC_API1(self.config, nodbaction=True, debug=True)) # Run the server's main loop self.log.Log("StartServer", "Listening on %s:%i" % (self.options.listen, self.options.port)) try: + self.__prepare_datadir() self.server.serve_forever() except KeyboardInterrupt: self.log.Log("StartServer", "Server caught SIGINT") - pass + self.server.shutdown() finally: self.log.Log("StartServer", "Server stopped") - + def StopServer(self): + self.server.shutdown() logger = None diff --git a/server/testclient.py b/server/testclient.py index 09dca6a..9632a7b 100644 --- a/server/testclient.py +++ b/server/testclient.py @@ -48,21 +48,9 @@ d.saveFormatFileEnc('-','UTF-8', 1) print "** Testing API" -client = rtevalclient.rtevalclient("http://localhost:65432/rteval/API1") - -server_fname = client.SendDataAsFile('test.data', "this is just a simple test file, compressed\n") -print "1: File name on server: %s" % server_fname - -server_fname = client.SendDataAsFile('test.data', - "this is just a simple test file, uncompressed server side\n", True) -print "2: File name on server: %s" % server_fname - -server_fname = client.SendFile('test.log') -print "3: File name on server: %s" % server_fname - -server_fname = client.SendFile('test.log', True) -print "4: File name on server: %s" % server_fname +client = rtevalclient.rtevalclient("http://localhost:65432/rteval/API1/") +print "** 1: Hello(): %s" % str(client.Hello()) status = client.SendReport(d) -print "5: SendReport(xmlDoc): %s" % status +print "** 2: SendReport(xmlDoc): %s" % str(status) diff --git a/server/unittest.py b/server/unittest.py new file mode 100644 index 0000000..b22e583 --- /dev/null +++ b/server/unittest.py @@ -0,0 +1,90 @@ +import sys, threading, time, signal, libxml2 +from optparse import OptionParser +from rteval_testserver import RTevald +from Logger import Logger + +sys.path.insert(0,'..') +sys.path.insert(0,'../rteval') +sys.path.insert(0,'rteval') +import rtevalclient + +class ServerThread(threading.Thread): + def __init__(self, port): + threading.Thread.__init__(self) + self.port = port + self.log = Logger('unit-test-server.log','rteval-xmlrpc-testsrv') + + parser = OptionParser() + parser.add_option("-L", "--listen", action="store", dest="listen", default="127.0.0.1", + help="Which interface to listen to [default: %default]", metavar="IPADDR") + parser.add_option("-P", "--port", action="store", type="int", dest="port", default=self.port, + help="Which port to listen to [default: %default]", metavar="PORT") + + (options, args) = parser.parse_args() + + self.child = RTevald(options, self.log) + + def run(self): + self.child.StartServer() + + def stop(self): + self.child.StopServer() + + def sigcatch(self, signum, frame): + print "Shutting down" + self.stop() + + +class ClientTest(object): + def __init__(self, port): + self.client = rtevalclient.rtevalclient("http://localhost:%s/rteval/API1/" % port) + + def __prepare_data(self): + d = libxml2.newDoc("1.0") + n = libxml2.newNode('TestNode1') + d.setRootElement(n) + n2 = n.newTextChild(None, 'TestNode2','Just a little test') + n2.newProp('test','true') + for i in range(1,5): + n2 = n.newTextChild(None, 'TestNode3', 'Test line %i' %i) + self.testdoc = d + + def RunTest(self): + try: + print "** Creating XML test document" + self.__prepare_data() + self.testdoc.saveFormatFileEnc('-','UTF-8', 1) + + print "** Client test [1]: Hello(): %s" % str(self.client.Hello()) + status = self.client.SendReport(self.testdoc) + print "** Client test [2]; SendReport(xmlDoc): %s" % str(status) + except Exception, e: + raise Exception("XML-RPC client test failed: %s" % str(e)) + + +def unit_test(rootdir): + ret = 1 + try: + # Prepare server and client objects + srvthread = ServerThread('65432') + clienttest = ClientTest('65432') + signal.signal(signal.SIGINT, srvthread.sigcatch) + + # Start a local XML-RPC test server + srvthread.start() + print "** Waiting 2 seconds for server to settle" + time.sleep(2) + + # Start the client test + print "** Starting client tests" + clienttest.RunTest() + ret = 0 + except Exception, e: + print "** EXCEPTION: %s" % str(e) + finally: + # Stop the local XML-RPC test server + srvthread.stop() + return ret + +if __name__ == "__main__": + sys.exit(unit_test('..')) diff --git a/unit-tests/unittest.py b/unit-tests/unittest.py index f450cbc..65a3616 100755 --- a/unit-tests/unittest.py +++ b/unit-tests/unittest.py @@ -122,7 +122,8 @@ if __name__ == '__main__': ('rteval','cputopology'), ('rteval','dmi'), ('rteval','rtevalConfig'), - ('rteval','xmlout') + ('rteval','xmlout'), + ('server','unittest') )) # Run all tests tests.RunTests() |