test_mime.py (3686B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\lib\cherrypy\test\test_mime.py 2 import cherrypy 3 from cherrypy._cpcompat import ntob, ntou, sorted 4 5 def setup_server(): 6 7 class Root: 8 9 def multipart(self, parts): 10 return repr(parts) 11 12 multipart.exposed = True 13 14 def multipart_form_data(self, **kwargs): 15 return repr(list(sorted(kwargs.items()))) 16 17 multipart_form_data.exposed = True 18 19 def flashupload(self, Filedata, Upload, Filename): 20 return 'Upload: %r, Filename: %r, Filedata: %r' % (Upload, Filename, Filedata.file.read()) 21 22 flashupload.exposed = True 23 24 cherrypy.config.update({'server.max_request_body_size': 0}) 25 cherrypy.tree.mount(Root()) 26 27 28 from cherrypy.test import helper 29 30 class MultipartTest(helper.CPWebCase): 31 setup_server = staticmethod(setup_server) 32 33 def test_multipart(self): 34 text_part = ntou('This is the text version') 35 html_part = ntou('<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\n<html>\n<head>\n <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">\n</head>\n<body bgcolor="#ffffff" text="#000000">\n\nThis is the <strong>HTML</strong> version\n</body>\n</html>\n') 36 body = '\r\n'.join(['--123456789', 37 "Content-Type: text/plain; charset='ISO-8859-1'", 38 'Content-Transfer-Encoding: 7bit', 39 '', 40 text_part, 41 '--123456789', 42 "Content-Type: text/html; charset='ISO-8859-1'", 43 '', 44 html_part, 45 '--123456789--']) 46 headers = [('Content-Type', 'multipart/mixed; boundary=123456789'), ('Content-Length', str(len(body)))] 47 self.getPage('/multipart', headers, 'POST', body) 48 self.assertBody(repr([text_part, html_part])) 49 50 def test_multipart_form_data(self): 51 body = '\r\n'.join(['--X', 52 'Content-Disposition: form-data; name="foo"', 53 '', 54 'bar', 55 '--X', 56 'Content-Disposition: form-data; name="baz"', 57 '', 58 '111', 59 '--X', 60 'Content-Disposition: form-data; name="baz"', 61 '', 62 '333', 63 '--X--']) 64 (self.getPage('/multipart_form_data', method='POST', headers=[('Content-Type', 'multipart/form-data;boundary=X'), ('Content-Length', str(len(body)))], body=body),) 65 self.assertBody(repr([('baz', [u'111', u'333']), ('foo', u'bar')])) 66 67 68 class SafeMultipartHandlingTest(helper.CPWebCase): 69 setup_server = staticmethod(setup_server) 70 71 def test_Flash_Upload(self): 72 headers = [('Accept', 'text/*'), 73 ('Content-Type', 'multipart/form-data; boundary=----------KM7Ij5cH2KM7Ef1gL6ae0ae0cH2gL6'), 74 ('User-Agent', 'Shockwave Flash'), 75 ('Host', 'www.example.com:8080'), 76 ('Content-Length', '499'), 77 ('Connection', 'Keep-Alive'), 78 ('Cache-Control', 'no-cache')] 79 filedata = ntob('<?xml version="1.0" encoding="UTF-8"?>\r\n<projectDescription>\r\n</projectDescription>\r\n') 80 body = ntob('------------KM7Ij5cH2KM7Ef1gL6ae0ae0cH2gL6\r\nContent-Disposition: form-data; name="Filename"\r\n\r\n.project\r\n------------KM7Ij5cH2KM7Ef1gL6ae0ae0cH2gL6\r\nContent-Disposition: form-data; name="Filedata"; filename=".project"\r\nContent-Type: application/octet-stream\r\n\r\n') + filedata + ntob('\r\n------------KM7Ij5cH2KM7Ef1gL6ae0ae0cH2gL6\r\nContent-Disposition: form-data; name="Upload"\r\n\r\nSubmit Query\r\n------------KM7Ij5cH2KM7Ef1gL6ae0ae0cH2gL6--') 81 self.getPage('/flashupload', headers, 'POST', body) 82 self.assertBody("Upload: u'Submit Query', Filename: u'.project', Filedata: %r" % filedata)