test-non-interactive-wsgi
73 lines
| 1.7 KiB
| text/plain
|
TextLexer
/ tests / test-non-interactive-wsgi
Dirkjan Ochtman
|
r5337 | #!/bin/sh | ||
Dirkjan Ochtman
|
r5580 | # Tests if hgweb can run without touching sys.stdin, as is required | ||
# by the WSGI standard and strictly implemented by mod_wsgi. | ||||
Dirkjan Ochtman
|
r5337 | |||
mkdir repo | ||||
cd repo | ||||
hg init | ||||
echo foo > bar | ||||
hg add bar | ||||
Martin Geisler
|
r8167 | hg commit -m "test" | ||
Dirkjan Ochtman
|
r5337 | 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 | ||||
Bryan O'Sullivan
|
r5384 | import os, sys | ||
Dirkjan Ochtman
|
r5337 | |||
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() | ||||
def startrsp(headers, data): | ||||
print '---- HEADERS' | ||||
print headers | ||||
print '---- DATA' | ||||
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', | ||||
Bryan O'Sullivan
|
r5384 | 'SERVER_PORT': os.environ['HGPORT'], | ||
Dirkjan Ochtman
|
r5337 | 'SERVER_PROTOCOL': 'HTTP/1.0' | ||
} | ||||
Henrik Stuart
|
r9888 | i = hgweb('.') | ||
i(env, startrsp) | ||||
Dirkjan Ochtman
|
r5337 | print '---- ERRORS' | ||
print errors.getvalue() | ||||
Henrik Stuart
|
r9888 | print '---- OS.ENVIRON wsgi variables' | ||
Martin Geisler
|
r9889 | print sorted([x for x in os.environ if x.startswith('wsgi')]) | ||
Henrik Stuart
|
r9888 | print '---- request.ENVIRON wsgi variables' | ||
Martin Geisler
|
r9889 | print sorted([x for x in i.repo.ui.environ if x.startswith('wsgi')]) | ||
Dirkjan Ochtman
|
r5337 | EOF | ||
python request.py | ||||