def test03_render_simultaneous(self): """ requests that are received while another request is being handled (this may happen if the packet logic returned a deferred) are not blocked by the first request. """ channel = self.Channel(self.site) r1 = pokersite.Request(channel, True) r1.site = r1.channel.site input = '{"type": "PacketPing"}' r1.gotLength(len(input)) r1.handleContentChunk(input) r1.queued = 0 d1 = defer.Deferred() r1.args = {'uid': ['uid'], 'auth': ['auth']} avatar1 = r1.getSession().avatar def handlePacketLogic1(packet): avatar1.sendPacket(d1) avatar1.handlePacketLogic = handlePacketLogic1 r1.requestReceived('GET', '/?uid=uid&auth=auth', '') r2 = pokersite.Request(channel, True) r2.site = r2.channel.site input = '{"type": "PacketPing"}' r2.gotLength(len(input)) r2.handleContentChunk(input) r2.queued = 0 r2.args = {'uid': ['uid'], 'auth': ['auth']} avatar2 = r2.getSession().avatar def handlePacketLogic2(packet): avatar2.sendPacket(PacketPing()) r2.getSession().avatar.handlePacketLogic = handlePacketLogic2 r2.requestReceived('GET', '/?uid=uid&auth=auth', '') # # r1 not complete yet # self.assertEqual('', r1.transport.getvalue()) # # r2 complete # self.assertSubstring('PacketPing', r2.transport.getvalue()) # # r1 complete # d1.callback(PacketAck()) self.assertSubstring('PacketAck', r1.transport.getvalue())
def test02_ipNumberProxy(self): from twisted.internet import address class Channel: def __init__(self, site): self.site = site class MockClient: pass addr = address.IPv4Address('TCP', 'proxy.example.org', 7775) r = pokersite.Request(Channel(self.site), True) r.client = addr self.assertEquals(r.findProxiedIP(), ('client-ip', 'proxy.example.org')) # received_headers will become requestHeaders RSN, according to: # http://python.net/crew/mwh/apidocs/twisted.web.http.Request.html r.received_headers[ 'x-cluster-client-ip'] = 'cluster-player.example.com' self.assertEquals( r.findProxiedIP(), ('x-cluster-client-ip', 'cluster-player.example.com')) r.received_headers['x-forwarded-for'] = 'forward-player.example.com' self.assertEquals(r.findProxiedIP(), ('x-forwarded-for', 'forward-player.example.com'))
def test05_render_content(self): r = pokersite.Request(self.Channel(self.site), True) r.site = r.channel.site r.gotLength(0) r.handleContentChunk('') r.queued = 0 r.requestReceived('GET', '/?packet={"type":"PacketPing"}', '') self.assertSubstring('\r\n\r\n[]', r.transport.getvalue())
def test01_render(self): r = pokersite.Request(self.Channel(self.site), True) r.site = r.channel.site input = '' r.gotLength(len(input)) r.handleContentChunk(input) r.requestReceived('GET', '/?tourney_serial=666', '') self.assertSubstring('\nOK', r.transport.getvalue()) self.assertEquals(666, self.service.tourney_serial) r.getSession().expire()
def test01_render(self): r = pokersite.Request(self.Channel(self.site), True) r.site = r.channel.site packet_input = '{"type": %d}' % PACKET_PING r.gotLength(len(packet_input)) r.handleContentChunk(packet_input) r.requestReceived('GET', '/', '') self.assertSubstring('\r\n\r\n[]', r.transport.getvalue()) self.assertEqual(True, hasattr(r, "HERE"))
def test01_name(self): class Channel: def __init__(self, site): self.site = site r = pokersite.Request(Channel(self.site), True) r.site = r.channel.site r.args = { 'uid': [ 'uid' ], 'auth': ['auth'] } session = r.getSession() session.expire() self.assertEqual(True, session.expired)
def test02_not_found(self): serial = 100 self.service.setPlayerImage( PacketPokerPlayerImage(image='', serial=serial)) r = pokersite.Request(self.Channel(self.site), True) r.site = r.channel.site r.gotLength(0) r.handleContentChunk('') r.requestReceived('GET', '/%i' % serial, '') self.assertSubstring('not found', r.transport.getvalue()) self.assertEquals(serial, self.service.player_serial)
def test02_explain_no(self): class Channel: def __init__(self, site): self.site = site r = pokersite.Request(Channel(self.site), True) r.site = r.channel.site r.args = { 'uid': [ 'uid' ], 'auth': ['auth'], 'explain': ['no'] } session = r.getSession() self.assertEquals(None, session.avatar.explain) session.expire() self.assertEqual(True, session.expired)
def test02_error_prefix(self): r = pokersite.Request(self.Channel(self.site), True) r.site = r.channel.site r.received_headers['x-forwarded-for'] = '1.2.3.4' d = defer.Deferred() d.addCallback(lambda error: self.assertSubstring('1.2.3.4', error)) r.site.resource.error = d.callback input = '{"type": "PacketPing"}' r.gotLength(len(input)) r.handleContentChunk(input) r.requestReceived('GET', '/', '') return d
def test07_message_prefix(self): r = pokersite.Request(self.Channel(self.site), True) r.site = r.channel.site r.received_headers['x-forwarded-for'] = '1.2.3.4' r.site.resource.message = lambda message: self.assertSubstring('1.2.3.4', message) packet_input = '{"type": %d}' % PACKET_PING r.gotLength(len(packet_input)) r.handleContentChunk(packet_input) r.queued = 0 d = r.notifyFinish() r.requestReceived('GET', '/', '') return d
def longPoll(): r = pokersite.Request(self.Channel(self.site), True) r.site = r.channel.site packet_input = '{"type": "PacketPokerLongPoll"}' r.gotLength(len(packet_input)) r.handleContentChunk(packet_input) r.queued = 0 d = r.notifyFinish() r.args = { 'uid': [ 'uid' ], 'auth': ['auth'] } _session = r.getSession() r.requestReceived('GET', '/?uid=uid&auth=auth', '') return d
def test01_render(self): r = pokersite.Request(self.Channel(self.site), True) r.site = r.channel.site packet_input = '{"type": %d}' % PACKET_PING r.gotLength(len(packet_input)) r.handleContentChunk(packet_input) r.queued = 0 d = r.notifyFinish() def finish(result): self.assertSubstring('\r\n\r\n[]', r.transport.getvalue()) d.addCallback(finish) r.requestReceived('GET', '/', '') return d
def test01_render(self): data = 'image data' serial = 64 self.service.setPlayerImage( PacketPokerPlayerImage(image=base64.b64encode(data), serial=serial)) r = pokersite.Request(self.Channel(self.site), True) r.site = r.channel.site r.gotLength(0) r.handleContentChunk('') r.requestReceived('GET', '/%i' % serial, '') self.assertSubstring('\r\n\r\n%s' % data, r.transport.getvalue()) self.assertEquals(serial, self.service.player_serial)
def test06_1_render_do_not_expire_session_if_long_poll_return(self): r = pokersite.Request(self.Channel(self.site), True) r.site = r.channel.site packet_input = '{"type": "PacketPokerLongPollReturn"}' r.gotLength(len(packet_input)) r.handleContentChunk(packet_input) r.queued = 0 d = r.notifyFinish() r.args = { 'uid': [ 'uid' ], 'auth': ['auth'] } session = r.getSession() def finish(result): self.assertEqual(False, session.expired) d.addCallback(finish) r.requestReceived('GET', '/?uid=uid&auth=auth', '') return d
def longPollReturn(): r = pokersite.Request(self.Channel(self.site), True) r.site = r.channel.site packet_input = '{"type": "PacketPokerLongPollReturn"}' r.gotLength(len(packet_input)) r.handleContentChunk(packet_input) r.queued = 0 d = r.notifyFinish() r.args = { 'uid': [ 'uid' ], 'auth': ['auth'] } _session = r.getSession() def finish(result): self.failIfSubstring('Session instance has no attribute \'avatar\'', r.transport.getvalue()) d.addCallback(finish) r.requestReceived('GET', '/?uid=uid&auth=auth', '') return d
def test02_render_error(self): packet_input = '{"type": %d}' % PACKET_PING r = pokersite.Request(self.Channel(self.site), True) r.findProxiedIP = lambda *a,**kw: ('client-ip','127.0.0.1') r.site = r.channel.site r.gotLength(len(packet_input)) r.handleContentChunk(packet_input) r.queued = 0 error_pattern = 'UNLIKELY' def handlePacketLogic(packet): raise UserWarning(error_pattern) r.args = { 'uid': ['uid'], 'auth': ['auth'] } r.getSession().avatar.handlePacketLogic = handlePacketLogic r.requestReceived('GET', '/?uid=uid&auth=auth', '') self.assertSubstring(error_pattern, r.transport.getvalue())
def test02_unauthorized(self): r = pokersite.Request(self.Channel(self.site), True) r.site = r.channel.site r.args = {'uid': ['uid'], 'auth': ['auth']} self.assertEquals(False, r.getSession().avatar.isLogged()) r.received_headers['content-type'] = 'multipart/form-data' input = '' r.gotLength(len(input)) r.handleContentChunk(input) r.requestReceived('POST', '/?uid=uid&auth=auth', '') self.assertSubstring('not logged', r.transport.getvalue()) self.assertEquals(None, self.service.player_image)
def test02_render_error(self): r = pokersite.Request(self.Channel(self.site), True) r.site = r.channel.site input = '{"type": "PacketPing"}' r.gotLength(len(input)) r.handleContentChunk(input) r.queued = 0 error_pattern = 'UNLIKELY' def handlePacketLogic(packet): raise UserWarning, error_pattern r.args = {'uid': ['uid'], 'auth': ['auth']} r.getSession().avatar.handlePacketLogic = handlePacketLogic r.requestReceived('GET', '/?uid=uid&auth=auth', '') self.assertSubstring(error_pattern, r.transport.getvalue())
def test01_render(self): r = pokersite.Request(self.Channel(self.site), True) r.site = r.channel.site input = '{"type": "PacketPing"}' r.gotLength(len(input)) r.handleContentChunk(input) r.queued = 0 d = r.notifyFinish() def finish(reason): self.assertSubstring('FINISHED', r.transport.getvalue()) return True d.addCallback(finish) r.requestReceived('GET', '/', '') return d
def test01_render(self): r = pokersite.Request(self.Channel(self.site), True) r.site = r.channel.site input = '{"type": %d}' % PACKET_PING r.gotLength(len(input)) r.handleContentChunk(input) d = r.notifyFinish() def finish(reason): self.assertSubstring('UNLIKELY', r.transport.getvalue()) return True d.addBoth(finish) r.requestReceived('GET', '/', '') return d
def test06_render_expire_logged(self): r = pokersite.Request(self.Channel(self.site), True) r.site = r.channel.site packet_input = '{"type": %d}' % PACKET_PING r.gotLength(len(packet_input)) r.handleContentChunk(packet_input) r.queued = 0 session = 'session' serial = '5' r.received_cookies['TWISTED_SESSION'] = session r.site.memcache.set(session, serial) d = r.notifyFinish() def finish(result): self.assertSubstring('\r\n\r\n[]', r.transport.getvalue()) self.failIfSubstring('Expire', r.transport.getvalue()) d.addCallback(finish) r.requestReceived('GET', '/', '') return d
def test01_render(self): r = pokersite.Request(self.Channel(self.site), True) r.site = r.channel.site r.args = {'uid': ['uid'], 'auth': ['auth']} r.site.memcache.set('auth', '111') self.assertEquals(True, r.getSession().avatar.isLogged()) image_data = "image data" r.received_headers['content-type'] = 'multipart/form-data' input = '' r.gotLength(len(input)) r.handleContentChunk(input) r.requestReceived('POST', '/?uid=uid&auth=auth', '') self.assertSubstring('image uploaded', r.transport.getvalue()) self.assertEquals(base64.b64encode(self.image_data), self.service.player_image.image) r.getSession().expire()
def test03_error(self): data = 'image data' serial = 64 self.service.setPlayerImage( PacketPokerPlayerImage(image=base64.b64encode(data), serial=serial)) r = pokersite.Request(self.Channel(self.site), True) r.site = r.channel.site r.gotLength(0) r.handleContentChunk('') error_pattern = 'UNLIKELY' def getPlayerImageFailed(player_serial): raise UserWarning, error_pattern self.service.getPlayerImage = getPlayerImageFailed r.requestReceived('GET', '/%i' % serial, '') self.assertSubstring('error_pattern', r.transport.getvalue()) self.assertEquals(None, self.service.player_serial)
def test08_error_prefix(self): r = pokersite.Request(self.Channel(self.site), True) r.site = r.channel.site r.received_headers['x-forwarded-for'] = '1.2.3.4' d = defer.Deferred() d.addCallback(lambda error: self.assertSubstring('1.2.3.4', error)) r.site.resource.error = d.callback input = '{"type": "PacketPing"}' r.gotLength(len(input)) r.handleContentChunk(input) r.queued = 0 error_pattern = 'UNLIKELY' def handlePacketLogic(packet): raise UserWarning, error_pattern r.args = {'uid': ['uid'], 'auth': ['auth']} r.getSession().avatar.handlePacketLogic = handlePacketLogic r.requestReceived('GET', '/?uid=uid&auth=auth', '') return d
def test01_rest_filter_finished_request(self): """ proxyfilter.rest_filter should ignore finished request """ class Transport: def write(self, data): pass class Channel: transport = Transport() def requestDone(self, request): pass class Service: verbose = 6 def packet2resthost(self, packet): return (None, None, None) class Resource: service = Service() class Site: resource = Resource() class Packet: pass r = pokersite.Request(Channel(), True) input = '{"type": "PacketPing"}' r.gotLength(len(input)) r.handleContentChunk(input) r.setResponseCode(http.OK) r.write("FINISHED") r.finish() r.noLongerQueued() proxyfilter.rest_filter(Site(), r, Packet())
def test03_error(self): r = pokersite.Request(self.Channel(self.site), True) r.site = r.channel.site r.args = {'uid': ['uid'], 'auth': ['auth']} r.site.memcache.set('auth', '111') self.assertEquals(True, r.getSession().avatar.isLogged()) image_data = "image data" r.received_headers['content-type'] = 'multipart/form-data' input = '' r.gotLength(len(input)) r.handleContentChunk(input) error_pattern = 'UNLIKELY' def setPlayerImageFailed(player_image): raise UserWarning, error_pattern self.service.setPlayerImage = setPlayerImageFailed r.requestReceived('POST', '/?uid=uid&auth=auth', '') self.assertSubstring(error_pattern, r.transport.getvalue()) self.assertEquals(None, self.service.player_image) r.getSession().expire()