NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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)