def test_nosigclean(self):
        # check that we can deactivate sigterm/sigint hooks
        pings = []

        def end():
            pings.append('app ends')

        subscribe(APP_ENDS, end)
        try:
            config = {'global.heartbeat_page': '__heartbeat__',
                      'global.debug_page': '__debug__',
                      'auth.backend': 'services.auth.dummy.DummyAuth',
                      'global.clean_shutdown': False}

            urls = []
            controllers = {}
            app = SyncServerApp(urls, controllers, config,
                                auth_class=self.auth_class)

            # heartbeat should work
            request = make_request("/__heartbeat__")
            app(request)

        finally:
            unsubscribe(APP_ENDS, end)

        # and we should have had no ping
        self.assertEquals(pings, [])
    def test_nosigclean(self):
        # check that we can deactivate sigterm/sigint hooks
        pings = []

        def end():
            pings.append('app ends')

        subscribe(APP_ENDS, end)
        try:
            config = {
                'global.heartbeat_page': '__heartbeat__',
                'global.debug_page': '__debug__',
                'auth.backend': 'services.auth.dummy.DummyAuth',
                'global.clean_shutdown': False
            }

            urls = []
            controllers = {}
            app = SyncServerApp(urls,
                                controllers,
                                config,
                                auth_class=self.auth_class)

            # heartbeat should work
            request = make_request("/__heartbeat__")
            app(request)

        finally:
            unsubscribe(APP_ENDS, end)

        # and we should have had no ping
        self.assertEquals(pings, [])
    def test_events(self):

        pings = []

        def starts(request):
            pings.append('starts')

        def ends(response):
            pings.append('ends')

        subscribe(REQUEST_STARTS, starts)
        subscribe(REQUEST_ENDS, ends)
        try:
            config = {
                'global.heartbeat_page': '__heartbeat__',
                'global.debug_page': '__debug__',
                'auth.backend': 'services.auth.dummy.DummyAuth'
            }
            urls = []
            controllers = {}
            app = SyncServerApp(urls,
                                controllers,
                                config,
                                auth_class=self.auth_class)
            request = make_request("/user/__hearbeat__")
            app(request)
        finally:
            unsubscribe(REQUEST_STARTS, starts)
            unsubscribe(REQUEST_ENDS, ends)

        self.assertEquals(pings, ['starts', 'ends'])
    def test_events(self):

        pings = []

        def starts(request):
            pings.append('starts')

        def ends(response):
            pings.append('ends')

        subscribe(REQUEST_STARTS, starts)
        subscribe(REQUEST_ENDS, ends)
        try:
            config = {'global.heartbeat_page': '__heartbeat__',
                      'global.debug_page': '__debug__',
                      'auth.backend': 'services.auth.dummy.DummyAuth'}
            urls = []
            controllers = {}
            app = SyncServerApp(urls, controllers, config,
                                auth_class=self.auth_class)
            request = make_request("/user/__hearbeat__")
            app(request)
        finally:
            unsubscribe(REQUEST_STARTS, starts)
            unsubscribe(REQUEST_ENDS, ends)

        self.assertEquals(pings, ['starts', 'ends'])
    def test_graceful_shutdown(self):

        pings = []

        def end():
            pings.append('app ends')

        subscribe(APP_ENDS, end)
        try:
            config = {'global.heartbeat_page': '__heartbeat__',
                      'global.debug_page': '__debug__',
                      'auth.backend': 'services.auth.dummy.DummyAuth',
                      'global.graceful_shutdown_interval': 1,
                      'global.hard_shutdown_interval': 1}

            urls = []
            controllers = {}
            app = SyncServerApp(urls, controllers, config,
                                auth_class=self.auth_class)

            # heartbeat should work
            request = make_request("/__heartbeat__")
            app(request)

            # let's "kill it" in a thread
            class Killer(threading.Thread):
                def __init__(self, app):
                    threading.Thread.__init__(self)
                    self.app = app

                def run(self):
                    self.app._sigterm(None, None)

            killer = Killer(app)
            killer.start()
            sleep(0.2)

            # in the meantime, /heartbeat should return a 503
            request = make_request("/__heartbeat__")
            self.assertRaises(HTTPServiceUnavailable, app, request)

            # but regular requests should still work
            request = make_request("/")
            app(request)

            # sleeping
            sleep(1.)

            # now / should 503 too
            request = make_request("/")
            self.assertRaises(HTTPServiceUnavailable, app, request)

            killer.join()

        finally:
            unsubscribe(APP_ENDS, end)

        # and we should have had a event ping
        self.assertEquals(pings, ['app ends'])
 def __init__(self, *args, **kw):
     self._client = Client(*args, **kw)
     self.pool = ThreadMappedPool(self._client)
     # using a locker to avoid race conditions
     # when several clients for the same user
     # get/set the cached data
     self._locker = threading.RLock()
     subscribe(REQUEST_ENDS, self._cleanup_pool)
 def __init__(self, *args, **kw):
     self._client = Client(*args, **kw)
     self.pool = ThreadMappedPool(self._client)
     # using a locker to avoid race conditions
     # when several clients for the same user
     # get/set the cached data
     self._locker = threading.RLock()
     subscribe(REQUEST_ENDS, self._cleanup_pool)
