tests/xmlrpc.py
author Sandro Knauß <knauss@netzguerilla.net>
Tue, 10 Jan 2012 06:07:25 +0100
branchdevel
changeset 95 3f41dfd7cb34
parent 92 f479738b4879
child 102 85ac86f7ffc4
permissions -rw-r--r--
ausformulieren des xmlrpc Testes

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.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, echo=True)
        dbdefer = DBDefer('mysql://test:test@localhost/test?unix_socket=%s/socket'%tdir, echo=True)



        @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)