1
1
from pprint import pformat
2
2
3
+ import os
4
+ import socket
5
+
3
6
import pytest
4
7
5
- from webtest . http import StopableWSGIServer
8
+ import cherrypy
6
9
7
10
8
11
class SimpleApp (object ):
@@ -33,13 +36,15 @@ def optional_cacheable_request(self, env, start_response):
33
36
return [pformat (env ).encode ("utf8" )]
34
37
35
38
def vary_accept (self , env , start_response ):
39
+ response = pformat (env ).encode ("utf8" )
40
+
36
41
headers = [
37
42
('Cache-Control' , 'max-age=5000' ),
38
43
('Content-Type' , 'text/plain' ),
39
44
('Vary' , 'Accept-Encoding, Accept' ),
40
45
]
41
46
start_response ('200 OK' , headers )
42
- return [pformat ( env ). encode ( "utf8" ) ]
47
+ return [response ]
43
48
44
49
def update_etag_string (self ):
45
50
self .etag_count += 1
@@ -91,11 +96,13 @@ def multiple_choices(self, env, start_response):
91
96
92
97
def stream (self , env , start_response ):
93
98
headers = [
94
- ('Cache-Control' , 'max-age=5000' ),
95
99
('Content-Type' , 'text/plain' ),
100
+ ('Cache-Control' , 'max-age=5000' ),
96
101
]
97
102
start_response ('200 OK' , headers )
98
- return (pformat (env ).encode ("utf8" ) for i in range (10 ))
103
+
104
+ for i in range (10 ):
105
+ yield pformat (i ).encode ("utf8" )
99
106
100
107
def __call__ (self , env , start_response ):
101
108
func = self .dispatch (env )
@@ -118,12 +125,38 @@ def server():
118
125
119
126
@pytest .fixture ()
120
127
def url (server ):
121
- return server .application_url
128
+ return 'http://%s:%s/' % server .bind_addr
129
+
130
+
131
+ def get_free_port ():
132
+ s = socket .socket (socket .AF_INET , socket .SOCK_STREAM )
133
+ s .bind (('' , 0 ))
134
+ ip , port = s .getsockname ()
135
+ s .close ()
136
+ ip = os .environ .get ('WEBTEST_SERVER_BIND' , '127.0.0.1' )
137
+ return ip , port
122
138
123
139
124
140
def pytest_namespace ():
125
- return dict (server = StopableWSGIServer .create (SimpleApp ()))
141
+ cherrypy .tree .graft (SimpleApp (), '/' )
142
+
143
+ ip , port = get_free_port ()
144
+
145
+ cherrypy .config .update ({
146
+ 'server.socket_host' : ip ,
147
+ 'server.socket_port' : port
148
+ })
149
+
150
+ #turn off logging
151
+ logger = cherrypy .log .access_log
152
+ logger .removeHandler (logger .handlers [0 ])
153
+
154
+ cherrypy .server .start ()
155
+ return dict (server = cherrypy .server )
126
156
127
157
128
158
def pytest_unconfigure (config ):
129
- pytest .server .shutdown ()
159
+ try :
160
+ cherrypy .server .stop ()
161
+ except :
162
+ pass
0 commit comments