test-hgweb-non-interactive
74 lines
| 1.7 KiB
| text/plain
|
TextLexer
/ tests / test-hgweb-non-interactive
Dirkjan Ochtman
|
r12180 | #!/bin/sh | ||
# Tests if hgweb can run without touching sys.stdin, as is required | ||||
# by the WSGI standard and strictly implemented by mod_wsgi. | ||||
mkdir repo | ||||
cd repo | ||||
hg init | ||||
echo foo > bar | ||||
hg add bar | ||||
hg commit -m "test" | ||||
hg tip | ||||
cat > request.py <<EOF | ||||
from mercurial import dispatch | ||||
from mercurial.hgweb.hgweb_mod import hgweb | ||||
from mercurial.ui import ui | ||||
from mercurial import hg | ||||
from StringIO import StringIO | ||||
import os, sys | ||||
class FileLike(object): | ||||
def __init__(self, real): | ||||
self.real = real | ||||
def fileno(self): | ||||
print >> sys.__stdout__, 'FILENO' | ||||
return self.real.fileno() | ||||
def read(self): | ||||
print >> sys.__stdout__, 'READ' | ||||
return self.real.read() | ||||
def readline(self): | ||||
print >> sys.__stdout__, 'READLINE' | ||||
return self.real.readline() | ||||
sys.stdin = FileLike(sys.stdin) | ||||
errors = StringIO() | ||||
input = StringIO() | ||||
output = StringIO() | ||||
Dirkjan Ochtman
|
r12181 | def startrsp(status, headers): | ||
print '---- STATUS' | ||||
print status | ||||
Dirkjan Ochtman
|
r12180 | print '---- HEADERS' | ||
Dirkjan Ochtman
|
r12183 | print [i for i in headers if i[0] != 'ETag'] | ||
Dirkjan Ochtman
|
r12180 | print '---- DATA' | ||
return output.write | ||||
env = { | ||||
'wsgi.version': (1, 0), | ||||
'wsgi.url_scheme': 'http', | ||||
'wsgi.errors': errors, | ||||
'wsgi.input': input, | ||||
'wsgi.multithread': False, | ||||
'wsgi.multiprocess': False, | ||||
'wsgi.run_once': False, | ||||
'REQUEST_METHOD': 'GET', | ||||
'SCRIPT_NAME': '', | ||||
'PATH_INFO': '', | ||||
'QUERY_STRING': '', | ||||
'SERVER_NAME': '127.0.0.1', | ||||
'SERVER_PORT': os.environ['HGPORT'], | ||||
'SERVER_PROTOCOL': 'HTTP/1.0' | ||||
} | ||||
i = hgweb('.') | ||||
i(env, startrsp) | ||||
print '---- ERRORS' | ||||
print errors.getvalue() | ||||
print '---- OS.ENVIRON wsgi variables' | ||||
print sorted([x for x in os.environ if x.startswith('wsgi')]) | ||||
print '---- request.ENVIRON wsgi variables' | ||||
print sorted([x for x in i.repo.ui.environ if x.startswith('wsgi')]) | ||||
EOF | ||||
python request.py | ||||