def test_async(self): d = defer.Deferred() gw = twisted.TwistedGateway( {'spam.eggs': lambda x: x}, expose_request=False ) proc = twisted.AMF3RequestProcessor(gw) request = remoting.Request('null', body=[ messaging.AsyncMessage( body=[None], destination='spam', operation='eggs') ]) def cb(result): msg = result.body try: self.assertTrue(isinstance(msg, messaging.AcknowledgeMessage)) except: d.errback() else: d.callback(None) proc(request).addCallback(cb).addErrback(lambda failure: d.errback()) return d
def setUp(self): self.gw = _twisted.TwistedGateway(expose_request=False) root = resource.Resource() root.putChild('', self.gw) self.p = reactor.listenTCP(0, server.Site(root), interface="127.0.0.1") self.port = self.p.getHost().port
def test_error_preprocessor(self): def preprocessor(service_request, *args): raise IndexError gw = twisted.TwistedGateway( {'echo': lambda x: x}, expose_request=False, preprocessor=preprocessor ) proc = twisted.AMF3RequestProcessor(gw) request = remoting.Request( 'null', body=[ messaging.RemotingMessage(body=['spam.eggs'], operation='echo') ] ) 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, messaging.ErrorMessage)) self.assertEqual(response.body.faultCode, 'IndexError')
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.AMF3RequestProcessor(gw) request = remoting.Request('null', body=[messaging.RemotingMessage(body=['spam.eggs'], operation='echo')]) def cb(result): try: self.assertTrue(isinstance(result, remoting.Response)) self.assertTrue(result.status, remoting.STATUS_ERROR) self.assertTrue(isinstance(result.body, messaging.ErrorMessage)) self.assertEqual(result.body.faultCode, 'IndexError') except: d.errback() else: d.callback(None) proc(request).addCallback(cb).addErrback(lambda x: d.errback()) return d
def test_destination(self): d = defer.Deferred() gw = _twisted.TwistedGateway({'spam.eggs': lambda x: x}, expose_request=False) proc = _twisted.AMF3RequestProcessor(gw) request = remoting.Request('null', body=[ messaging.RemotingMessage( body=[None], destination='spam', operation='eggs') ]) def cb(result): try: self.assertTrue(result) except: d.errback() else: d.callback(None) proc(request).addCallback(cb).addErrback(lambda failure: d.errback()) return d
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 test_deferred_preprocessor(self): d = defer.Deferred() def preprocessor(u, *args): d2 = defer.Deferred() reactor.callLater(0, lambda: d2.callback(None)) return d2 gw = twisted.TwistedGateway( {'echo': lambda x: x}, expose_request=False, preprocessor=preprocessor ) proc = twisted.AMF3RequestProcessor(gw) request = remoting.Request( 'null', body=[ messaging.RemotingMessage(body=['spam.eggs'], operation='echo') ] ) 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}, expose_request=False, preprocessor=preprocessor ) proc = twisted.AMF3RequestProcessor(gw) request = remoting.Request( 'null', body=[ messaging.RemotingMessage(body=['spam.eggs'], operation='echo') ] ) def cb(result): try: self.assertTrue(result) except: d.errback() else: d.callback(None) proc(request).addCallback(cb).addErrback(lambda failure: d.errback()) return d
def test_exposed_authenticate(self): d = defer.Deferred() def auth(request, u, p): try: self.assertEqual(request, 'foo') self.assertEqual(u, 'u') self.assertEqual(p, 'p') except: d.errback(failure.Failure()) else: d.callback(None) auth = gateway.expose_request(auth) gw = twisted.TwistedGateway({'echo': lambda x: x}, authenticator=auth) self.service_request = gateway.ServiceRequest( None, gw.services['echo'], None ) gw.authenticateRequest( self.service_request, 'u', 'p', http_request='foo' ) return d
def test_get_processor(self): a3 = pyamf.ASObject({'target': 'null'}) a0 = pyamf.ASObject({'target': 'foo.bar'}) gw = twisted.TwistedGateway() self.assertTrue(isinstance(gw.getProcessor(a3), twisted.AMF3RequestProcessor)) self.assertTrue(isinstance(gw.getProcessor(a0), twisted.AMF0RequestProcessor))
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}, expose_request=False) proc = twisted.AMF3RequestProcessor(gw) request = remoting.Request('null', body=[messaging.RemotingMessage(body=['spam.eggs'], operation='ss')]) 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, messaging.ErrorMessage))
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 pp(sr): self.assertIdentical(sr, self.service_request) d.callback(None) gw = twisted.TwistedGateway({'echo': lambda x: x}, preprocessor=pp) self.service_request = gateway.ServiceRequest(None, gw.services['echo'], None) gw.preprocessRequest(self.service_request) return d
def test_preprocessor(self): d = defer.Deferred() def preprocessor(service_request, *args): d.callback(None) gw = twisted.TwistedGateway({'echo': lambda x: x}, expose_request=False, preprocessor=preprocessor) proc = twisted.AMF3RequestProcessor(gw) request = remoting.Request('null', body=[messaging.RemotingMessage(body=['spam.eggs'], operation='echo')]) proc(request).addErrback(lambda failure: d.errback()) return d
def test_finalise_request(self): request = DummyHTTPRequest() gw = twisted.TwistedGateway() gw._finaliseRequest(request, 200, 'xyz', 'text/plain') self.assertEqual(request.status, 200) self.assertEqual(request.content, 'xyz') self.assertTrue('Content-Type' in request.headers) self.assertEqual(request.headers['Content-Type'], 'text/plain') self.assertTrue('Content-Length' in request.headers) self.assertEqual(request.headers['Content-Length'], '3') self.assertTrue(request.finished)
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_exposed_preprocessor(self): d = defer.Deferred() def pp(hr, sr): self.assertEqual(hr, 'hello') self.assertIdentical(sr, self.service_request) d.callback(None) pp = gateway.expose_request(pp) gw = twisted.TwistedGateway({'echo': lambda x: x}, preprocessor=pp) self.service_request = gateway.ServiceRequest(None, gw.services['echo'], None) gw.preprocessRequest(self.service_request, http_request='hello') return d
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_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_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
def test_error_body(self): def echo(x): raise KeyError gw = _twisted.TwistedGateway({'echo': echo}, expose_request=False) proc = _twisted.AMF3RequestProcessor(gw) request = remoting.Request('null', body=[ messaging.RemotingMessage( body=['spam.eggs'], operation='echo') ]) 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, messaging.ErrorMessage)) self.assertEquals(response.body.faultCode, 'KeyError')