[Checkins] SVN: zc.zservertracelog/branches/alex-tests/ added test setup and rudimentary tests.

Alex Smith asmith at zope.com
Wed Aug 27 17:15:34 EDT 2008


Log message for revision 90471:
  
  added test setup and rudimentary tests.
  

Changed:
  U   zc.zservertracelog/branches/alex-tests/buildout.cfg
  U   zc.zservertracelog/branches/alex-tests/setup.py
  A   zc.zservertracelog/branches/alex-tests/src/zc/zservertracelog/README.txt
  U   zc.zservertracelog/branches/alex-tests/src/zc/zservertracelog/configure.zcml
  A   zc.zservertracelog/branches/alex-tests/src/zc/zservertracelog/tests.py
  U   zc.zservertracelog/branches/alex-tests/src/zc/zservertracelog/tracelog.py

-=-
Modified: zc.zservertracelog/branches/alex-tests/buildout.cfg
===================================================================
--- zc.zservertracelog/branches/alex-tests/buildout.cfg	2008-08-27 21:05:32 UTC (rev 90470)
+++ zc.zservertracelog/branches/alex-tests/buildout.cfg	2008-08-27 21:15:33 UTC (rev 90471)
@@ -1,7 +1,22 @@
 [buildout]
 develop = .
-parts = instance tracereport
+parts =
+    instance
+    interpreter
+    test
+    tracereport
 
+[interpreter]
+recipe = zc.recipe.egg
+interpreter = py
+eggs =
+    zc.zservertracelog
+
+[test]
+recipe = zc.recipe.testrunner
+eggs =
+    zc.zservertracelog [test]
+
 [zope3]
 location =
 

Modified: zc.zservertracelog/branches/alex-tests/setup.py
===================================================================
--- zc.zservertracelog/branches/alex-tests/setup.py	2008-08-27 21:05:32 UTC (rev 90470)
+++ zc.zservertracelog/branches/alex-tests/setup.py	2008-08-27 21:15:33 UTC (rev 90471)
@@ -31,7 +31,17 @@
     packages = find_packages('src'),
     namespace_packages = ['zc'],
     package_dir = {'': 'src'},
-    install_requires = 'setuptools',
+    install_requires = [
+        'setuptools',
+        'zope.app.testing',
+        'zope.testbrowser',
+        'zope.testing',
+        ],
+    extras_require=dict(
+        test=[
+            'zope.app.server',
+            'zope.app.securitypolicy',
+            ]),
     include_package_data = True,
     zip_safe = False,
     entry_points=entry_points,

Added: zc.zservertracelog/branches/alex-tests/src/zc/zservertracelog/README.txt
===================================================================
--- zc.zservertracelog/branches/alex-tests/src/zc/zservertracelog/README.txt	                        (rev 0)
+++ zc.zservertracelog/branches/alex-tests/src/zc/zservertracelog/README.txt	2008-08-27 21:15:33 UTC (rev 90471)
@@ -0,0 +1,60 @@
+==================
+ ZServer TraceLog
+==================
+
+A tracelog is a kind of access log that records several low-level events for
+each request.  Each log entry starts with a record type, a request identifier
+and the time.  Some log records have additional data.
+
+    >>> import zc.zservertracelog.tracelog
+    >>> import zope.app.appsetup.interfaces
+
+For these examples, we'll add a log handler that outputs to standard out.
+
+    >>> import logging
+    >>> import sys
+    >>> stdout_handler = logging.StreamHandler(sys.stdout)
+
+    >>> logger = logging.getLogger('zc.tracelog')
+    >>> logger.setLevel(logging.INFO)
+    >>> logger.addHandler(stdout_handler)
+
+There is an event handler to log when the Z server starts.
+
+    >>> zc.zservertracelog.tracelog.started(
+    ...     zope.app.appsetup.interfaces.ProcessStarting())
+    S 0 2008-08-26T11:55:00
+
+The tracelog machinery is implemented as a WSGI layer, so we'll define a fake
+WSGI application for tracelog to use.
+
+    >>> def faux_application(environ, start_response):
+    ...     """Fake WSGI application.  Doesn't need to do much!"""
+
+Now, let's create an instance of the tracelog server.
+
+    >>> addr, port = '127.0.0.1', 12345
+
+    >>> trace_server = zc.zservertracelog.tracelog.Server(
+    ...     faux_application, None, addr, port)
+
+Let's also define a convenience function for processing requests.
+
+    >>> def invokeRequest(req):
+    ...     channel = trace_server.channel_class(trace_server, None, addr)
+    ...     channel.received(req)
+
+Process a simple request.
+
+    >>> req1 = """\
+    ... GET / HTTP/1.1
+    ... Host: www.example.com
+    ...
+    ... """
+
+    >>> invokeRequest(req1)
+    B 23423600 2008-08-27T10:54:08 GET /
+    I 23423600 2008-08-27T10:54:08 0
+    C 23423600 2008-08-27T10:54:08
+    A 23423600 2008-08-27T10:54:08 200 ?
+    E 23423600 2008-08-27T10:54:08

