Skip to content

Commit c1a4cb9

Browse files
committed
add tests for reloading module
prepare test fixtures consisting of a package and module with relative & absolute import test scripting server runs with these variations - from package or from module - with or without reloader the server code is based off servertest.py
1 parent f9b1849 commit c1a4cb9

File tree

6 files changed

+64
-7
lines changed

6 files changed

+64
-7
lines changed

test/servertestpackage/__init__.py

Whitespace-only changes.

test/servertestpackage/__main__.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import sys, os, socket
2+
3+
import servertestpackage.absolute
4+
from . import relative
5+
6+
test_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
7+
os.chdir(test_root)
8+
sys.path.insert(0, os.path.dirname(test_root))
9+
sys.path.insert(0, test_root)
10+
11+
try:
12+
server = sys.argv[1]
13+
port = int(sys.argv[2])
14+
reloads= '--reload' in sys.argv
15+
16+
if server == 'gevent':
17+
from gevent import monkey
18+
monkey.patch_all()
19+
elif server == 'eventlet':
20+
import eventlet
21+
eventlet.monkey_patch()
22+
23+
try:
24+
import coverage
25+
coverage.process_startup()
26+
except ImportError:
27+
pass
28+
29+
from bottle import route, run
30+
route('/test', callback=relative.test_handler)
31+
run(reloader=reloads, port=port, server=server, quiet=True)
32+
33+
except socket.error:
34+
sys.exit(3)
35+
except ImportError:
36+
sys.exit(128)
37+
except KeyboardInterrupt:
38+
pass

test/servertestpackage/absolute.py

Whitespace-only changes.

test/servertestpackage/module.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
__main__.py

test/servertestpackage/relative.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
def test_handler():
2+
return 'OK'

test/test_server.py

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@
1414
except:
1515
from urllib2 import urlopen
1616

17-
serverscript = os.path.join(os.path.dirname(__file__), 'servertest.py')
18-
17+
test_root = os.path.dirname(os.path.abspath(__file__))
1918

2019
def ping(server, port):
2120
''' Check if a server accepts connections on a specific TCP port '''
@@ -28,10 +27,14 @@ def ping(server, port):
2827
finally:
2928
s.close()
3029

31-
32-
class TestServer(unittest.TestCase):
30+
class TestServerBase(unittest.TestCase):
3331
server = 'wsgiref'
3432
skip = False
33+
script = []
34+
extra_args = []
35+
36+
def base_cmd(self, port):
37+
return [sys.executable] + self.script + [self.server, str(port)] + self.extra_args
3538

3639
def setUp(self):
3740
self.skip = self.skip or 'fast' in sys.argv
@@ -40,9 +43,8 @@ def setUp(self):
4043
for port in range(8800, 8900):
4144
self.port = port
4245
# Start servertest.py in a subprocess
43-
cmd = [sys.executable, serverscript, self.server, str(port)]
44-
cmd += sys.argv[1:] # pass cmdline arguments to subprocesses
45-
self.p = Popen(cmd, stdout=PIPE, stderr=PIPE)
46+
cmd = self.base_cmd(port) + sys.argv[1:] # pass cmdline arguments to subprocesses
47+
self.p = Popen(cmd, stdout=PIPE, stderr=PIPE, cwd=test_root)
4648
# Wait for the socket to accept connections
4749
for i in range(100):
4850
time.sleep(0.1)
@@ -92,11 +94,25 @@ def fetch(self, url):
9294
except Exception as E:
9395
return repr(E)
9496

97+
class TestServer(TestServerBase):
98+
script = [os.path.join(os.path.dirname(__file__), 'servertest.py')]
99+
95100
def test_simple(self):
96101
''' Test a simple static page with this server adapter. '''
97102
if self.skip: return
98103
self.assertEqual(tob('OK'), self.fetch('test'))
99104

105+
class TestServerPackage(TestServer):
106+
script = ['-m', 'servertestpackage']
107+
108+
class TestServerPackageReloader(TestServerPackage):
109+
extra_args = ['--reload']
110+
111+
class TestServerModule(TestServerPackage):
112+
script = ['-m', 'servertestpackage.module']
113+
114+
class TestServerModuleReloader(TestServerModule):
115+
extra_args = ['--reload']
100116

101117
blacklist = ['cgi', 'flup', 'gae', 'wsgiref']
102118
blacklist += ['fapws3', 'cherrypy', 'diesel'] # deprecated adapters

0 commit comments

Comments
 (0)