tests/xmlrpc.py
author Sandro Knauß <knauss@netzguerilla.net>
Sun, 22 Jan 2012 02:37:31 +0100
branchdevel
changeset 104 1d93f1ddfd16
parent 102 85ac86f7ffc4
child 105 48f2b8adc7da
permissions -rw-r--r--
saubere requirements

from multiprocessing import Process, Pool
from sqlalchemy import create_engine

from time import sleep

from tempfile import mkdtemp
import shutil

from iro.controller.database import createDatabase,WithSession, DBDefer
import iro.controller.user as imuser
import iro.controller.database as db

from iro.model import User

from ngdatabase.mysql import Server,createConfig,Database

class SampleDatabase(Database):
    def createPassword(self):
        self.password="test"
        return self.password

import logging
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(name)s(%(processName)s)-%(levelname)s: %(message)s')


def xxxxx(userid):
    import xmlrpclib
    return xmlrpclib.ServerProxy('http://localhost:7080/RPC2').status(userid)

def main():
    from twisted.internet import reactor
    from twisted.web import xmlrpc, server
    
    from iro.view.xmlrpc import getResource
    
    class XMLRPCDebug(xmlrpc.XMLRPC): 
        def xmlrpc_stop(self):
            reactor.callLater(0.5,reactor.stop)
            return ""

    root=getResource()
    root.putChild('debug', XMLRPCDebug())
    reactor.listenTCP(7080, server.Site(root))
    reactor.suggestThreadPoolSize(5)
    reactor.run()

if __name__ == '__main__':
    tdir = mkdtemp(prefix='iro-mysql-')
    try:
        with open('%s/my.cnf'%tdir,'w') as cnf:
            cnf.write(createConfig(tdir))
        s = Server('%s/my.cnf'%tdir)
        s.create()
        s.start()
        d=SampleDatabase("test","test",'%s/my.cnf'%tdir)
        d.create()
        db.engine = create_engine('mysql://test:test@localhost/test?unix_socket=%s/socket'%tdir)
        dbdefer = DBDefer('mysql://test:test@localhost/test?unix_socket=%s/socket'%tdir, pool_size=5)

        @dbdefer
        def getuser(userhash, session):
            session.execute("SELECT SLEEP(10)")
            return imuser._getuser(userhash = userhash, session=session) 
        imuser.dbdefer=dbdefer
        imuser._getuser=imuser.getuser
        imuser.getuser=getuser


        try:
            createDatabase()
            with WithSession(autocommit=True) as session:
                session.add(User(name='test',apikey='abcdef123456789'))
            p = Process(target=main)
            p.start()
            sleep(1)
            pool=Pool(5)
            print pool.map(xxxxx, ('abcdef123456789',)*25)
            p.join()
        finally:
            s.stop()
    finally:
        shutil.rmtree(tdir)