2007-02-10 00:00:37 +01:00
|
|
|
import sys, subprocess
|
|
|
|
|
|
|
|
import quixote
|
|
|
|
from quixote.server.simple_server import run
|
2010-01-22 20:32:44 +01:00
|
|
|
from StringIO import StringIO
|
2007-02-10 00:00:37 +01:00
|
|
|
import os
|
|
|
|
import socket
|
|
|
|
import urllib
|
|
|
|
|
|
|
|
_server_url = None
|
|
|
|
|
|
|
|
testdir = os.path.dirname(__file__)
|
2016-03-24 23:25:53 +01:00
|
|
|
print('testdir is:', testdir)
|
2007-02-10 00:00:37 +01:00
|
|
|
sys.path.insert(0, os.path.abspath(os.path.join(testdir, '..')))
|
|
|
|
|
|
|
|
import twill
|
|
|
|
|
|
|
|
def cd_testdir():
|
|
|
|
global cwd
|
|
|
|
cwd = os.getcwd()
|
|
|
|
os.chdir(testdir)
|
|
|
|
|
|
|
|
def pop_testdir():
|
|
|
|
global cwd
|
|
|
|
os.chdir(cwd)
|
|
|
|
|
|
|
|
def execute_twill_script(filename, inp=None, initial_url=None):
|
|
|
|
global testdir
|
|
|
|
|
|
|
|
if inp:
|
|
|
|
inp_fp = StringIO(inp)
|
|
|
|
old, sys.stdin = sys.stdin, inp_fp
|
|
|
|
|
|
|
|
scriptfile = os.path.join(testdir, filename)
|
|
|
|
try:
|
|
|
|
twill.execute_file(filename, initial_url=initial_url)
|
|
|
|
finally:
|
|
|
|
if inp:
|
|
|
|
sys.stdin = old
|
|
|
|
|
|
|
|
def run_server(create_fn, PORT=None):
|
|
|
|
"""
|
|
|
|
Run a Quixote simple_server on localhost:PORT with subprocess.
|
|
|
|
All output is captured & thrown away.
|
|
|
|
|
|
|
|
The parent process returns the URL on which the server is running.
|
|
|
|
"""
|
|
|
|
import time, tempfile
|
|
|
|
global _server_url
|
|
|
|
|
|
|
|
if PORT is None:
|
|
|
|
PORT = int(os.environ.get('QX_TEST_PORT', '8080'))
|
|
|
|
|
|
|
|
outfd = tempfile.mkstemp('quixote_tst')[0]
|
|
|
|
|
2016-03-24 23:25:53 +01:00
|
|
|
print('STARTING:', sys.executable, 'tests/qx_testserver.py', os.getcwd())
|
2007-02-10 00:00:37 +01:00
|
|
|
process = subprocess.Popen([sys.executable, '-u', 'qx_testserver.py'],
|
|
|
|
stderr=subprocess.STDOUT,
|
|
|
|
stdout=outfd)
|
|
|
|
|
|
|
|
time.sleep(1)
|
|
|
|
|
|
|
|
result = process.poll()
|
|
|
|
if result is not None:
|
|
|
|
raise Exception("server is not running: return code %s" % (result,))
|
|
|
|
|
|
|
|
_server_url = 'http://localhost:%d/' % (PORT,)
|
|
|
|
return _server_url
|
|
|
|
|
|
|
|
def kill_server():
|
|
|
|
"""
|
|
|
|
Kill the previously started Quixote server.
|
|
|
|
"""
|
|
|
|
global _server_url
|
|
|
|
if _server_url != None:
|
|
|
|
try:
|
|
|
|
fp = urllib.urlopen('%sexit' % (_server_url,))
|
|
|
|
except:
|
|
|
|
pass
|
|
|
|
|
|
|
|
_server_url = None
|