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