Download Install Tutorial Docs FAQ Tools WikiLicense Team IRC Planet Involvement Shop Book

root/trunk/cherrypy/test/test_safe_multipart.py

Revision 1678 (checked in by fumanchu, 1 year ago)

Fix for #648 (Flash 8 upload socket timeout). Optional safe_multipart tool in lib.

  • Property svn:eol-style set to native
Line 
1 """Basic tests for the CherryPy core: request handling."""
2
3 from cherrypy.test import test
4 test.prefer_parent_path()
5
6 import cherrypy
7
8
9 def setup_server():
10    
11     from cherrypy.lib import safemime
12     safemime.init()
13    
14     class Root:
15        
16         def flashupload(self, Filedata, Upload, Filename):
17             return ("Upload: %r, Filename: %r, Filedata: %r" %
18                     (Upload, Filename, Filedata.file.read()))
19         flashupload.exposed = True
20         flashupload._cp_config = {'tools.safe_multipart.on': True}
21    
22     cherrypy.config.update({
23         'environment': 'test_suite',
24         'server.max_request_body_size': 0,
25         })
26     cherrypy.tree.mount(Root())
27
28
29 #                             Client-side code                             #
30
31 from cherrypy.test import helper
32
33 class SafeMultipartHandlingTest(helper.CPWebCase):
34    
35     def test_Flash_Upload(self):
36         headers = [
37             ('Accept', 'text/*'),
38             ('Content-Type', 'multipart/form-data; '
39                  'boundary=----------KM7Ij5cH2KM7Ef1gL6ae0ae0cH2gL6'),
40             ('User-Agent', 'Shockwave Flash'),
41             ('Host', 'www.example.com:8080'),
42             ('Content-Length', '499'),
43             ('Connection', 'Keep-Alive'),
44             ('Cache-Control', 'no-cache'),
45             ]
46         filedata = ('<?xml version="1.0" encoding="UTF-8"?>\r\n'
47                     '<projectDescription>\r\n'
48                     '</projectDescription>\r\n')
49         body = (
50             '------------KM7Ij5cH2KM7Ef1gL6ae0ae0cH2gL6\r\n'
51             'Content-Disposition: form-data; name="Filename"\r\n'
52             '\r\n'
53             '.project\r\n'
54             '------------KM7Ij5cH2KM7Ef1gL6ae0ae0cH2gL6\r\n'
55             'Content-Disposition: form-data; '
56                 'name="Filedata"; filename=".project"\r\n'
57             'Content-Type: application/octet-stream\r\n'
58             '\r\n'
59             + filedata +
60             '\r\n'
61             '------------KM7Ij5cH2KM7Ef1gL6ae0ae0cH2gL6\r\n'
62             'Content-Disposition: form-data; name="Upload"\r\n'
63             '\r\n'
64             'Submit Query\r\n'
65             # Flash apps omit the trailing \r\n on the last line:
66             '------------KM7Ij5cH2KM7Ef1gL6ae0ae0cH2gL6--'
67             )
68         self.getPage('/flashupload', headers, "POST", body)
69         self.assertBody("Upload: 'Submit Query', Filename: '.project', "
70                         "Filedata: %r" % filedata)
71
72
73 if __name__ == '__main__':
74     setup_server()
75     helper.testmain()
Note: See TracBrowser for help on using the browser.

Hosted by WebFaction

Log in as guest/cpguest to create tickets