def make_server(processor):
     """
     Creates a TCppServer given a processor. This is the function used
     internally, but it may be of interest separately as well.
     """
     server = TCppServer(processor)
     server.setPort(0)
     server.setNumCPUWorkerThreads(1)
     server.setNumIOWorkerThreads(1)
     server.setNewSimpleThreadManager(1, 5, False, 50)
     return server
Beispiel #2
0
class TestServer(BaseFacebookTestCase):
    def setUp(self):
        super(TestServer, self).setUp()
        processor = SleepService.Processor(SleepHandler())
        self.server = TCppServer(processor)
        self.addCleanup(self.stopServer)
        # Let the kernel choose a port.
        self.server.setPort(0)
        self.server_thread = threading.Thread(target=self.server.serve)
        self.server_thread.start()

        for t in range(30):
            addr = self.server.getAddress()
            if addr:
                break
            time.sleep(0.1)

        self.assertTrue(addr)

        self.server_port = addr[1]

    def stopServer(self):
        if self.server:
            self.server.stop()
            self.server = None

    def testSpace(self):
        space = SpaceProcess(self.server_port)
        space.start()
        space.join()

        self.stopServer()

        self.assertEquals(space.exitcode, 0)

    def testParallel(self):
        parallel = ParallelProcess(self.server_port)
        parallel.start()
        start_time = time.time()
        # this should take about 3 seconds.  In practice on an unloaded
        # box, it takes about 3.6 seconds.
        parallel.join()

        duration = time.time() - start_time
        print("total time = {}".format(duration))

        self.stopServer()

        self.assertEqual(parallel.exitcode, 0)
        self.assertLess(duration, 5)
 def make_server(processor):
     """
     Creates a TCppServer given a processor. This is the function used
     internally, but it may be of interest separately as well.
     """
     server = TCppServer(processor)
     server.setPort(0)
     server.setNumCPUWorkerThreads(1)
     server.setNumIOWorkerThreads(1)
     server.setNewSimpleThreadManager(count=1,
                                      pendingTaskCountMax=5,
                                      enableTaskStats=False,
                                      maxQueueLen=50)
     return server
Beispiel #4
0
class TestServer(BaseFacebookTestCase):
    def getProcessor(self):
        processor = SleepService.Processor(
                SleepHandler(self.noop_event, self.shutdown_event))
        self.event_handler = SleepProcessorEventHandler()
        processor.setEventHandler(self.event_handler)
        return processor

    def setUp(self):
        super(TestServer, self).setUp()
        self.noop_event = threading.Event()
        self.shutdown_event = threading.Event()
        self.serverEventHandler = TestServerEventHandler()
        self.server = TCppServer(self.getProcessor())
        self.server.setServerEventHandler(self.serverEventHandler)
        self.addCleanup(self.stopServer)
        # Let the kernel choose a port.
        self.server.setPort(0)
        self.server_thread = threading.Thread(target=self.server.serve)
        self.server_thread.start()

        for t in range(30):
            addr = self.server.getAddress()
            if addr:
                break
            time.sleep(0.1)

        self.assertTrue(addr)

        self.server_addr = addr

    def stopServer(self):
        if self.server:
            self.server.stop()
            self.server = None
Beispiel #5
0
class TestServer(BaseFacebookTestCase):
    def getProcessor(self):
        processor = SleepService.Processor(SleepHandler(self.noop_event))
        self.event_handler = SleepProcessorEventHandler()
        processor.setEventHandler(self.event_handler)
        return processor

    def setUp(self):
        super(TestServer, self).setUp()
        self.noop_event = threading.Event()
        self.serverEventHandler = TestServerEventHandler()
        self.server = TCppServer(self.getProcessor())
        self.server.setServerEventHandler(self.serverEventHandler)
        self.addCleanup(self.stopServer)
        # Let the kernel choose a port.
        self.server.setPort(0)
        self.server_thread = threading.Thread(target=self.server.serve)
        self.server_thread.start()

        for t in range(30):
            addr = self.server.getAddress()
            if addr:
                break
            time.sleep(0.1)

        self.assertTrue(addr)

        self.server_addr = addr

    def stopServer(self):
        if self.server:
            self.server.stop()
            self.server = None
 def make_server(processor):
     """
     Creates a TCppServer given a processor. This is the function used
     internally, but it may be of interest separately as well.
     """
     server = TCppServer(processor)
     server.setPort(0)
     server.setNumCPUWorkerThreads(1)
     server.setNumIOWorkerThreads(1)
     server.setNewSimpleThreadManager(
         count=1,
         pendingTaskCountMax=5,
         enableTaskStats=False
     )
     return server
