-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Sat, Aug 16, 2008 at 6:54 PM, Johan Euphrosine  wrote:
> On Wed, Aug 13, 2008 at 11:33 PM, Loic Dachary  wrote:
>> The patch lacks proper error handling. Could you please check the
>> PokerSource error handlers and provide the equivalent for /AVATAR and
>> /UPLOAD ?
>
> s/PokerSource/PokerService/ ?
>
> Do you want me to add an error hander similar to
> PokerService.pipesFailed as errback ?
>

Let me know if the attached patch fix the reported issue
- --
bou ^


-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: http://getfiregpg.org

iD8DBQFIpwmrZmEdV9SHoe4RAu7LAJ0e8WCVV3xRhEj+MljKswJPrvmFkACghXUu
QkpLxeAdNQUfANSPXBg5gas=
=uFu2
-----END PGP SIGNATURE-----
Index: pokernetwork/pokersite.py
===================================================================
--- pokernetwork/pokersite.py	(revision 4274)
+++ pokernetwork/pokersite.py	(working copy)
@@ -310,6 +310,16 @@
         request.content.seek(0, 0)
         data = request.args['filename'][0]        
         self.deferred.addCallback(lambda result: self.deferRender(request, data))
+        def failed(reason):
+            body = reason.getTraceback()
+            request.setResponseCode(http.INTERNAL_SERVER_ERROR)
+            request.setHeader('content-type',"text/html")
+            request.setHeader('content-length', str(len(body)))
+            request.expireSessionCookie()
+            request.write(body)
+            request.connectionLost(reason)
+            return True
+        self.deferred.addErrback(failed)
         return server.NOT_DONE_YET
 
     def deferRender(self, request, data):
@@ -355,6 +365,16 @@
         request.content.seek(0, 0)
         serial = int(request.path.split('/')[-1])
         self.deferred.addCallback(lambda result: self.deferRender(request, serial))
+        def failed(reason):
+            body = reason.getTraceback()
+            request.setResponseCode(http.INTERNAL_SERVER_ERROR)
+            request.setHeader('content-type',"text/html")
+            request.setHeader('content-length', str(len(body)))
+            request.expireSessionCookie()
+            request.write(body)
+            request.connectionLost(reason)
+            return True
+        self.deferred.addErrback(failed)
         return server.NOT_DONE_YET
 
     def deferRender(self, request, serial):
Index: tests/test-pokersite.py.in
===================================================================
--- tests/test-pokersite.py.in	(revision 4274)
+++ tests/test-pokersite.py.in	(working copy)
@@ -287,10 +287,6 @@
             input = ''
             r.gotLength(len(input))
             r.handleContentChunk(input)
-            import cgi
-            def parse_multipart_mockup(content, dict):
-                  return {'filename':[image_data]}
-            cgi.parse_multipart = parse_multipart_mockup
             r.requestReceived('POST', '/', '')
             self.assertSubstring('image uploaded', r.transport.getvalue())
             self.assertEquals(base64.b64encode(self.image_data),
@@ -314,7 +310,33 @@
             r.requestReceived('POST', '/', '')
             self.assertSubstring('not logged', r.transport.getvalue())
             self.assertEquals(None, self.service.player_image)
+      
+      def test03_error(self):
+            r = pokersite.Request(self.Channel(self.site), True)
+            r.site = r.channel.site
+            
+            r.args = {}
+            session = self.site.makeSession()
+            r.session = session
+            self.assertNotEquals(None, r.getSession().avatar);
+            user_serial = 111
+            r.getSession().avatar.user.serial = user_serial
+            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', '/', '')
+            self.assertSubstring(error_pattern, r.transport.getvalue())
+            self.assertEquals(None, self.service.player_image)
+            session.expire()
+
 class PokerAvatarResourceTestCase(unittest.TestCase):
 
       class Transport:
@@ -351,7 +373,7 @@
             self.assertSubstring('\r\n\r\n%s' % data, r.transport.getvalue())
             self.assertEquals(serial, self.service.player_serial)
 
-      def test02_render_error(self):
+      def test02_not_found(self):
             serial = 100
             self.service.setPlayerImage(PacketPokerPlayerImage(image = '', serial = serial))
             r = pokersite.Request(self.Channel(self.site), True)
@@ -362,6 +384,22 @@
             self.assertSubstring('not found', r.transport.getvalue())
             self.assertEquals(serial, self.service.player_serial)
 
+      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)
+
 class FilterTestCase(unittest.TestCase):
 
       def setUp(self):
_______________________________________________
Pokersource-users mailing list
[email protected]
https://mail.gna.org/listinfo/pokersource-users

Reply via email to