Yup. Much better with that one:

##
Ran 6 tests in 91.047s

OK
##

You have my +1 (even though you weren't waiting for it)

And my merged util.py also passes the test suite, which is what I really wanted to know.

--
Mike Looijmans
Philips Natlab / Topic Automation


Nicolas Lehuen wrote:
Yup, the SVN trunk currently contains tests that fail on 3.2.8 (Graham
added some features and their unit test in the trunk), but you can
test the 3.2.8 release against the 3.2.8 test suite (available from
https://svn.apache.org/repos/asf/httpd/mod_python/tags/release-3-2-8 )
and you won't see any problems.

Regards,
Nicolas

2006/2/22, Mike Looijmans <[EMAIL PROTECTED]>:

I get failing tests on WinXP-sp2, apache 2.0.54, python 2.4.2.

This may be because the test suite is looking for things not there yet.

Put the 3.2.8 binary distribution on my system and did a svn update to
get the latest test suite. When running the tests, I got the following
failures (can we do something about the readability of the output):

======================================================================
FAIL: test_req_auth_type (__main__.PerRequestTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test.py", line 661, in test_req_auth_type
    self.fail(`rsp`)
AssertionError: '\n<pre>\nMod_python error: "PythonAuthenHandler
tests::req_auth_type"\n\nTraceback (most recent call last):\n\n  File
"C:\\Python24\\Lib\\site-
packages\\mod_python\\apache.py", line 299, in HandlerDispatch\n
result = object(req)\n\n  File
"C:/source/mod_python/test/htdocs/tests.py", line 609, in req
_auth_type\n    if req.auth_type() != "dummy":\n\nAttributeError:
\'mp_request\' object has no attribute \'auth_type\'\n\n</pre>\n'

======================================================================
FAIL: test_req_construct_url (__main__.PerRequestTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test.py", line 753, in test_req_construct_url
    self.fail("construct_url")
AssertionError: construct_url

======================================================================
FAIL: test_req_handler (__main__.PerRequestTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test.py", line 1009, in test_req_handler
    self.fail(`rsp`)
AssertionError: '\n<pre>\nMod_python error: "PythonFixupHandler
tests::req_handler"\n\nTraceback (most recent call last):\n\n  File
"C:\\Python24\\Lib\\site-pac
kages\\mod_python\\apache.py", line 299, in HandlerDispatch\n    result
= object(req)\n\n  File "C:/source/mod_python/test/htdocs/tests.py",
line 770, in req_ha
ndler\n    req.handler = "mod_python"\n\nTypeError: attribute
\'handler\' of \'mp_request\' objects is not writable\n\n</pre>\n'

======================================================================
FAIL: test_trans (__main__.PerRequestTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test.py", line 1402, in test_trans
    self.fail(`rsp`)
AssertionError: ' #\r\n # \r\n # Licensed under the Apache License,
Version 2.0 (the "License"); you\r\n # may not use this file except in
compliance with the L
icense.  You\r\n # may obtain a copy of the License at\r\n #\r\n #
http://www.apache.org/licenses/LICENSE-2.0\r\n #\r\n # Unless required
by applicable law
 or agreed to in writing, software\r\n # distributed under the License
is distributed on an "AS IS" BASIS,\r\n # WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, e
ither express or\r\n # implied.  See the License for the specific
language governing\r\n # permissions and limitations under the
License.\r\n #\r\n #\r\n # $Id:
 tests.py 379638 2006-02-22 00:41:51Z jgallacher $\r\n #\r\n\r\n#
mod_python tests\r\n\r\nfrom __future__ import generators\r\nfrom
mod_python.python22 import *
\r\n\r\nfrom mod_python import apache\r\nimport unittest\r\nimport
re\r\nimport time\r\nimport os\r\nimport cStringIO\r\n\r\n# This is used
for mod_python.publi
sher security tests\r\n_SECRET_PASSWORD = \'root\'\r\n__ANSWER =
42\r\n\r\nclass SimpleTestCase(unittest.TestCase):\r\n\r\n    def
__init__(self, methodName, re
q):\r\n        unittest.TestCase.__init__(self, methodName)\r\n
self.req = req\r\n\r\n    def test_apache_log_error(self):\r\n\r\n
  s = self.req.se
rver\r\n        apache.log_error("Testing apache.log_error():",
apache.APLOG_INFO, s)\r\n        apache.log_error("xEMERGx",
apache.APLOG_EMERG, s)\r\n        a
pache.log_error("xALERTx", apache.APLOG_ALERT, s)\r\n
apache.log_error("xCRITx", apache.APLOG_CRIT, s)\r\n
apache.log_error("xERRx", apache.APLOG_
ERR, s)\r\n        apache.log_error("xWARNINGx", apache.APLOG_WARNING,
s)\r\n        apache.log_error("xNOTICEx", apache.APLOG_NOTICE, s)\r\n
      apache.log_
error("xINFOx", apache.APLOG_INFO, s)\r\n
apache.log_error("xDEBUGx", apache.APLOG_DEBUG, s)\r\n\r\n        # see
what\'s in the log now\r\n        f = o
pen("%s/logs/error_log" % apache.server_root())\r\n        # for some
reason re doesn\'t like \\n, why?\r\n        import string\r\n
log = "".join(map(st
ring.strip, f.readlines()))\r\n        f.close()\r\n\r\n        if not
re.search("xEMERGx.*xALERTx.*xCRITx.*xERRx.*xWARNINGx.*xNOTICEx.*xINFOx.*xDEBUGx",
log):\
r\n            self.fail("Could not find test messages in
error_log")\r\n            \r\n\r\n    def
test_apache_table(self):\r\n\r\n        log = self.req.log_
error\r\n\r\n        log("Testing table object.")\r\n\r\n        # tests
borrowed from Python test suite for dict\r\n
_test_table()\r\n\r\n        # inhe
ritance\r\n        log("  inheritance")\r\n        class
mytable(apache.table):\r\n            def __str__(self):\r\n
    return "str() from mytable"
\r\n        mt = mytable({\'a\':\'b\'})\r\n\r\n        # add()\r\n
  log("  table.add()")\r\n        a = apache.table({\'a\':\'b\'})\r\n
      a.add(\'a\'
, \'c\')\r\n        if a[\'a\'] != [\'b\', \'c\']:\r\n
self.fail(\'table.add() broken: a["a"] is %s\' % `a["a"]`)\r\n\r\n
  log("Table test DONE
.")\r\n\r\n    def test_req_add_common_vars(self):\r\n\r\n
self.req.log_error("Testing req.add_common_vars().")\r\n\r\n        a =
len(self.req.subproces
s_env)\r\n        self.req.add_common_vars()\r\n        b =
len(self.req.subprocess_env)\r\n        if a >= b: \r\n
self.fail("req.subprocess_env() i
s same size before and after")\r\n\r\n    def
test_req_members(self):\r\n\r\n        # just run through request
members making sure\r\n        # they make sense
\r\n\r\n        req = self.req\r\n        log = req.log_error\r\n\r\n
     log("Examining request memebers:")\r\n\r\n        log("
req.connection: %s" % `r
eq.connection`)\r\n        s = str(type(req.connection))\r\n        if s
!= "<type \'mp_conn\'>":\r\n            self.fail("strange
req.connection type %s" % `s
`)\r\n\r\n        log("    req.server: \'%s\'" % `req.server`)\r\n
  s = str(type(req.server))\r\n        if s != "<type
\'mp_server\'>":\r\n            se
lf.fail("strange req.server type %s" % `s`)\r\n\r\n        for x in
((req.next, "next"),\r\n                  (req.prev, "prev"),\r\n
           (req.main
, "main")):\r\n            val, name = x\r\n            log("    req.%s:
\'%s\'" % (name, `val`))\r\n            if val:\r\n
self.fail("strange,
req.%s should be None, not %s" % (name, `val`))\r\n        \r\n
log("    req.the_request: \'%s\'" % req.the_request)\r\n        if not
re.match(r"GET /.*
 HTTP/1\\.", req.the_request):\r\n            self.fail("strange
req.the_request %s" % `req.the_request`)\r\n\r\n        for x in
((req.assbackwards, "assbackwa
rds"),\r\n                  (req.proxyreq, "proxyreq"),\r\n
     (req.header_only, "header_only")):\r\n            val, name =
x\r\n            log(
"    req.%s: %s" % (name, `val`))\r\n            if val:\r\n
    self.fail("%s should be 0" % name)\r\n\r\n        log("
req.protocol: %s" % `req.
protocol`)\r\n        if not req.protocol ==
req.the_request.split()[-1]:\r\n            self.fail("req.protocol
doesn\'t match req.the_request")\r\n\r\n
 log("    req.proto_num: %s" % `req.proto_num`)\r\n        if
req.proto_num != 1000 + int(req.protocol[-1]):\r\n
self.fail("req.proto_num doesn\'t ma
tch req.protocol")\r\n\r\n        log("    req.hostname: %s" %
`req.hostname`)\r\n        if req.hostname != "test_internal":\r\n
      self.fail("req.host
name isn\'t \'test_internal\'")\r\n\r\n        log("
req.request_time: %s" % `req.request_time`)\r\n        if (time.time() -
req.request_time) > 10:\r\n
        self.fail("req.request_time suggests request started more than
10 secs ago")\r\n\r\n        log("    req.status_line: %s" %
`req.status_line`)\r\n
  if req.status_line:\r\n            self.fail("req.status_line should
be None at this point")\r\n\r\n        log("    req.status: %s" %
`req.status`)\r\n
  if req.status != 200:\r\n            self.fail("req.status should be
200")\r\n        req.status = req.status # make sure its
writable\r\n\r\n        log("
 req.method: %s" % `req.method`)\r\n        if req.method != "GET":\r\n
           self.fail("req.method should be \'GET\'")\r\n\r\n
log("    req.method_
number: %s" % `req.method_number`)        \r\n        if
req.method_number != 0:\r\n            self.fail("req.method_number
should be 0")\r\n\r\n        log("
   req.allowed: %s" % `req.allowed`)\r\n        if req.allowed !=
0:\r\n            self.fail("req.allowed should be 0")\r\n
\r\n        log("    req
.allowed_xmethods: %s" % `req.allowed_xmethods`)\r\n        if
req.allowed_xmethods != ():\r\n
self.fail("req.allowed_xmethods should be an empty tup
le")\r\n            \r\n        log("    req.allowed_methods: %s" %
`req.allowed_methods`)\r\n        if req.allowed_methods != ():\r\n
       self.fail("re
q.allowed_methods should be an empty tuple")\r\n            \r\n
log("    req.sent_bodyct: %s" % `req.sent_bodyct`)\r\n        if
req.sent_bodyct != 0:\r
\n            self.fail("req.sent_bodyct should be 0")\r\n
\r\n        log("    req.bytes_sent: %s" % `req.bytes_sent`)\r\n
save = req.bytes_s
ent\r\n        log("       writing 4 bytes...")\r\n
req.write("1234")\r\n        log("       req.bytes_sent: %s" %
`req.bytes_sent`)\r\n        if req.by
tes_sent - save != 4:\r\n            self.fail("req.bytes_sent should
have incremented by 4, but didn\'t")\r\n\r\n        log("    req.mtime:
%s" % `req.mtime`)
\r\n        if req.mtime != 0:\r\n            self.fail("req.mtime
should be 0")\r\n        \r\n        log("    req.chunked: %s" %
`req.chunked`)\r\n        if
 req.chunked != 1:\r\n            self.fail("req.chunked should be
1")\r\n            \r\n        log("    req.range: %s" %
`req.range`)\r\n        if req.range
:\r\n            self.fail("req.range should be None")\r\n
\r\n        log("    req.clength: %s" % `req.clength`)\r\n        log("
       calling req
.set_content_length(15)...")\r\n        req.set_content_length(15)\r\n
      log("        req.clength: %s" % `req.clength`)\r\n        if
req.clength != 15:\r\
n            self.fail("req.clength should be 15")\r\n        \r\n
  log("    req.remaining: %s" % `req.remaining`)\r\n        if
req.remaining != 0:\r\n
          self.fail("req.remaining should be 0")\r\n            \r\n
     log("    req.read_length: %s" % `req.read_length`)\r\n        if
req.read_length !=
0:\r\n            self.fail("req.read_length should be 0")\r\n
\r\n        log("    req.read_body: %s" % `req.read_body`)\r\n        if
req.read_body !=
0:\r\n            self.fail("req.read_body should be 0")\r\n
\r\n        log("    req.read_chunked: %s" % `req.read_chunked`)\r\n
    if req.read_
chunked != 0:\r\n            self.fail("req.read_chunked should be
0")\r\n            \r\n        log("    req.expecting_100: %s" %
`req.expecting_100`)\r\n
    if req.expecting_100 != 0:\r\n
self.fail("req.expecting_100 should be 0")\r\n\r\n        log("
req.headers_in: %s" % `req.headers_in`) \r\n
     if req.headers_in["Host"][:13].lower() != "test_internal":\r\n
        self.fail("The \'Host\' header should begin with
\'test_internal\'")\r\n\r\n
   log("    req.headers_out: %s" % `req.headers_out`)\r\n        if
((not req.headers_out.has_key("content-length")) or\r\n
req.headers_out["content-
length"] != "15"):\r\n
self.fail("req.headers_out[\'content-length\'] should be 15")\r\n
     \r\n        log("    req.subprocess_env: %s" % `r
eq.subprocess_env`)\r\n        if
req.subprocess_env["SERVER_SOFTWARE"].find("Python") == -1:\r\n
   self.fail("req.subprocess_env[\'SERVER_SOFTWARE\']
should contain \'Python\'")\r\n            \r\n        log("
req.notes: %s" % `req.notes`)\r\n        log("        doing
req.notes[\'testing\'] = \'123\' ...
")\r\n        req.notes[\'testing\'] = \'123\'\r\n        log("
req.notes: %s" % `req.notes`)\r\n        if req.notes["testing"] !=
\'123\':\r\n            s
elf.fail("req.notes[\'testing\'] should be \'123\'")\r\n        \r\n
    log("    req.phase: %s" % `req.phase`)\r\n        if req.phase !=
"PythonHandler":\r
\n            self.fail("req.phase should be \'PythonHandler\'")\r\n
        \r\n        log("    req.interpreter: %s" %
`req.interpreter`)\r\n        if req
.interpreter != req.server.server_hostname:\r\n
self.fail("req.interpreter should be same as req.server_hostname: %s" %
`req.server_hostname`)\r\n
         \r\n        log("    req.content_type: %s" %
`req.content_type`)\r\n        log("        doing req.content_type =
\'test/123\' ...")\r\n        req.con
tent_type = \'test/123\'\r\n        log("        req.content_type: %s" %
`req.content_type`)\r\n        if req.content_type != \'test/123\' or
not req._content_
type_set:\r\n            self.fail("req.content_type should be
\'test/123\' and req._content_type_set 1")\r\n        \r\n        log("
   req.handler: %s" % `re
q.handler`)\r\n        if req.handler != "mod_python":\r\n
self.fail("req.handler should be \'mod_python\'")\r\n            \r\n
     log("    req.
content_encoding: %s" % `req.content_encoding`)\r\n        if
req.content_encoding:\r\n            self.fail("req.content_encoding
should be None")\r\n
    \r\n        log("    req.content_languages: %s" %
`req.content_languages`)\r\n        if req.content_languages != ():\r\n
           self.fail("req.content_
languages should be an empty tuple")\r\n            \r\n        log("
 req.vlist_validator: %s" % `req.vlist_validator`)\r\n        if
req.vlist_validator:\r\
n            self.fail("req.vlist_validator should be None")\r\n
    \r\n        log("    req.user: %s" % `req.user`)\r\n        if
req.user:\r\n
    self.fail("req.user should be None")\r\n            \r\n
log("    req.ap_auth_type: %s" % `req.ap_auth_type`)\r\n        if
req.ap_auth_type:\r\n
        self.fail("req.ap_auth_type should be None")\r\n
\r\n        log("    req.no_cache: %s" % `req.no_cache`)\r\n        if
req.no_cache != 0:\r\
n            self.fail("req.no_cache should be 0")\r\n            \r\n
      log("    req.no_local_copy: %s" % `req.no_local_copy`)\r\n
 if req.no_local_
copy != 0:\r\n            self.fail("req.no_local_copy should be 0")\r\n
           \r\n        log("    req.unparsed_uri: %s" %
`req.unparsed_uri`)\r\n
if req.unparsed_uri != "/tests.py":\r\n
self.fail("req.unparse_uri should be \'/tests.py\'")\r\n            \r\n
       log("    req.uri: %s" % `req.
uri`)\r\n        if req.uri != "/tests.py":\r\n
self.fail("req.uri should be \'/tests.py\'")\r\n            \r\n
log("    req.filename: %s" %
`req.filename`)\r\n        if req.filename != req.document_root() +
req.uri:\r\n            self.fail("req.filename should be
req.document_root() + req.uri, but
 it isn\'t")\r\n            \r\n        log("
req.canonical_filename: %s" % `req.canonical_filename`)\r\n        if
not req.canonical_filename:\r\n
  self.fail("req.canonical_filename should not be blank")\r\n
\r\n        log("    req.path_info: %s" % `req.path_info`)\r\n        if
req.path_info != \
'\':\r\n            self.fail("req.path_info should be \'\'")\r\n
 \r\n        log("    req.args: %s" % `req.args`)\r\n        if
req.args:\r\n
 self.fail("req.args should be None")\r\n            \r\n        log("
   req.finfo: %s" % `req.finfo`)\r\n        if req.finfo[10] and
(req.finfo[10] != req.ca
nonical_filename):\r\n            self.fail("req.finfo[10] should be the
(canonical) filename")\r\n        \r\n        log("    req.parsed_uri:
%s" % `req.parse
d_uri`)\r\n        if req.parsed_uri[6] != \'/tests.py\':\r\n
 self.fail("req.parsed_uri[6] should be \'/tests.py\'")\r\n
\r\n        log("
    req.used_path_info: %s" % `req.used_path_info`)\r\n        if
req.used_path_info != 2:\r\n            self.fail("req.used_path_info
should be 2") # XXX real
ly? :-)\r\n            \r\n        log("    req.eos_sent: %s" %
`req.eos_sent`)\r\n        if req.eos_sent:\r\n
self.fail("req.eos_sent says we sent
EOS, but we didn\'t")\r\n\r\n    def test_req_get_config(self):\r\n\r\n
       req = self.req\r\n        log = req.log_error\r\n\r\n
log("req.get_config(
): %s" % `req.get_config()`)\r\n        if
req.get_config()["PythonDebug"] != "1":\r\n
self.fail("get_config return should show PythonDebug 1")\r\n\r
\n        log("req.get_options(): %s" % `req.get_options()`)\r\n
if req.get_options() != apache.table({"testing":"123"}):\r\n
self.fail("get_o
ptions() should contain \'testing\':\'123\', contains
%s"%req.get_options().items())\r\n\r\n    def
test_req_get_remote_host(self):\r\n\r\n        # simulating
this test for real is too complex...\r\n        req = self.req\r\n
  log = req.log_error\r\n        log("req.get_get_remote_host(): %s" %
`req.get_remote_h
ost(apache.REMOTE_HOST)`)\r\n        log("req.get_get_remote_host(): %s"
% `req.get_remote_host()`)\r\n        if
(req.get_remote_host(apache.REMOTE_HOST) != No
ne) or \\\r\n           (req.get_remote_host() != "127.0.0.1"):\r\n
       self.fail("remote host test failed")\r\n\r\n    def
test_server_members(self):\r\
n\r\n        req = self.req\r\n        log = req.log_error\r\n
server = req.server\r\n\r\n        log("Examining server
memebers:")\r\n\r\n        log("
   server.defn_name: %s" % `server.defn_name`)\r\n        if
server.defn_name[-9:] != "test.conf":\r\n
self.fail("server.defn_name does not end in \'
test.conf\'")\r\n        \r\n        log("    server.defn_line_number:
%s" % `server.defn_line_number`)\r\n        if server.defn_line_number
== 0:\r\n
   self.fail("server.defn_line_number should not be 0")\r\n        \r\n
       log("    server.server_admin: %s" % `server.server_admin`)\r\n
      if server.s
erver_admin != "[EMAIL PROTECTED]":\r\n
self.fail("server.server_admin must be
\'[EMAIL PROTECTED]'")\r\n        \r\n        log("
  server.server_hostname: %s" % `server.server_hostname`)\r\n        if
server.server_hostname != "test_internal":\r\n
self.fail("server.server_hostn
ame must be \'test_internal\'")\r\n        \r\n        log("
server.port: %s" % `server.port`)\r\n        # hmm it really is 0...\r\n
       #if server.port
== 0:\r\n        #    self.fail("server.port should not be 0")\r\n
      \r\n        log("    server.error_fname: %s" %
`server.error_fname`)\r\n        if
 server.error_fname != "logs/error_log":\r\n
self.fail("server.error_fname should be \'logs/error_log\'")\r\n
\r\n        log("    server.logl
evel: %s" % `server.loglevel`)\r\n        if server.loglevel != 7:\r\n
          self.fail("server.loglevel should be 7")\r\n        \r\n
   log("    serve
r.is_virtual: %s" % `server.is_virtual`)\r\n        if server.is_virtual
!= 1:\r\n            self.fail("server.is_virtual should be 1")\r\n
   \r\n
log("    server.timeout: %s" % `server.timeout`)\r\n        if not
server.timeout in (5.0, 300.0):\r\n            self.fail("server.timeout
should be 5.0 or 300
.0")\r\n        \r\n        log("    server.keep_alive_timeout: %s" %
`server.keep_alive_timeout`)\r\n        if server.keep_alive_timeout !=
15.0:\r\n
   self.fail("server.keep_alive_timeout should be 15.0")\r\n
 \r\n        log("    server.keep_alive_max: %s" %
`server.keep_alive_max`)\r\n        if
 server.keep_alive_max != 100:\r\n
self.fail("server.keep_alive_max should be 100")\r\n            \r\n
    log("    server.keep_alive: %s" % `ser
ver.keep_alive`)\r\n        if server.keep_alive != 1:\r\n
self.fail("server.keep_alive should be 1")\r\n        \r\n        log("
   server.path: %s
" % `server.path`)\r\n        if server.path != "some/path":\r\n
    self.fail("server.path should be \'some/path\'")\r\n        \r\n
     log("    ser
ver.pathlen: %s" % `server.pathlen`)\r\n        if server.pathlen !=
len(\'some/path\'):\r\n            self.fail("server.pathlen should be
%d" % len(\'some/pat
h\'))\r\n        \r\n        log("    server.limit_req_line: %s" %
`server.limit_req_line`)\r\n        if server.limit_req_line !=
8190:\r\n            self.fai
l("server.limit_req_line should be 8190")\r\n            \r\n
log("    server.limit_req_fieldsize: %s" %
`server.limit_req_fieldsize`)\r\n        if serv
er.limit_req_fieldsize != 8190:\r\n
self.fail("server.limit_req_fieldsize should be 8190")\r\n
\r\n        log("    server.limit_req_field
s: %s" % `server.limit_req_fields`)\r\n        if
server.limit_req_fields != 100:\r\n
self.fail("server.limit_req_fields should be 100")\r\n  \r\n
     log("    server.names: %s" % `server.names`)\r\n        if
server.names != ():\r\n            self.fail("server.names should be an
empty tuple")
\r\n \r\n        log("    server.wild_names: %s" %
`server.wild_names`)\r\n        if server.wild_names != ():\r\n
   self.fail("server.wild_names shoul
d be an empty tuple")\r\n            \r\n\r\n    def
test_connection_members(self):\r\n\r\n        req = self.req\r\n
log = req.log_error\r\n        conn
 = req.connection\r\n\r\n        log("Examining connection
memebers:")\r\n\r\n        log("    connection.base_server: %s" %
`conn.base_server`)\r\n        if t
ype(conn.base_server) is not type(req.server):\r\n
self.fail("conn.base_server should be same type as req.server")\r\n
   \r\n        log("    co
nnection.local_addr: %s" % `conn.local_addr`)\r\n        if not
conn.local_addr[0] in ("127.0.0.1", "0.0.0.0"):\r\n
self.fail("conn.local_addr[0] sho
uld be \'127.0.0.1\' or \'0.0.0.0\'")\r\n        \r\n        log("
connection.remote_addr: %s" % `conn.remote_addr`)\r\n        if not
conn.remote_addr[0] in
 ("127.0.0.1", "0.0.0.0"):\r\n
self.fail("conn.remote_addr[0] should be \'127.0.0.1\' or
\'0.0.0.0\'")\r\n\r\n        log("    connection.remote_ip:
%s" % `conn.remote_ip`)\r\n        if conn.remote_ip != "127.0.0.1":\r\n
           self.fail("conn.remote_ip should be \'127.0.0.1\'")\r\n\r\n
       log("
connection.remote_host: %s" % `conn.remote_host`)\r\n        if
conn.remote_host is not None:\r\n            self.fail("conn.remote_host
should be None")\r\n\r\
n        log("    connection.remote_logname: %s" %
`conn.remote_logname`)\r\n        if conn.remote_logname is not
None:\r\n            self.fail("conn.remote_l
ogname should be None")\r\n        \r\n        log("
connection.aborted: %s" % `conn.aborted`)\r\n        if conn.aborted !=
0:\r\n            self.fail("con
n.aborted should be 0")\r\n\r\n        log("    connection.keepalive:
%s" % `conn.keepalive`)\r\n        if conn.keepalive != 2:\r\n
  self.fail("conn.
keepalive should be 2")\r\n        \r\n        log("
connection.double_reverse: %s" % `conn.double_reverse`)\r\n        if
conn.double_reverse != 0:\r\n
       self.fail("conn.double_reverse should be 0")\r\n        \r\n
    log("    connection.keepalives: %s" % `conn.keepalives`)\r\n
 if conn.keepalive
s != 1:\r\n            self.fail("conn.keepalives should be 1")\r\n\r\n
       log("    connection.local_ip: %s" % `conn.local_ip`)\r\n
if conn.local_ip
!= "127.0.0.1":\r\n            self.fail("conn.local_ip should be
\'127.0.0.1\'")\r\n\r\n        log("    connection.local_host: %s" %
`conn.local_host`)\r\n
     if conn.local_host is not None:\r\n
self.fail("conn.local_host should be None")\r\n\r\n        log("
connection.id: %s" % `conn.id`)\r\n
   if conn.id > 100:\r\n            self.fail("conn.id should not be
this high")\r\n        \r\n        log("    connection.notes: %s" %
`conn.notes`)\r\n
  if `conn.notes` != \'{}\':\r\n            self.fail("conn.notes
should be {}")\r\n\r\ndef make_suite(req):\r\n\r\n    mpTestSuite =
unittest.TestSuite()\r\n
  mpTestSuite.addTest(SimpleTestCase("test_apache_log_error", req))\r\n
   mpTestSuite.addTest(SimpleTestCase("test_apache_table", req))\r\n
 mpTestSuite.addT
est(SimpleTestCase("test_req_add_common_vars", req))\r\n
mpTestSuite.addTest(SimpleTestCase("test_req_members", req))\r\n
mpTestSuite.addTest(SimpleTestCa
se("test_req_get_config", req))\r\n
mpTestSuite.addTest(SimpleTestCase("test_req_get_remote_host", req))\r\n
   mpTestSuite.addTest(SimpleTestCase("test_serv
er_members", req))\r\n
mpTestSuite.addTest(SimpleTestCase("test_connection_members", req))\r\n
   return mpTestSuite\r\n\r\n\r\ndef handler(req):\r\n\r\n
out = cStringIO.StringIO()\r\n\r\n    tr =
unittest.TextTestRunner(out)\r\n    result =
tr.run(make_suite(req))\r\n\r\n    req.log_error(out.getvalue())\r\n\r\n
    if result.wasSuccessful():\r\n        req.write("test ok")\r\n
else:\r\n        req.write("test failed")\r\n\r\n    return
apache.OK\r\n\r\ndef req_add_h
andler(req):\r\n\r\n    req.secret_message = "foo"\r\n
req.add_handler("PythonHandler", "tests::simple_handler")\r\n\r\n
return apache.OK\r\n\r\ndef simpl
e_handler(req):\r\n    # for req_add_handler()\r\n    if
(req.secret_message == "foo"):\r\n        req.write("test ok")\r\n
  \r\n    return apache.OK\r\n\
r\ndef req_add_bad_handler(req):\r\n    # bad_handler does not exist so
adding it should \r\n    # should raise an AttributeError exception\r\n
   \r\n    req.l
og_error("req_add_bad_handler")\r\n    req.add_handler("PythonHandler",
"tests::bad_handler")\r\n    req.write("test ok")\r\n\r\n    return
apache.OK\r\n\r\ndef
 req_add_empty_handler_string(req):\r\n    # Adding an empty string as
a handler should should \r\n    # should raise an exception\r\n    \r\n
   req.log_error(
"req_add_empty_handler_string")\r\n    req.add_handler("PythonHandler",
"")\r\n    req.write("no exception")\r\n\r\n    return
apache.OK\r\n\r\ndef accesshandle
r_add_handler_to_empty_hl(req):\r\n    # Prior to version 3.2.6, adding
a python handler \r\n    # to and empty handler list would cause a
segfault\r\n \r\n
req.secret_message = "foo"\r\n
req.log_error("accesshandler_add_handler_to_empty_hl")\r\n
req.add_handler("PythonHandler", "tests::simple_handler")\r\n\r\
n    return apache.OK\r\n\r\ndef req_allow_methods(req):\r\n\r\n
req.allow_methods(["PYTHONIZE"])\r\n    return
apache.HTTP_METHOD_NOT_ALLOWED\r\n\r\ndef req
_get_basic_auth_pw(req):\r\n\r\n    pw = req.get_basic_auth_pw()\r\n
if req.user != "spam" or pw != "eggs":\r\n        req.write("test
failed")\r\n    else:\
r\n        req.write("test ok")\r\n\r\n    return apache.OK\r\n\r\ndef
req_auth_type(req):\r\n\r\n    if (req.phase ==
"PythonAuthenHandler"):\r\n        if req
.auth_type() != "dummy":\r\n            req.log_error("auth_type check
failed")\r\n            req.write("test failed")\r\n            return
apache.DONE\r\n
     if req.auth_name() != "blah":\r\n
req.log_error("auth_name check failed")\r\n            req.write("test
failed")\r\n            return apache.D
ONE\r\n        req.user = "dummy"\r\n        req.ap_auth_type =
req.auth_type()\r\n    else:\r\n        if req.ap_auth_type !=
"dummy":\r\n            req.log_e
rror("ap_auth_type check failed")\r\n            req.write("test
failed")\r\n            return apache.OK\r\n        if req.user !=
"dummy":\r\n            req.
log_error("user check failed")\r\n            req.write("test
failed")\r\n            return apache.OK\r\n        req.write("test
ok")\r\n\r\n    return apache.
OK\r\n\r\ndef req_requires(req):\r\n\r\n    req.user = "blah" # or
else!\r\n\r\n    if req.requires() == (\'valid-user\',):\r\n
req.write("test ok")\r\n
       return apache.DONE\r\n\r\n    return apache.OK\r\n\r\ndef
req_document_root(req):\r\n\r\n    req.write(req.document_root())\r\n
 return apache.OK\r\n\r
\ndef req_internal_redirect(req):\r\n\r\n
req.internal_redirect("/test.int")\r\n\r\n    return
apache.OK\r\n\r\ndef req_internal_redirect_int(req):\r\n    #
used by req_internal_redirect\r\n\r\n    req.prev.write("test ")\r\n
req.write("ok")\r\n\r\n    return apache.OK\r\n\r\ndef
req_construct_url(req):\r\n\r\n
  url = req.construct_url("/index.html")\r\n\r\n    if not
re.match("^http://test_req_construct_url:[0-9]+/index.html$",url):\r\n
      req.write("test failed"
)\r\n    else:\r\n        req.write("test ok")\r\n\r\n    return
apache.OK\r\n\r\ndef req_read(req):\r\n\r\n    s = req.read()\r\n
req.write(s)\r\n\r\n    re
turn apache.OK\r\n\r\ndef req_readline(req):\r\n\r\n    s =
req.readline()\r\n    while s:\r\n        req.write(s)\r\n        s =
req.readline()\r\n\r\n    retu
rn apache.OK\r\n\r\ndef req_readlines(req):\r\n\r\n    lines =
req.readlines()\r\n    req.write("".join(lines))\r\n\r\n    return
apache.OK\r\n\r\ndef req_regis
ter_cleanup(req):\r\n\r\n    req.cleanup_data = "req_register_cleanup
test ok"\r\n    req.register_cleanup(cleanup, req)\r\n
req.write("registered cleanup th
at will write to log")\r\n\r\n    return apache.OK\r\n\r\ndef
cleanup(data):\r\n    # for req_register_cleanup above\r\n\r\n
data.log_error(data.cleanup_data
)\r\n\r\ndef server_cleanup(data):\r\n    # for srv_register_cleanup and
apache_register_cleanup below\r\n\r\n
apache.log_error(data)\r\n\r\ndef req_headers_
out(req):\r\n\r\n    req.headers_out["X-Test-Header"] = "test ok"\r\n
 req.write("test ok")\r\n\r\n    return apache.OK\r\n\r\ndef
req_headers_out_access(req)
:\r\n\r\n    return apache.OK\r\n\r\ndef req_sendfile(req):\r\n\r\n
import tempfile\r\n    fname  = tempfile.mktemp("txt")\r\n    f =
open(fname, "w")\r\n
 f.write("  test ok  ");\r\n    f.close()\r\n\r\n
req.sendfile(fname, 2, 7)\r\n\r\n    # os.remove(fname)\r\n    return
apache.OK\r\n\r\ndef req_sendfile2(re
q):\r\n\r\n    import tempfile\r\n    fname  =
tempfile.mktemp("txt")\r\n    f = open(fname, "w")\r\n
f.write("0123456789"*100);\r\n    f.close()\r\n\r\n
req.sendfile(fname)\r\n\r\n    # os.remove(fname)\r\n    return
apache.OK\r\n \r\ndef req_sendfile3(req):\r\n    """Check if sendfile
handles symlinks properly.
\r\n       This is only valid on posix systems.\r\n    """\r\n\r\n
import tempfile\r\n    # note mktemp is deprecated in python 2.3. Should
use mkstemp inste
ad.\r\n    fname  = tempfile.mktemp("txt")\r\n    f = open(fname,
"w")\r\n    f.write("0123456789"*100);\r\n    f.close()\r\n
fname_symlink =  \'%s.lnk\' % f
name\r\n    os.symlink(fname, fname_symlink)\r\n
req.sendfile(fname_symlink)\r\n    os.remove(fname_symlink)\r\n
os.remove(fname)\r\n    return apache.OK\
r\n\r\ndef req_handler(req):\r\n    if req.phase ==
"PythonFixupHandler":\r\n        req.handler = "mod_python"\r\n
req.add_handler("PythonHandler","test
s::req_handler")\r\n        return apache.OK\r\n    elif req.phase ==
"PythonHandler":\r\n        req.write(\'test ok\')\r\n        return
apache.OK\r\n    else
:\r\n        req.write(\'test failed\')\r\n        return
apache.OK\r\n\r\ndef fileupload(req):\r\n    from mod_python import
util\r\n    import md5\r\n    fiel
ds = util.FieldStorage(req)\r\n    f = fields.getfirst(\'testfile\')\r\n
   \r\n    req.write(md5.new(f.file.read()).hexdigest())\r\n    return
apache.OK\r\n\r\
ndef srv_register_cleanup(req):\r\n\r\n
req.server.register_cleanup(req, server_cleanup, "srv_register_cleanup
test ok")\r\n    req.write("registered server
cleanup that will write to log")\r\n\r\n    return apache.OK\r\n\r\ndef
apache_register_cleanup(req):\r\n\r\n
apache.register_cleanup(req.interpreter, req.se
rver, server_cleanup, "apache_register_cleanup test ok")\r\n
req.write("registered server cleanup that will write to log")\r\n\r\n
 return apache.OK\r\n\r\
ndef apache_exists_config_define(req):\r\n    if
apache.exists_config_define(\'FOOBAR\'):\r\n
req.write(\'FOOBAR\')\r\n    else:\r\n        req.write(\'N
O_FOOBAR\')\r\n    return apache.OK\r\n\r\ndef
util_fieldstorage(req):\r\n\r\n    from mod_python import util\r\n
req.write(`util.FieldStorage(req).list`)\r\
n    return apache.OK\r\n\r\ndef postreadrequest(req):\r\n\r\n
req.write("test ok")\r\n\r\n    return apache.DONE\r\n\r\n\r\ndef
trans(req):\r\n\r\n    req.f
ilename = req.document_root()+"/tests.py"\r\n\r\n    return
apache.OK\r\n\r\ndef import_test(req):\r\n\r\n    import sys\r\n    if
sys.modules.has_key("dummymod
ule"):\r\n        req.write("test ok")\r\n    else:\r\n
req.log_error("dummymodule not found in sys.modules")\r\n
req.write("test failed")\r\n\r\n
    return apache.OK\r\n\r\ndef outputfilter(filter):\r\n\r\n    s =
filter.read()\r\n    while s:\r\n        filter.write(s.upper())\r\n
    s = filter.read
()\r\n\r\n    if s is None:\r\n        filter.close()\r\n\r\n    return
apache.OK\r\n\r\ndef simplehandler(req):\r\n\r\n    req.write("test
ok")\r\n\r\n    retu
rn apache.OK\r\n\r\ndef connectionhandler(conn):\r\n\r\n    # read
whatever\r\n    s = conn.readline().strip()\r\n    while s:\r\n        s
= conn.readline().st
rip()\r\n\r\n    # fake an HTTP response\r\n    conn.write("HTTP/1.1 200
OK\\r\\n")\r\n    conn.write("Content-Length: 7\\r\\n\\r\\n")\r\n
conn.write("test o
k")\r\n\r\n    return apache.OK\r\n\r\ndef pipe_ext(req):\r\n\r\n    #
this is called by publisher\r\n\r\n    return "pipe ext"\r\n\r\n\r\ndef
Cookie_Cookie(req
):\r\n\r\n    from mod_python import Cookie\r\n\r\n    cookies =
Cookie.get_cookies(req)\r\n\r\n    for k in cookies:\r\n
Cookie.add_cookie(req, cookies[
k])\r\n\r\n    req.write("test ok")\r\n    \r\n    return
apache.OK\r\n\r\ndef Cookie_MarshalCookie(req):\r\n\r\n    from
mod_python import Cookie\r\n\r\n    co
okies = Cookie.get_cookies(req, Cookie.MarshalCookie,\r\n
                 secret="secret")\r\n\r\n    for k in cookies:\r\n
   Cookie.add_coo
kie(req, cookies[k])\r\n\r\n    req.write("test ok")\r\n    \r\n
return apache.OK\r\n    \r\n\r\ndef global_lock(req):\r\n\r\n    import
_apache\r\n\r\n    _
apache._global_lock(req.server, 1)\r\n    time.sleep(1)\r\n
_apache._global_unlock(req.server, 1)\r\n\r\n    req.write("test
ok")\r\n    \r\n    return apach
e.OK\r\n\r\ndef Session_Session(req):\r\n\r\n    from mod_python import
Session, Cookie\r\n\r\n    s = Session.Session(req)\r\n    if
s.is_new():\r\n        s.s
ave()\r\n        \r\n    cookies = Cookie.get_cookies(req)\r\n    if
cookies.has_key(Session.COOKIE_NAME) and s.is_new():\r\n
req.write(str(cookies[Sessi
on.COOKIE_NAME]))\r\n    else:\r\n        req.write("test ok")\r\n\r\n
  return apache.OK\r\n\r\ndef test_sys_argv(req):\r\n    import sys\r\n
   req.write(rep
r(sys.argv))\r\n    return apache.OK\r\n        \r\ndef
PythonOption_items(req):\r\n    options = req.get_options().items()\r\n
   options.sort()\r\n    req.wri
te(str(options))\r\n    return apache.OK\r\n\r\ndef
interpreter(req):\r\n    req.write(req.interpreter)\r\n    return
apache.OK\r\n\r\ndef index(req):\r\n    re
turn "test ok, interpreter=%s" % req.interpreter\r\n\r\ndef
test_publisher(req):\r\n    return "test ok, interpreter=%s" %
req.interpreter\r\n\r\nclass OldStyle
ClassTest:\r\n    def __init__(self):\r\n        pass\r\n    def
__call__(self, req):\r\n        return "test callable old-style instance
ok"\r\n    def travers
e(self, req):\r\n        return "test traversable old-style instance
ok"\r\nold_instance = OldStyleClassTest()\r\n\r\ntest_dict = {1:1, 2:2,
3:3}\r\ntest_dict_k
eys = test_dict.keys\r\n\r\ndef test_dict_iteration(req):\r\n    return
test_dict_keys()\r\n    \r\ndef test_generator(req):\r\n    c = 0\r\n
 while c < 10:\r
\n        yield c\r\n        c += 1\r\n\r\nclass
InstanceTest(object):\r\n    def __call__(self, req):\r\n        return
"test callable instance ok"\r\n    def
traverse(self, req):\r\n        return "test traversable instance
ok"\r\ninstance = InstanceTest()\r\n\r\n# Hierarchy traversal
tests\r\nclass Mapping(object):\
r\n    def __init__(self,name):\r\n        self.name = name\r\n\r\n
def __call__(self,req):\r\n        return "Called
%s"%self.name\r\nhierarchy_root = Mappi
ng("root");\r\nhierarchy_root.page1 =
Mapping("page1")\r\nhierarchy_root.page1.subpage1 =
Mapping("subpage1")\r\nhierarchy_root.page2 = Mapping("page2")\r\n\r\n
class Mapping2:\r\n    pass\r\nhierarchy_root_2 =
Mapping2()\r\nhierarchy_root_2.__call__ =
index\r\nhierarchy_root_2.page1 = index\r\nhierarchy_root_2.page2 =
index\r\n\r\ndef _test_table():\r\n\r\n    log =
apache.log_error\r\n\r\n    log("    starting _test_table")\r\n    d =
apache.table()\r\n    if d.keys() != []:
 raise TestFailed, \'{}.keys()\'\r\n    if d.has_key(\'a\') != 0: raise
TestFailed, \'{}.has_key(\\\'a\\\')\'\r\n    if (\'a\' in d) != 0: raise
TestFailed, "\'
a\' in {}"\r\n    if (\'a\' not in d) != 1: raise TestFailed, "\'a\' not
in {}"\r\n    if len(d) != 0: raise TestFailed, \'len({})\'\r\n    d =
{\'a\': 1, \'b\'
: 2}\r\n    if len(d) != 2: raise TestFailed, \'len(dict)\'\r\n    k =
d.keys()\r\n    k.sort()\r\n    if k != [\'a\', \'b\']: raise
TestFailed, \'dict keys()\'
\r\n    if d.has_key(\'a\') and d.has_key(\'b\') and not
d.has_key(\'c\'): pass\r\n    else: raise TestFailed, \'dict
keys()\'\r\n    if \'a\' in d and \'b\' in
 d and \'c\' not in d: pass\r\n    else: raise TestFailed, \'dict
keys() # in/not in version\'\r\n    if d[\'a\'] != 1 or d[\'b\'] != 2:
raise TestFailed, \'dic
t item\'\r\n    d[\'c\'] = 3\r\n    d[\'a\'] = 4\r\n    if d[\'c\'] != 3
or d[\'a\'] != 4: raise TestFailed, \'dict item assignment\'\r\n    del
d[\'b\']\r\n
 if d != {\'a\': 4, \'c\': 3}: raise TestFailed, \'dict item
deletion\'\r\n    \r\n    # dict.clear()\r\n    log("
table.clear()")\r\n    d = apache.table()\
r\n    d[\'1\'] = \'1\'\r\n    d[\'2\'] = \'2\'\r\n    d[\'3\'] =
\'3\'\r\n    d.clear()\r\n    if d != apache.table(): raise TestFailed,
\'dict clear\'\r\n
\r\n    # dict.update()\r\n    log("    table.update()")\r\n
d.update({\'1\':\'100\'})\r\n    d.update({\'2\':\'20\'})\r\n
d.update({\'1\':\'1\', \'2\':\'
2\', \'3\':\'3\'})\r\n    if d != apache.table({\'1\':\'1\',
\'2\':\'2\', \'3\':\'3\'}): raise TestFailed, \'dict update\'\r\n
d.clear()\r\n    try: d.update
(None)\r\n    except AttributeError: pass\r\n    else: raise TestFailed,
\'dict.update(None), AttributeError expected\'\r\n    class
SimpleUserDict:\r\n
def __init__(self):\r\n            self.d = {1:1, 2:2, 3:3}\r\n
def keys(self):\r\n            return self.d.keys()\r\n        def
__getitem__(self, i):\
r\n            return self.d[i]\r\n    d.update(SimpleUserDict())\r\n
 if d != apache.table({1:1, 2:2, 3:3}): raise TestFailed,
\'dict.update(instance)\'\r\n
   d.clear()\r\n    class FailingUserDict:\r\n        def
keys(self):\r\n            raise ValueError\r\n    try:
d.update(FailingUserDict())\r\n    except Valu
eError: pass\r\n    else: raise TestFailed, \'dict.keys() expected
ValueError\'\r\n    class FailingUserDict:\r\n        def
keys(self):\r\n            class Bo
gonIter:\r\n                def __iter__(self):\r\n
raise ValueError\r\n            return BogonIter()\r\n    try:
d.update(FailingUserDict()
)\r\n    except ValueError: pass\r\n    else: raise TestFailed,
\'iter(dict.keys()) expected ValueError\'\r\n    class
FailingUserDict:\r\n        def keys(self
):\r\n            class BogonIter:\r\n                def
__init__(self):\r\n                    self.i = 1\r\n                def
__iter__(self):\r\n
          return self\r\n                def next(self):\r\n
         if self.i:\r\n                        self.i = 0\r\n
              retu
rn \'a\'\r\n                    raise ValueError\r\n            return
BogonIter()\r\n        def __getitem__(self, key):\r\n            return
key\r\n    try:
d.update(FailingUserDict())\r\n    except ValueError: pass\r\n    else:
raise TestFailed, \'iter(dict.keys()).next() expected ValueError\'\r\n
  class FailingU
serDict:\r\n        def keys(self):\r\n            class BogonIter:\r\n
               def __init__(self):\r\n                    self.i =
ord(\'a\')\r\n
         def __iter__(self):\r\n                    return self\r\n
            def next(self):\r\n                    if self.i <=
ord(\'z\'):\r\n
              rtn = chr(self.i)\r\n                        self.i +=
1\r\n                        return rtn\r\n                    raise
StopIteration\r\n
       return BogonIter()\r\n        def __getitem__(self, key):\r\n
         raise ValueError\r\n    try: d.update(FailingUserDict())\r\n
  except ValueErro
r: pass\r\n    else: raise TestFailed, \'dict.update(), __getitem__
expected ValueError\'\r\n    # dict.copy()\r\n    log("
table.copy()")\r\n    d = {1:1, 2
:2, 3:3}\r\n    if d.copy() != {1:1, 2:2, 3:3}: raise TestFailed, \'dict
copy\'\r\n    if apache.table().copy() != apache.table(): raise
TestFailed, \'empty dic
t copy\'\r\n    # dict.get()\r\n    log("    table.get()")\r\n    d =
apache.table()\r\n    if d.get(\'c\') is not None: raise TestFailed,
\'missing {} get, no
2nd arg\'\r\n    if d.get(\'c\', \'3\') != \'3\': raise TestFailed,
\'missing {} get, w/ 2nd arg\'\r\n    d = apache.table({\'a\' : \'1\',
\'b\' : \'2\'})\r\n
  if d.get(\'c\') is not None: raise TestFailed, \'missing dict get, no
2nd arg\'\r\n    if d.get(\'c\', \'3\') != \'3\': raise TestFailed,
\'missing dict get,
w/ 2nd arg\'\r\n    if d.get(\'a\') != \'1\': raise TestFailed,
\'present dict get, no 2nd arg\'\r\n    if d.get(\'a\', \'3\') != \'1\':
raise TestFailed, \'pre
sent dict get, w/ 2nd arg\'\r\n    # dict.setdefault()\r\n    log("
table.setdefault()")\r\n    d = apache.table()\r\n
d.setdefault(\'key0\')\r\n    if d.
setdefault(\'key0\') is not "":\r\n        raise TestFailed, \'missing
{} setdefault, no 2nd arg\'\r\n    if d.setdefault(\'key0\') is not
"":\r\n        raise
TestFailed, \'present {} setdefault, no 2nd arg\'\r\n    #
dict.popitem()\r\n    log("    table.popitem()")\r\n    for copymode in
-1, +1:\r\n        # -1: b ha
s same structure as a\r\n        # +1: b is a.copy()\r\n        for
log2size in range(12):\r\n            size = 2**log2size\r\n
a = apache.table()\r
\n            b = apache.table()\r\n            for i in
range(size):\r\n                a[`i`] = str(i)\r\n                if
copymode < 0:\r\n
    b[`i`] = str(i)\r\n            if copymode > 0:\r\n
b = a.copy()\r\n            for i in range(size):\r\n                ka,
va = ta = a.popi
tem()\r\n                if va != ka: raise TestFailed, "a.popitem: %s"
% str(ta)\r\n                kb, vb = tb = b.popitem()\r\n
  if vb != kb: r
aise TestFailed, "b.popitem: %s" % str(tb)\r\n                if
copymode < 0 and ta != tb:\r\n                    raise TestFailed,
"a.popitem != b.popitem: %s
, %s" % (\r\n                        str(ta), str(tb))\r\n            if
a: raise TestFailed, \'a not empty after popitems: %s\' % str(a)\r\n
        if b: r
aise TestFailed, \'b not empty after popitems: %s\' % str(b)\r\n\r\n
# iteration (just make sure we can iterate without a segfault)\r\n    d
= apache.table({
\'a\' : \'1\', \'b\' : \'2\', \'c\' : \'3\'})\r\n    log("    for k in
table")\r\n    for k in d:\r\n        pass\r\n\r\n    log("
_test_table test finished"
)\r\n\r\n'

----------------------------------------------------------------------
Ran 48 tests in 21.484s

FAILED (failures=4)
F  Stopping Apache...
     "C:\Program Files\Apache Group\Apache2\bin\Apache.exe" -k stop -f
C:\source\mod_python\test\conf\test.conf
The Apache2 service is stopping.
The Apache2 service has stopped.

======================================================================
FAIL: testPerRequestTests (__main__.PerInstanceTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test.py", line 2130, in testPerRequestTests
    self.failUnless(result.wasSuccessful())
AssertionError

----------------------------------------------------------------------
Ran 6 tests in 92.843s

FAILED (failures=1)



Reply via email to