Beispiel #7
0
    def initTask(self):
        """Overridden to bind sockets, etc"""
        super(CPPServerTask, self).initTask()

        self._stopped = False

        self.server = TCppServer(self.processor)
        # TODO: There is no API to set host yet.
        # self.server.setHost(self.host)
        self.server.setPort(self.port)
        self.server.setNWorkerThreads(self.num_threads)
        self.server.setup()

        self.bound_addrs = [self.server.getAddress()]

        for addrinfo in self.bound_addrs:
            self.bound_host, self.bound_port = addrinfo[0:2]
            self.logger.info(
                "%s Server Started on %s", self.name,
                self._fmt_hostport(self.bound_host, self.bound_port))
Beispiel #8
0
    def setUp(self):
        super(TestServer, self).setUp()
        self.noop_event = threading.Event()
        self.serverEventHandler = TestServerEventHandler()
        self.server = TCppServer(self.getProcessor())
        self.server.setServerEventHandler(self.serverEventHandler)
        self.addCleanup(self.stopServer)
        # Let the kernel choose a port.
        self.server.setPort(0)
        self.server_thread = threading.Thread(target=self.server.serve)
        self.server_thread.start()

        for t in range(30):
            addr = self.server.getAddress()
            if addr:
                break
            time.sleep(0.1)

        self.assertTrue(addr)

        self.server_addr = addr
Beispiel #9
0
    def initTask(self):
        """Overridden to bind sockets, etc"""
        super(CPPServerTask, self).initTask()

        self._stopped = False

        self.server = TCppServer(self.processor)
        # TODO: There is no API to set host yet.
        # self.server.setHost(self.host)
        self.server.setPort(self.port)
        self.server.setNWorkerThreads(self.num_threads)
        self.server.setup()

        self.bound_addrs = [self.server.getAddress()]

        for addrinfo in self.bound_addrs:
            self.bound_host, self.bound_port = addrinfo[0:2]
            self.logger.info("%s Server Started on %s", self.name,
                self._fmt_hostport(self.bound_host, self.bound_port))
Beispiel #10
0
    def setUp(self):
        super(TestServer, self).setUp()
        processor = SleepService.Processor(SleepHandler())
        self.server = TCppServer(processor)
        self.addCleanup(self.stopServer)
        # Let the kernel choose a port.
        self.server.setPort(0)
        self.server_thread = threading.Thread(target=self.server.serve)
        self.server_thread.start()

        for t in range(30):
            addr = self.server.getAddress()
            if addr:
                break
            time.sleep(0.1)

        self.assertTrue(addr)

        self.server_port = addr[1]
Beispiel #11
0
    def setUp(self):
        super(TestServer, self).setUp()
        self.noop_event = threading.Event()
        self.serverEventHandler = TestServerEventHandler()
        self.server = TCppServer(self.getProcessor())
        self.server.setServerEventHandler(self.serverEventHandler)
        self.addCleanup(self.stopServer)
        # Let the kernel choose a port.
        self.server.setPort(0)
        self.server_thread = threading.Thread(target=self.server.serve)
        self.server_thread.start()

        for t in range(30):
            addr = self.server.getAddress()
            if addr:
                break
            time.sleep(0.1)

        self.assertTrue(addr)

        self.server_addr = addr
