test_misc_tools.py (6043B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\lib\cherrypy\test\test_misc_tools.py 2 import os 3 localDir = os.path.dirname(__file__) 4 logfile = os.path.join(localDir, 'test_misc_tools.log') 5 import cherrypy 6 from cherrypy import tools 7 8 def setup_server(): 9 10 class Root: 11 12 def index(self): 13 yield 'Hello, world' 14 15 index.exposed = True 16 h = [('Content-Language', 'en-GB'), ('Content-Type', 'text/plain')] 17 tools.response_headers(headers=h)(index) 18 19 def other(self): 20 return 'salut' 21 22 other.exposed = True 23 other._cp_config = {'tools.response_headers.on': True, 24 'tools.response_headers.headers': [('Content-Language', 'fr'), ('Content-Type', 'text/plain')], 25 'tools.log_hooks.on': True} 26 27 class Accept: 28 _cp_config = {'tools.accept.on': True} 29 30 def index(self): 31 return '<a href="feed">Atom feed</a>' 32 33 index.exposed = True 34 35 def feed(self): 36 return '<?xml version="1.0" encoding="utf-8"?>\n<feed xmlns="http://www.w3.org/2005/Atom">\n <title>Unknown Blog</title>\n</feed>' 37 38 feed.exposed = True 39 feed._cp_config = {'tools.accept.media': 'application/atom+xml'} 40 41 def select(self): 42 mtype = tools.accept.callable(['text/html', 'text/plain']) 43 if mtype == 'text/html': 44 return '<h2>Page Title</h2>' 45 else: 46 return 'PAGE TITLE' 47 48 select.exposed = True 49 50 class Referer: 51 52 def accept(self): 53 return 'Accepted!' 54 55 accept.exposed = True 56 reject = accept 57 58 class AutoVary: 59 60 def index(self): 61 ae = cherrypy.request.headers.get('Accept-Encoding') 62 cl = cherrypy.request.headers['Host'] 63 hasif = 'If-Modified-Since' in cherrypy.request.headers 64 has = cherrypy.request.headers.has_key('Range') 65 mtype = tools.accept.callable(['text/html', 'text/plain']) 66 return 'Hello, world!' 67 68 index.exposed = True 69 70 conf = {'/referer': {'tools.referer.on': True, 71 'tools.referer.pattern': 'http://[^/]*example\\.com'}, 72 '/referer/reject': {'tools.referer.accept': False, 73 'tools.referer.accept_missing': True}, 74 '/autovary': {'tools.autovary.on': True}} 75 root = Root() 76 root.referer = Referer() 77 root.accept = Accept() 78 root.autovary = AutoVary() 79 cherrypy.tree.mount(root, config=conf) 80 cherrypy.config.update({'log.error_file': logfile}) 81 82 83 from cherrypy.test import helper 84 85 class ResponseHeadersTest(helper.CPWebCase): 86 setup_server = staticmethod(setup_server) 87 88 def testResponseHeadersDecorator(self): 89 self.getPage('/') 90 self.assertHeader('Content-Language', 'en-GB') 91 self.assertHeader('Content-Type', 'text/plain;charset=utf-8') 92 93 def testResponseHeaders(self): 94 self.getPage('/other') 95 self.assertHeader('Content-Language', 'fr') 96 self.assertHeader('Content-Type', 'text/plain;charset=utf-8') 97 98 99 class RefererTest(helper.CPWebCase): 100 setup_server = staticmethod(setup_server) 101 102 def testReferer(self): 103 self.getPage('/referer/accept') 104 self.assertErrorPage(403, 'Forbidden Referer header.') 105 self.getPage('/referer/accept', headers=[('Referer', 'http://www.example.com/')]) 106 self.assertStatus(200) 107 self.assertBody('Accepted!') 108 self.getPage('/referer/reject') 109 self.assertStatus(200) 110 self.assertBody('Accepted!') 111 self.getPage('/referer/reject', headers=[('Referer', 'http://www.example.com/')]) 112 self.assertErrorPage(403, 'Forbidden Referer header.') 113 114 115 class AcceptTest(helper.CPWebCase): 116 setup_server = staticmethod(setup_server) 117 118 def test_Accept_Tool(self): 119 self.getPage('/accept/feed') 120 self.assertStatus(200) 121 self.assertInBody('<title>Unknown Blog</title>') 122 self.getPage('/accept/feed', headers=[('Accept', 'application/atom+xml')]) 123 self.assertStatus(200) 124 self.assertInBody('<title>Unknown Blog</title>') 125 self.getPage('/accept/feed', headers=[('Accept', 'application/*')]) 126 self.assertStatus(200) 127 self.assertInBody('<title>Unknown Blog</title>') 128 self.getPage('/accept/feed', headers=[('Accept', '*/*')]) 129 self.assertStatus(200) 130 self.assertInBody('<title>Unknown Blog</title>') 131 self.getPage('/accept/feed', headers=[('Accept', 'text/html')]) 132 self.assertErrorPage(406, 'Your client sent this Accept header: text/html. But this resource only emits these media types: application/atom+xml.') 133 self.getPage('/accept/') 134 self.assertStatus(200) 135 self.assertBody('<a href="feed">Atom feed</a>') 136 137 def test_accept_selection(self): 138 self.getPage('/accept/select', [('Accept', 'text/html')]) 139 self.assertStatus(200) 140 self.assertBody('<h2>Page Title</h2>') 141 self.getPage('/accept/select', [('Accept', 'text/plain')]) 142 self.assertStatus(200) 143 self.assertBody('PAGE TITLE') 144 self.getPage('/accept/select', [('Accept', 'text/plain, text/*;q=0.5')]) 145 self.assertStatus(200) 146 self.assertBody('PAGE TITLE') 147 self.getPage('/accept/select', [('Accept', 'text/*')]) 148 self.assertStatus(200) 149 self.assertBody('<h2>Page Title</h2>') 150 self.getPage('/accept/select', [('Accept', '*/*')]) 151 self.assertStatus(200) 152 self.assertBody('<h2>Page Title</h2>') 153 self.getPage('/accept/select', [('Accept', 'application/xml')]) 154 self.assertErrorPage(406, 'Your client sent this Accept header: application/xml. But this resource only emits these media types: text/html, text/plain.') 155 156 157 class AutoVaryTest(helper.CPWebCase): 158 setup_server = staticmethod(setup_server) 159 160 def testAutoVary(self): 161 self.getPage('/autovary/') 162 self.assertHeader('Vary', 'Accept, Accept-Charset, Accept-Encoding, Host, If-Modified-Since, Range')