[Zope-Checkins] SVN: Zope/branches/2.10/ Forward port fix for LP
#239636 from 2.9 branch.
Tres Seaver
tseaver at palladion.com
Sat Jun 14 13:45:03 EDT 2008
Log message for revision 87397:
Forward port fix for LP #239636 from 2.9 branch.
Changed:
U Zope/branches/2.10/doc/CHANGES.txt
U Zope/branches/2.10/lib/python/webdav/NullResource.py
U Zope/branches/2.10/lib/python/webdav/tests/testNullResource.py
-=-
Modified: Zope/branches/2.10/doc/CHANGES.txt
===================================================================
--- Zope/branches/2.10/doc/CHANGES.txt 2008-06-14 17:44:34 UTC (rev 87396)
+++ Zope/branches/2.10/doc/CHANGES.txt 2008-06-14 17:45:02 UTC (rev 87397)
@@ -8,6 +8,9 @@
Bugs fixed
+ - Launchpad #239636: Ensure that HEAD requests lock an empty body
+ for NotFound errors.
+
- Launchpad #229549: Don't ignore 'debug' flag when rendering
page templates (thanks to Eric Steele for the patch).
Modified: Zope/branches/2.10/lib/python/webdav/NullResource.py
===================================================================
--- Zope/branches/2.10/lib/python/webdav/NullResource.py 2008-06-14 17:44:34 UTC (rev 87396)
+++ Zope/branches/2.10/lib/python/webdav/NullResource.py 2008-06-14 17:45:02 UTC (rev 87397)
@@ -71,6 +71,7 @@
def HEAD(self, REQUEST, RESPONSE):
"""Retrieve resource information without a response message body."""
self.dav__init(REQUEST, RESPONSE)
+ RESPONSE.setBody('', lock=True)
raise NotFound, 'The requested resource does not exist.'
# Most methods return 404 (Not Found) for null resources.
Modified: Zope/branches/2.10/lib/python/webdav/tests/testNullResource.py
===================================================================
--- Zope/branches/2.10/lib/python/webdav/tests/testNullResource.py 2008-06-14 17:44:34 UTC (rev 87396)
+++ Zope/branches/2.10/lib/python/webdav/tests/testNullResource.py 2008-06-14 17:45:02 UTC (rev 87397)
@@ -20,21 +20,47 @@
class TestNullResource(unittest.TestCase):
+ def _getTargetClass(self):
+ from webdav.NullResource import NullResource
+ return NullResource
+
+ def _makeOne(self, parent=None, name='nonesuch', **kw):
+ return self._getTargetClass()(parent, name, **kw)
+
def test_z2interfaces(self):
from Interface.Verify import verifyClass
- from webdav.NullResource import NullResource
from webdav.WriteLockInterface import WriteLockInterface
- verifyClass(WriteLockInterface, NullResource)
+ verifyClass(WriteLockInterface, self._getTargetClass())
def test_z3interfaces(self):
from webdav.interfaces import IWriteLock
- from webdav.NullResource import NullResource
from zope.interface.verify import verifyClass
- verifyClass(IWriteLock, NullResource)
+ verifyClass(IWriteLock, self._getTargetClass())
+ def test_HEAD_locks_empty_body_before_raising_NotFound(self):
+ from zExceptions import NotFound
+ # See https://bugs.launchpad.net/bugs/239636
+ class DummyResponse:
+ _server_version = 'Dummy' # emulate ZServer response
+ locked = False
+ body = None
+ def setHeader(self, *args):
+ pass
+ def setBody(self, body, lock=False):
+ self.body = body
+ self.locked = bool(lock)
+ nonesuch = self._makeOne()
+ request = {}
+ response = DummyResponse()
+
+ self.assertRaises(NotFound, nonesuch.HEAD, request, response)
+
+ self.assertEqual(response.body, '')
+ self.failUnless(response.locked)
+
def test_suite():
return unittest.TestSuite((
unittest.makeSuite(TestLockNullResource),
More information about the Zope-Checkins
mailing list