1#!/usr/bin/env python 2 3import sys 4import re 5 6try: 7 from StringIO import StringIO 8except ImportError: 9 from io import StringIO # NOQA 10 11from socket import gaierror, gethostbyname, gethostname 12 13from circuits.web import Controller, Logger 14 15from .helpers import urlopen 16 17 18class DummyLogger(object): 19 20 def __init__(self): 21 super(DummyLogger, self).__init__() 22 23 self.message = None 24 25 def info(self, message): 26 self.message = message 27 28 29class Root(Controller): 30 31 def index(self): 32 return "Hello World!" 33 34 35def test_file(webapp): 36 logfile = StringIO() 37 logger = Logger(file=logfile) 38 logger.register(webapp) 39 40 f = urlopen(webapp.server.http.base) 41 s = f.read() 42 assert s == b"Hello World!" 43 44 logfile.seek(0) 45 s = logfile.read().strip() 46 47 try: 48 address = gethostbyname(gethostname()) 49 except gaierror: 50 address = "127.0.0.1" 51 52 d = {} 53 d["h"] = address 54 d["l"] = "-" 55 d["u"] = "-" 56 d["r"] = "GET / HTTP/1.1" 57 d["s"] = "200" 58 d["b"] = "12" 59 d["f"] = "" 60 d["a"] = "Python-urllib/%s" % sys.version[:3] 61 62 keys = list(d.keys()) 63 64 for k in keys: 65 if d[k] and d[k].startswith("127."): 66 # loopback network: 127.0.0.0/8 67 assert re.search("127(\.[0-9]{1,3}){3}", s) 68 else: 69 assert d[k] in s 70 71 logfile.close() 72 logger.unregister() 73 74 75def test_logger(webapp): 76 logobj = DummyLogger() 77 logger = Logger(logger=logobj) 78 logger.register(webapp) 79 80 f = urlopen(webapp.server.http.base) 81 s = f.read() 82 assert s == b"Hello World!" 83 84 s = logobj.message 85 86 try: 87 address = gethostbyname(gethostname()) 88 except gaierror: 89 address = "127.0.0.1" 90 91 d = {} 92 d["h"] = address 93 d["l"] = "-" 94 d["u"] = "-" 95 d["r"] = "GET / HTTP/1.1" 96 d["s"] = "200" 97 d["b"] = "12" 98 d["f"] = "" 99 d["a"] = "Python-urllib/%s" % sys.version[:3] 100 101 keys = list(d.keys()) 102 103 for k in keys: 104 if d[k] and d[k].startswith("127."): 105 # loopback network: 127.0.0.0/8 106 assert re.search("127(\.[0-9]{1,3}){3}", s) 107 else: 108 assert d[k] in s 109 110 logger.unregister() 111 112 113def test_filename(webapp, tmpdir): 114 logfile = str(tmpdir.ensure("logfile")) 115 logger = Logger(file=logfile) 116 logger.register(webapp) 117 118 logfile = open(logfile, "r") 119 120 f = urlopen(webapp.server.http.base) 121 s = f.read() 122 assert s == b"Hello World!" 123 124 logfile.seek(0) 125 s = logfile.read().strip() 126 127 try: 128 address = gethostbyname(gethostname()) 129 except gaierror: 130 address = "127.0.0.1" 131 132 d = {} 133 d["h"] = address 134 d["l"] = "-" 135 d["u"] = "-" 136 d["r"] = "GET / HTTP/1.1" 137 d["s"] = "200" 138 d["b"] = "12" 139 d["f"] = "" 140 d["a"] = "Python-urllib/%s" % sys.version[:3] 141 142 keys = list(d.keys()) 143 144 for k in keys: 145 if d[k] and d[k].startswith("127."): 146 # loopback network: 127.0.0.0/8 147 assert re.search("127(\.[0-9]{1,3}){3}", s) 148 else: 149 assert d[k] in s 150 151 logfile.close() 152 logger.unregister() 153