Exemple #8
0
    def test_host_config(self):
        def alice(data):
            data.append('alice')

        def bob(data):
            data.append('bob')

        subscribe('yo', alice)
        subscribe('yo', bob)
        subscribe('yo', bob)  # will be ignored
        stuff = []

        notify('yo', stuff)
        self.assertEquals(stuff, ['alice', 'bob'])

        unsubscribe('yo', alice)
        notify('yo', stuff)
        self.assertEquals(stuff, ['alice', 'bob', 'bob'])
Exemple #9
0
    def test_host_config(self):

        def alice(data):
            data.append('alice')

        def bob(data):
            data.append('bob')

        subscribe('yo', alice)
        subscribe('yo', bob)
        subscribe('yo', bob)   # will be ignored
        stuff = []

        notify('yo', stuff)
        self.assertEquals(stuff, ['alice', 'bob'])

        unsubscribe('yo', alice)
        notify('yo', stuff)
        self.assertEquals(stuff, ['alice', 'bob', 'bob'])
    def test_graceful_shutdown(self):

        pings = []

        def end():
            pings.append('app ends')

        subscribe(APP_ENDS, end)
        try:
            config = {
                'global.heartbeat_page': '__heartbeat__',
                'global.debug_page': '__debug__',
                'auth.backend': 'services.auth.dummy.DummyAuth',
                'global.graceful_shutdown_interval': 1,
                'global.hard_shutdown_interval': 1
            }

            urls = []
            controllers = {}
            app = SyncServerApp(urls,
                                controllers,
                                config,
                                auth_class=self.auth_class)

            # heartbeat should work
            request = make_request("/__heartbeat__")
            app(request)

            # let's "kill it" in a thread
            class Killer(threading.Thread):
                def __init__(self, app):
                    threading.Thread.__init__(self)
                    self.app = app

                def run(self):
                    self.app._sigterm(None, None)

            killer = Killer(app)
            killer.start()
            sleep(0.2)

            # in the meantime, /heartbeat should return a 503
            request = make_request("/__heartbeat__")
            self.assertRaises(HTTPServiceUnavailable, app, request)

            # but regular requests should still work
            request = make_request("/")
            app(request)

            # sleeping
            sleep(1.)

            # now / should 503 too
            request = make_request("/")
            self.assertRaises(HTTPServiceUnavailable, app, request)

            killer.join()

        finally:
            unsubscribe(APP_ENDS, end)

        # and we should have had a event ping
        self.assertEquals(pings, ['app ends'])