예제 #1
0
    def setUp(self):
        import cyclone.web
        from autobahn.twisted.websocket import WebSocketServerFactory
        from autobahn.twisted.resource import WebSocketResource
        from autopush.main import skip_request_logging
        from autopush.endpoint import EndpointHandler, MessageHandler, RegistrationHandler
        from autopush.settings import AutopushSettings
        from autopush.websocket import (
            PushServerProtocol,
            RouterHandler,
            NotificationHandler,
            DefaultResource,
            StatusResource,
        )
        from twisted.web.server import Site

        router_table = os.environ.get("ROUTER_TABLE", "router_int_test")
        storage_table = os.environ.get("STORAGE_TABLE", "storage_int_test")
        message_table = os.environ.get("MESSAGE_TABLE", "message_int_test")

        settings = AutopushSettings(
            hostname="localhost",
            statsd_host=None,
            endpoint_port="9020",
            router_port="9030",
            router_tablename=router_table,
            storage_tablename=storage_table,
            message_tablename=message_table,
        )

        # Websocket server
        self._ws_url = "ws://localhost:9010/"
        factory = WebSocketServerFactory(self._ws_url, debug=False)
        factory.protocol = PushServerProtocol
        factory.protocol.ap_settings = settings
        factory.setProtocolOptions(webStatus=False, openHandshakeTimeout=5)
        settings.factory = factory
        resource = DefaultResource(WebSocketResource(factory))
        resource.putChild("status", StatusResource())
        self.websocket = reactor.listenTCP(9010, Site(resource))

        # Websocket HTTP router
        # Internal HTTP notification router
        r = RouterHandler
        r.ap_settings = settings
        n = NotificationHandler
        n.ap_settings = settings
        ws_site = cyclone.web.Application(
            [(r"/push/([^\/]+)", r), (r"/notif/([^\/]+)(/([^\/]+))?", n)],
            default_host=settings.router_hostname,
            log_function=skip_request_logging,
            debug=False,
        )
        self.ws_website = reactor.listenTCP(9030, ws_site)

        # Endpoint HTTP router
        site = cyclone.web.Application(
            [
                (r"/push/([^\/]+)", EndpointHandler, dict(ap_settings=settings)),
                (r"/m/([^\/]+)", MessageHandler, dict(ap_settings=settings)),
                # PUT /register/ => connect info
                # GET /register/uaid => chid + endpoint
                (r"/register(?:/(.+))?", RegistrationHandler, dict(ap_settings=settings)),
            ],
            default_host=settings.hostname,
            log_function=skip_request_logging,
            debug=False,
        )
        self.website = reactor.listenTCP(9020, site)
        self._settings = settings
예제 #2
0
    def setUp(self):
        import cyclone.web
        from autobahn.twisted.websocket import WebSocketServerFactory
        from autobahn.twisted.resource import WebSocketResource
        from autopush.main import skip_request_logging
        from autopush.endpoint import (
            EndpointHandler,
            MessageHandler,
            RegistrationHandler,
        )
        from autopush.settings import AutopushSettings
        from autopush.websocket import (
            PushServerProtocol,
            RouterHandler,
            NotificationHandler,
            DefaultResource,
            StatusResource,
        )
        from twisted.web.server import Site

        router_table = os.environ.get("ROUTER_TABLE", "router_int_test")
        storage_table = os.environ.get("STORAGE_TABLE", "storage_int_test")
        message_table = os.environ.get("MESSAGE_TABLE", "message_int_test")

        settings = AutopushSettings(
            hostname="localhost",
            statsd_host=None,
            endpoint_port="9020",
            router_port="9030",
            router_tablename=router_table,
            storage_tablename=storage_table,
            message_tablename=message_table,
        )

        # Websocket server
        self._ws_url = "ws://localhost:9010/"
        factory = WebSocketServerFactory(self._ws_url, debug=False)
        factory.protocol = PushServerProtocol
        factory.protocol.ap_settings = settings
        factory.setProtocolOptions(
            webStatus=False,
            maxFramePayloadSize=2048,
            maxMessagePayloadSize=2048,
            openHandshakeTimeout=5,
        )
        settings.factory = factory
        resource = DefaultResource(WebSocketResource(factory))
        resource.putChild("status", StatusResource())
        self.websocket = reactor.listenTCP(9010, Site(resource))

        # Websocket HTTP router
        # Internal HTTP notification router
        r = RouterHandler
        r.ap_settings = settings
        n = NotificationHandler
        n.ap_settings = settings
        ws_site = cyclone.web.Application(
            [
                (r"/push/([^\/]+)", r),
                (r"/notif/([^\/]+)(/([^\/]+))?", n),
            ],
            default_host=settings.router_hostname,
            log_function=skip_request_logging,
            debug=False,
        )
        self.ws_website = reactor.listenTCP(9030, ws_site)

        # Endpoint HTTP router
        site = cyclone.web.Application(
            [
                (r"/push/([^\/]+)", EndpointHandler,
                 dict(ap_settings=settings)),
                (r"/m/([^\/]+)", MessageHandler, dict(ap_settings=settings)),
                # PUT /register/ => connect info
                # GET /register/uaid => chid + endpoint
                (r"/register(?:/(.+))?", RegistrationHandler,
                 dict(ap_settings=settings)),
            ],
            default_host=settings.hostname,
            log_function=skip_request_logging,
            debug=False,
        )
        self.website = reactor.listenTCP(9020, site)
        self._settings = settings