Index: postman/daemon.py
===================================================================
--- postman/daemon.py	(revision 6)
+++ postman/daemon.py	(revision 7)
@@ -152,5 +152,8 @@
 
     def _listMethods(self):
-        return list_public_methods(self)
+        public_methods = []
+        public_methods += ['lists.'+i for i in dir(MailingListXMLRPC) if '_' not in i]
+        public_methods += ['members.'+i for i in dir(MemberXMLRPC) if '_' not in i]
+        return public_methods
 
     def _methodHelp(self, method):
@@ -165,4 +168,6 @@
     def add(self, info={}):
         self.postman.add_mailing_list(info)
+    def addresses(self):
+        return self.postman.mailings_addresses
 
 
@@ -185,4 +190,8 @@
         self.configfile = configfile
 
+        # FIXME: These should be loaded from a config file
+        self.address='localhost'
+        self.port = 9000
+        
         self.logfile = os.path.join(os.path.dirname(__file__), 'server.log')
         logging.basicConfig(filename=self.logfile, level=logging.DEBUG)
@@ -196,12 +205,12 @@
         of SimpleXMLRPCServer in that attribute. If there is already a server
         initialized there, simply return True
-        """
-        address='localhost'
-        port = 9000        
+        """           
         if not self.server:
-            msg = 'Creating XMLRPC server object on {}:{}'.format(address,port)
+            msg = 'Creating XMLRPC server object on {}:{}'.format(self.address,
+                                                                  self.port)
             logging.info(msg)
-            self.server = SimpleXMLRPCServer((address, port), allow_none=True,
-                                             logRequests=True)
+            self.server = SimpleXMLRPCServer((self.address, self.port),
+                                             allow_none=True,
+                                             logRequests=False)
             self.server.register_introspection_functions()
         return True
@@ -225,4 +234,5 @@
         self.server.register_instance(root, allow_dotted_names=True)
         self.ready_to_serve = True
+        return self.ready_to_serve
             
     def run(self):
@@ -234,5 +244,10 @@
         if not self.ready_to_serve:
             self.add_methods()
-        msg = 'Starting XMLRPC server on {}:{}'.format(address,port)
+        msg = 'Starting XMLRPC server on {}:{}'.format(self.address,
+                                                       self.port)
         logging.info(msg)
-        self.server.serve_forever()
+        try:
+            self.server.serve_forever()
+        except KeyboardInterrupt:
+            msg = 'Stopping server'
+            logging.info(msg)
Index: postman/tests/daemon.py
===================================================================
--- postman/tests/daemon.py	(revision 6)
+++ postman/tests/daemon.py	(revision 7)
@@ -1,7 +1,9 @@
 # -*- coding: utf-8 -*-
 
-import os, xmlrpclib
+import os, multiprocessing, xmlrpclib
+from SimpleXMLRPCServer import SimpleXMLRPCServer
 from unittest import TestCase
-from postman.daemon import Postman
+
+from postman.daemon import Postman, PostmanXMLRPC, PostmanDaemon
 from postman.models import Member, MailingList
 from postman.storage import JsonStorage as Storage
@@ -126,5 +128,7 @@
     """
     postman.daemon.PostmanDaemon tests.
-    
+
+    Remember to call the .clear() method of postman after each test, so
+    the temp storage files are deleted
     """
     def setUp(self):
@@ -134,5 +138,50 @@
                                         members={}, config=config)
         self.member =  Member('test@example.com')
-        # FIXME: Hardcoded url here, should be picked from a config file
+
+    def test___init__(self):
+        daemon = PostmanDaemon()
+        self.assertIsInstance(daemon, PostmanDaemon)
+        self.assertFalse(daemon.ready_to_serve)
+        # FIXME: More tests should be added here once the configuration
+        # file feature is added        
+
+    def test_create_server(self):
+        daemon = PostmanDaemon()
+        daemon.port = 9001
+        self.assertTrue(daemon.create_server())
+        self.assertIsInstance(daemon.server, SimpleXMLRPCServer)
+        self.assertFalse(daemon.ready_to_serve)
         
-        self.link = xmlrpclib.ServerProxy('http://localhost:9000')
+    def test_add_methods(self):
+        daemon = PostmanDaemon()
+        daemon.port = 9002
+        self.assertTrue(daemon.add_methods())
+        self.assertTrue(daemon.ready_to_serve)
+
+        daemon = PostmanDaemon()
+        daemon.port = 9003        
+        daemon.create_server()
+        self.assertTrue(daemon.add_methods())
+        self.assertTrue(daemon.ready_to_serve)
+        
+    def test_run(self):
+        daemon = PostmanDaemon()
+        daemon.port = 9004
+        # start the daemon in another process, so we can start communicating
+        # with itjobs = []
+        p = multiprocessing.Process(target=daemon.run)
+        p.start()
+        
+        # FIXME: Hardcoded url here, should be picked from a config file        
+        client = xmlrpclib.ServerProxy('http://localhost:9004')
+
+        # Check that we can perform an XMLRPC call and that the list of
+        # available public methods contains the list of methods we have
+        # defined in our base XMLRPC class
+        set_class_methods = set(PostmanXMLRPC()._listMethods())
+        set_xmlrpc_methods = set(client.system.listMethods())
+        self.assertTrue(set_class_methods.issubset(set_xmlrpc_methods))
+        
+        # Stop the server
+        p.terminate()
+        