Beispiel #12
0
class CPPServerTask(ThriftServerTask):
    """Spin up a thrift TNonblockingServer in a sparts worker thread"""
    # DEFAULT_HOST = '0.0.0.0'
    DEFAULT_PORT = 0
    OPT_PREFIX = 'thrift'

    bound_host = bound_port = None

    # host = option(default=lambda cls: cls.DEFAULT_HOST, metavar='HOST',
    #               help='Address to bind server to [%(default)s]')
    port = option(default=lambda cls: cls.DEFAULT_PORT,
                  type=int, metavar='PORT',
                  help='Port to run server on [%(default)s]')
    num_threads = option(name='threads', default=4, type=int, metavar='N',
                         help='Server Worker Threads [%(default)s]')

    def initTask(self):
        """Overridden to bind sockets, etc"""
        super(CPPServerTask, self).initTask()

        self._stopped = False

        self.server = TCppServer(self.processor)
        # TODO: There is no API to set host yet.
        # self.server.setHost(self.host)
        self.server.setPort(self.port)
        self.server.setNWorkerThreads(self.num_threads)
        self.server.setup()

        self.bound_addrs = [self.server.getAddress()]

        for addrinfo in self.bound_addrs:
            self.bound_host, self.bound_port = addrinfo[0:2]
            self.logger.info("%s Server Started on %s", self.name,
                self._fmt_hostport(self.bound_host, self.bound_port))

    def _fmt_hostport(self, host, port):
        if ':' in host:
            return '[%s]:%d' % (host, port)
        else:
            return '%s:%d' % (host, port)

    def stop(self):
        """Overridden to tell the thrift server to shutdown asynchronously"""
        self.server.stop()

    def _runloop(self):
        """Overridden to execute TNonblockingServer's main loop"""
        self.server.serve()
Beispiel #13
0
class TestServer(BaseFacebookTestCase):
    def setUp(self):
        super(TestServer, self).setUp()
        self.noop_event = threading.Event()
        processor = SleepService.Processor(SleepHandler(self.noop_event))
        self.event_handler = SleepProcessorEventHandler()
        processor.setEventHandler(self.event_handler)
        self.serverEventHandler = TestServerEventHandler()
        self.server = TCppServer(processor)
        self.server.setServerEventHandler(self.serverEventHandler)
        self.addCleanup(self.stopServer)
        # Let the kernel choose a port.
        self.server.setPort(0)
        self.server_thread = threading.Thread(target=self.server.serve)
        self.server_thread.start()

        for t in range(30):
            addr = self.server.getAddress()
            if addr:
                break
            time.sleep(0.1)

        self.assertTrue(addr)

        self.server_addr = addr

    def stopServer(self):
        if self.server:
            self.server.stop()
            self.server = None

    def testSpace(self):
        space = SpaceProcess(self.server_addr)
        space.start()
        client_sockname, client_peername = space.queue.get()
        space.join()

        self.stopServer()

        self.assertEquals(space.exitcode, 0)
        self.assertEquals(self.event_handler.last_peer_name, client_sockname)
        self.assertEquals(self.event_handler.last_sock_name, client_peername)
        self.assertEquals(self.serverEventHandler.connCreated, 1)
        self.assertEquals(self.serverEventHandler.connDestroyed, 1)

    def testParallel(self):
        parallel = ParallelProcess(self.server_addr)
        parallel.start()
        start_time = time.time()
        # this should take about 3 seconds.  In practice on an unloaded
        # box, it takes about 3.6 seconds.
        parallel.join()

        duration = time.time() - start_time
        print("total time = {}".format(duration))

        self.stopServer()

        self.assertEqual(parallel.exitcode, 0)
        self.assertLess(duration, 5)

    def testOneway(self):
        oneway = OnewayProcess(self.server_addr)
        oneway.start()
        oneway.join()

        self.stopServer()

        self.assertTrue(self.noop_event.wait(5))
