mirror of
https://github.com/facebook/sapling.git
synced 2024-10-06 23:07:18 +03:00
tests: unify test-hgweb-non-interactive
This commit is contained in:
parent
757e43c6b1
commit
aa59a56f47
@ -1,74 +0,0 @@
|
||||
#!/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()
|
||||
|
||||
def startrsp(status, headers):
|
||||
print '---- STATUS'
|
||||
print status
|
||||
print '---- HEADERS'
|
||||
print [i for i in headers if i[0] != 'ETag']
|
||||
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
|
@ -1,17 +0,0 @@
|
||||
changeset: 0:61c9426e69fe
|
||||
tag: tip
|
||||
user: test
|
||||
date: Thu Jan 01 00:00:00 1970 +0000
|
||||
summary: test
|
||||
|
||||
---- STATUS
|
||||
200 Script output follows
|
||||
---- HEADERS
|
||||
[('Content-Type', 'text/html; charset=ascii')]
|
||||
---- DATA
|
||||
---- ERRORS
|
||||
|
||||
---- OS.ENVIRON wsgi variables
|
||||
[]
|
||||
---- request.ENVIRON wsgi variables
|
||||
['wsgi.errors', 'wsgi.input', 'wsgi.multiprocess', 'wsgi.multithread', 'wsgi.run_once', 'wsgi.url_scheme', 'wsgi.version']
|
81
tests/test-hgweb-non-interactive.t
Normal file
81
tests/test-hgweb-non-interactive.t
Normal file
@ -0,0 +1,81 @@
|
||||
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"
|
||||
$ 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()
|
||||
>
|
||||
> def startrsp(status, headers):
|
||||
> print '---- STATUS'
|
||||
> print status
|
||||
> print '---- HEADERS'
|
||||
> print [i for i in headers if i[0] != 'ETag']
|
||||
> 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
|
||||
---- STATUS
|
||||
200 Script output follows
|
||||
---- HEADERS
|
||||
[('Content-Type', 'text/html; charset=ascii')]
|
||||
---- DATA
|
||||
---- ERRORS
|
||||
|
||||
---- OS.ENVIRON wsgi variables
|
||||
[]
|
||||
---- request.ENVIRON wsgi variables
|
||||
['wsgi.errors', 'wsgi.input', 'wsgi.multiprocess', 'wsgi.multithread', 'wsgi.run_once', 'wsgi.url_scheme', 'wsgi.version']
|
Loading…
Reference in New Issue
Block a user