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