test_logging.py (3887B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\lib\cherrypy\test\test_logging.py 2 import os 3 localDir = os.path.dirname(__file__) 4 import cherrypy 5 access_log = os.path.join(localDir, 'access.log') 6 error_log = os.path.join(localDir, 'error.log') 7 tartaros = u'\u03a4\u1f71\u03c1\u03c4\u03b1\u03c1\u03bf\u03c2' 8 erebos = u'\u0388\u03c1\u03b5\u03b2\u03bf\u03c2.com' 9 10 def setup_server(): 11 12 class Root: 13 14 def index(self): 15 return 'hello' 16 17 index.exposed = True 18 19 def uni_code(self): 20 cherrypy.request.login = tartaros 21 cherrypy.request.remote.name = erebos 22 23 uni_code.exposed = True 24 25 def slashes(self): 26 cherrypy.request.request_line = 'GET /slashed\\path HTTP/1.1' 27 28 slashes.exposed = True 29 30 def whitespace(self): 31 cherrypy.request.headers['User-Agent'] = 'Browzuh (1.0\r\n\t\t.3)' 32 33 whitespace.exposed = True 34 35 def as_string(self): 36 return 'content' 37 38 as_string.exposed = True 39 40 def as_yield(self): 41 yield 'content' 42 43 as_yield.exposed = True 44 45 def error(self): 46 raise ValueError() 47 48 error.exposed = True 49 error._cp_config = {'tools.log_tracebacks.on': True} 50 51 root = Root() 52 cherrypy.config.update({'log.error_file': error_log, 53 'log.access_file': access_log}) 54 cherrypy.tree.mount(root) 55 56 57 from cherrypy.test import helper, logtest 58 59 class AccessLogTests(helper.CPWebCase, logtest.LogCase): 60 setup_server = staticmethod(setup_server) 61 logfile = access_log 62 63 def testNormalReturn(self): 64 self.markLog() 65 self.getPage('/as_string', headers=[('Referer', 'http://www.cherrypy.org/'), ('User-Agent', 'Mozilla/5.0')]) 66 self.assertBody('content') 67 self.assertStatus(200) 68 intro = '%s - - [' % self.interface() 69 self.assertLog(-1, intro) 70 if [ k for k, v in self.headers if k.lower() == 'content-length' ]: 71 self.assertLog(-1, '] "GET %s/as_string HTTP/1.1" 200 7 "http://www.cherrypy.org/" "Mozilla/5.0"' % self.prefix()) 72 else: 73 self.assertLog(-1, '] "GET %s/as_string HTTP/1.1" 200 - "http://www.cherrypy.org/" "Mozilla/5.0"' % self.prefix()) 74 75 def testNormalYield(self): 76 self.markLog() 77 self.getPage('/as_yield') 78 self.assertBody('content') 79 self.assertStatus(200) 80 intro = '%s - - [' % self.interface() 81 self.assertLog(-1, intro) 82 if [ k for k, v in self.headers if k.lower() == 'content-length' ]: 83 self.assertLog(-1, '] "GET %s/as_yield HTTP/1.1" 200 7 "" ""' % self.prefix()) 84 else: 85 self.assertLog(-1, '] "GET %s/as_yield HTTP/1.1" 200 - "" ""' % self.prefix()) 86 87 def testEscapedOutput(self): 88 self.markLog() 89 self.getPage('/uni_code') 90 self.assertStatus(200) 91 self.assertLog(-1, repr(tartaros.encode('utf8'))[1:-1]) 92 self.assertLog(-1, '\\xce\\x88\\xcf\\x81\\xce\\xb5\\xce\\xb2\\xce\\xbf\\xcf\\x82') 93 self.markLog() 94 self.getPage('/slashes') 95 self.assertStatus(200) 96 self.assertLog(-1, '"GET /slashed\\\\path HTTP/1.1"') 97 self.markLog() 98 self.getPage('/whitespace') 99 self.assertStatus(200) 100 self.assertLog(-1, '"Browzuh (1.0\\r\\n\\t\\t.3)"') 101 102 103 class ErrorLogTests(helper.CPWebCase, logtest.LogCase): 104 setup_server = staticmethod(setup_server) 105 logfile = error_log 106 107 def testTracebacks(self): 108 self.markLog() 109 ignore = helper.webtest.ignored_exceptions 110 ignore.append(ValueError) 111 try: 112 self.getPage('/error') 113 self.assertInBody('raise ValueError()') 114 self.assertLog(0, 'HTTP Traceback (most recent call last):') 115 self.assertLog(-3, 'raise ValueError()') 116 finally: 117 ignore.pop()