summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Sommerseth <davids@redhat.com>2010-05-14 20:59:42 +0200
committerDavid Sommerseth <davids@redhat.com>2010-05-14 20:59:42 +0200
commit883e6a6663b04126a16db682f3ed2c2241d48fa0 (patch)
tree8015662aba15f5ce22ff2a46493211f30da94ddc
parent09c18db0baebb77c02de066638ad2ed27edb15cc (diff)
downloadrteval-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.py36
-rw-r--r--server/testclient.py18
-rw-r--r--server/unittest.py90
-rwxr-xr-xunit-tests/unittest.py3
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()