Mercurial > hg
changeset 12440:d9f7753a94d5
tests: unify test-hgweb-non-interactive
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Sun, 26 Sep 2010 13:41:32 -0500 |
parents | 31ea3ce83a92 |
children | cb1e33a41d13 |
files | tests/test-hgweb-non-interactive tests/test-hgweb-non-interactive.out tests/test-hgweb-non-interactive.t |
diffstat | 3 files changed, 81 insertions(+), 91 deletions(-) [+] |
line wrap: on
line diff
--- a/tests/test-hgweb-non-interactive Sun Sep 26 13:41:32 2010 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -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
--- a/tests/test-hgweb-non-interactive.out Sun Sep 26 13:41:32 2010 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -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']
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-hgweb-non-interactive.t Sun Sep 26 13:41:32 2010 -0500 @@ -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']