def test_error_deferred_body(self): d = defer.Deferred() def echo(x): d2 = defer.Deferred() def cb(result): raise IndexError reactor.callLater(0, lambda: d2.callback(None)) d2.addCallback(cb) return d2 gw = _twisted.TwistedGateway({'echo': echo}, expose_request=False) proc = _twisted.AMF0RequestProcessor(gw) request = remoting.Request('echo', envelope=remoting.Envelope()) request.body = ['a'] def cb(result): try: self.assertTrue(isinstance(result, remoting.Response)) self.assertTrue(result.status, remoting.STATUS_ERROR) self.assertTrue(isinstance(result.body, remoting.ErrorFault)) self.assertEquals(result.body.code, 'IndexError') except: d.errback() else: d.callback(None) proc(request).addCallback(cb).addErrback(lambda x: d.errback()) return d
def getProcessor(self, *args, **kwargs): """ Return an L{twisted.AMF0RequestProcessor} attached to a gateway. Supply the gateway args/kwargs. """ self.gw = twisted.TwistedGateway(*args, **kwargs) self.processor = twisted.AMF0RequestProcessor(self.gw) return self.processor
def test_unknown_service_request(self): gw = _twisted.TwistedGateway({'echo': lambda x: x}) proc = _twisted.AMF0RequestProcessor(gw) request = remoting.Request('sdf') d = proc(request) self.assertTrue(isinstance(d, defer.Deferred)) response = d.result self.assertTrue(isinstance(response, remoting.Response)) self.assertTrue(response.status, remoting.STATUS_ERROR) self.assertTrue(isinstance(response.body, remoting.ErrorFault))
def test_preprocessor(self): d = defer.Deferred() def preprocessor(service_request): d.callback(None) gw = _twisted.TwistedGateway({'echo': lambda x: x}, preprocessor=preprocessor) proc = _twisted.AMF0RequestProcessor(gw) request = remoting.Request('echo', envelope=remoting.Envelope()) proc(request).addErrback(lambda failure: d.errback()) return d
def test_error_body(self): def echo(x): raise KeyError gw = _twisted.TwistedGateway({'echo': echo}) proc = _twisted.AMF0RequestProcessor(gw) request = remoting.Request('echo', envelope=remoting.Envelope()) d = proc(request) self.assertTrue(isinstance(d, defer.Deferred)) response = d.result self.assertTrue(isinstance(response, remoting.Response)) self.assertTrue(response.status, remoting.STATUS_ERROR) self.assertTrue(isinstance(response.body, remoting.ErrorFault)) self.assertEquals(response.body.code, 'KeyError')
def test_auth_fail(self): def auth(u, p): return False gw = _twisted.TwistedGateway({'echo': lambda x: x}, authenticator=auth) proc = _twisted.AMF0RequestProcessor(gw) request = remoting.Request('echo', envelope=remoting.Envelope()) d = proc(request) self.assertTrue(isinstance(d, defer.Deferred)) response = d.result self.assertTrue(isinstance(response, remoting.Response)) self.assertTrue(response.status, remoting.STATUS_ERROR) self.assertTrue(isinstance(response.body, remoting.ErrorFault)) self.assertEquals(response.body.code, 'AuthenticationError')
def test_error_preprocessor(self): def preprocessor(service_request): raise IndexError gw = _twisted.TwistedGateway({'echo': lambda x: x}, preprocessor=preprocessor) proc = _twisted.AMF0RequestProcessor(gw) request = remoting.Request('echo', envelope=remoting.Envelope()) d = proc(request) self.assertTrue(isinstance(d, defer.Deferred)) response = d.result self.assertTrue(isinstance(response, remoting.Response)) self.assertTrue(response.status, remoting.STATUS_ERROR) self.assertTrue(isinstance(response.body, remoting.ErrorFault)) self.assertEquals(response.body.code, 'IndexError')
def test_deferred_auth(self): d = defer.Deferred() def auth(u, p): return reactor.callLater(0, lambda: True) gw = _twisted.TwistedGateway({'echo': lambda x: x}, authenticator=auth) proc = _twisted.AMF0RequestProcessor(gw) request = remoting.Request('echo', envelope=remoting.Envelope()) def cb(result): self.assertTrue(result) d.callback(None) proc(request).addCallback(cb).addErrback(lambda failure: d.errback()) return d
def test_exposed_preprocessor(self): d = defer.Deferred() def preprocessor(http_request, service_request): return reactor.callLater(0, lambda: True) preprocessor = gateway.expose_request(preprocessor) gw = _twisted.TwistedGateway({'echo': lambda x: x}, preprocessor=preprocessor) proc = _twisted.AMF0RequestProcessor(gw) request = remoting.Request('echo', envelope=remoting.Envelope()) def cb(result): self.assertTrue(result) d.callback(None) proc(request).addCallback(cb).addErrback(lambda failure: d.errback()) return d