Beispiel #14
0
class CPPServerTask(ThriftServerTask):
    """Spin up a thrift TNonblockingServer in a sparts worker thread"""
    # DEFAULT_HOST = '0.0.0.0'
    DEFAULT_PORT = 0
    OPT_PREFIX = 'thrift'

    bound_host = bound_port = None

    # host = option(default=lambda cls: cls.DEFAULT_HOST, metavar='HOST',
    #               help='Address to bind server to [%(default)s]')
    port = option(default=lambda cls: cls.DEFAULT_PORT,
                  type=int,
                  metavar='PORT',
                  help='Port to run server on [%(default)s]')
    num_threads = option(name='threads',
                         default=4,
                         type=int,
                         metavar='N',
                         help='Server Worker Threads [%(default)s]')

    def initTask(self):
        """Overridden to bind sockets, etc"""
        super(CPPServerTask, self).initTask()

        self._stopped = False

        self.server = TCppServer(self.processor)
        # TODO: There is no API to set host yet.
        # self.server.setHost(self.host)
        self.server.setPort(self.port)
        self.server.setNWorkerThreads(self.num_threads)
        self.server.setup()

        self.bound_addrs = [self.server.getAddress()]

        for addrinfo in self.bound_addrs:
            self.bound_host, self.bound_port = addrinfo[0:2]
            self.logger.info(
                "%s Server Started on %s", self.name,
                self._fmt_hostport(self.bound_host, self.bound_port))

    def _fmt_hostport(self, host, port):
        if ':' in host:
            return '[%s]:%d' % (host, port)
        else:
            return '%s:%d' % (host, port)

    def stop(self):
        """Overridden to tell the thrift server to shutdown asynchronously"""
        self.server.stop()

    def _runloop(self):
        """Overridden to execute TNonblockingServer's main loop"""
        self.server.serve()
Beispiel #15
0
class TestServer(BaseFacebookTestCase):
    def setUp(self):
        super(TestServer, self).setUp()
        self.noop_event = threading.Event()
        processor = SleepService.Processor(SleepHandler(self.noop_event))
        self.event_handler = SleepProcessorEventHandler()
        processor.setEventHandler(self.event_handler)
        self.serverEventHandler = TestServerEventHandler()
        self.server = TCppServer(processor)
        self.server.setServerEventHandler(self.serverEventHandler)
        self.addCleanup(self.stopServer)
        # Let the kernel choose a port.
        self.server.setPort(0)
        self.server_thread = threading.Thread(target=self.server.serve)
        self.server_thread.start()

        for t in range(30):
            addr = self.server.getAddress()
            if addr:
                break
            time.sleep(0.1)

        self.assertTrue(addr)

        self.server_addr = addr

    def stopServer(self):
        if self.server:
            self.server.stop()
            self.server = None

    def testSpace(self):
        space = SpaceProcess(self.server_addr)
        space.start()
        client_sockname, client_peername = space.queue.get()
        space.join()

        self.stopServer()

        self.assertEquals(space.exitcode, 0)
        self.assertEquals(self.event_handler.last_peer_name, client_sockname)
        self.assertEquals(self.event_handler.last_sock_name, client_peername)
        self.assertEquals(self.serverEventHandler.connCreated, 1)
        self.assertEquals(self.serverEventHandler.connDestroyed, 1)

    def testParallel(self):
        parallel = ParallelProcess(self.server_addr)
        parallel.start()
        start_time = time.time()
        # this should take about 3 seconds.  In practice on an unloaded
        # box, it takes about 3.6 seconds.
        parallel.join()

        duration = time.time() - start_time
        print("total time = {}".format(duration))

        self.stopServer()

        self.assertEqual(parallel.exitcode, 0)
        self.assertLess(duration, 5)

    def testOneway(self):
        oneway = OnewayProcess(self.server_addr)
        oneway.start()
        oneway.join()

        self.stopServer()

        self.assertTrue(self.noop_event.wait(5))
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

from fb303.ContextFacebookBase import ContextFacebookBase
from thrift.Thrift import TProcessorEventHandler
from thrift.server.TCppServer import TCppServer

from test.reverse import ReverseService, ttypes

class ReverseEventHandler(TProcessorEventHandler):
    def getHandlerContext(self, fn_name, server_context):
        return server_context

class ReverseHandler(ContextFacebookBase,
                     ReverseService.ContextIface):
    def __init__(self):
        ContextFacebookBase.__init__(self, "reverse")

    def reverse(self, handler_ctx, req):
        print("client_principal is {}".format(handler_ctx.getClientPrincipal()))
        return ttypes.Response(str="".join(reversed(req.str)))

processor = ReverseService.ContextProcessor(ReverseHandler())
processor.setEventHandler(ReverseEventHandler())

server = TCppServer(processor)
server.setPort(9999)
server.serve()