Modified: zc.zservertracelog/branches/alex-tests/src/zc/zservertracelog/configure.zcml
===================================================================
--- zc.zservertracelog/branches/alex-tests/src/zc/zservertracelog/configure.zcml	2008-08-27 21:05:32 UTC (rev 90470)
+++ zc.zservertracelog/branches/alex-tests/src/zc/zservertracelog/configure.zcml	2008-08-27 21:15:33 UTC (rev 90471)
@@ -13,4 +13,5 @@
       />
 
   <subscriber handler=".tracelog.started" />
+
 </configure>

Added: zc.zservertracelog/branches/alex-tests/src/zc/zservertracelog/tests.py
===================================================================
--- zc.zservertracelog/branches/alex-tests/src/zc/zservertracelog/tests.py	                        (rev 0)
+++ zc.zservertracelog/branches/alex-tests/src/zc/zservertracelog/tests.py	2008-08-27 21:15:33 UTC (rev 90471)
@@ -0,0 +1,42 @@
+##############################################################################
+#
+# Copyright (c) 2008 Zope Corporation. All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Visible Source
+# License, Version 1.0 (ZVSL).  A copy of the ZVSL should accompany this
+# distribution.
+#
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""tracelog tests
+"""
+__docformat__ = "reStructuredText"
+
+from zope.testing import doctest
+import re
+import unittest
+import zope.testing.renormalizing
+
+
+checker = zope.testing.renormalizing.RENormalizing([
+    # normalize the channel id and iso8601 timestamp
+    (re.compile(r'-?\d+ \d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}'),
+        '23418928 2008-08-26T10:55:00'),
+    ])
+
+
+def test_suite():
+    return unittest.TestSuite([
+        doctest.DocFileTest(
+            'README.txt',
+            optionflags=(
+                doctest.NORMALIZE_WHITESPACE
+                | doctest.ELLIPSIS
+                | doctest.INTERPRET_FOOTNOTES),
+            checker=checker,
+            ),
+        ])

Modified: zc.zservertracelog/branches/alex-tests/src/zc/zservertracelog/tracelog.py
===================================================================
--- zc.zservertracelog/branches/alex-tests/src/zc/zservertracelog/tracelog.py	2008-08-27 21:05:32 UTC (rev 90470)
+++ zc.zservertracelog/branches/alex-tests/src/zc/zservertracelog/tracelog.py	2008-08-27 21:15:33 UTC (rev 90471)
@@ -79,8 +79,10 @@
             logger.info("E %s %s", id(task.channel), now())
             raise
         else:
+            accumulated_headers = (
+                getattr(task, 'accumulated_headers', ()) or ())
             length = [h.split(': ')[1].strip()
-                      for h in getattr(task, 'accumulated_headers', ())
+                      for h in accumulated_headers
                       if h.lower().startswith('content-length: ')]
             if length:
                 length = length[0]



More information about the Checkins mailing list