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