Skip to content

Instantly share code, notes, and snippets.

@dbrgn
Last active August 29, 2015 14:03
Show Gist options
  • Select an option

  • Save dbrgn/4b73ed4d61a88778ada2 to your computer and use it in GitHub Desktop.

Select an option

Save dbrgn/4b73ed4d61a88778ada2 to your computer and use it in GitHub Desktop.
@pytest.fixture(scope='session')
def server(request):
"""
Fixture that provides a bottle server running in a background thread.
"""
class StoppableServer(bottle.ServerAdapter):
server = None
def run(self, handler):
self.server = make_server(self.host, self.port, handler, **self.options)
self.server.serve_forever()
def stop(self):
self.server.shutdown()
class ServerThread(threading.Thread):
def __init__(self):
super(ServerThread, self).__init__()
self.port = random.randint(10000, 30000)
self.app = bottle.Bottle()
self.server = StoppableServer(host='127.0.0.1', port=self.port)
@self.app.route('/a/')
def a():
return bottle.redirect('/b/')
@self.app.route('/b/')
def b():
return bottle.redirect('/a/')
@self.app.route('/c/')
def c():
return 'c'
@self.app.route('/c/<anything>/')
def c_bug(anything):
return bottle.redirect('/a/')
@self.app.route('/simple_html/')
def simple_html():
return '''<html>
<head>
<title>Title</title>
</head>
<body>
<h1>Welcome</h1>
<p>This is a test resource.</p>
</body>
</html>'''
def run(self):
self.app.run(server=self.server)
def wait(self):
while self.server.server is None:
time.sleep(0.05)
def stop(self):
self.server.stop()
s = ServerThread()
s.start()
def fin():
print('Stopping background_server...')
s.stop()
request.addfinalizer(fin)
s.wait()
return s
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment