[CalendarServer-changes] [6008] CalendarServer/branches/users/glyph/sql-store/twistedcaldav/test
source_changes at macosforge.org
source_changes at macosforge.org
Fri Aug 6 15:46:47 PDT 2010
Revision: 6008
http://trac.macosforge.org/projects/calendarserver/changeset/6008
Author: glyph at apple.com
Date: 2010-08-06 15:46:47 -0700 (Fri, 06 Aug 2010)
Log Message:
-----------
try to get the transaction discipline right in HomeTestCase (at least for sharing)
Modified Paths:
--------------
CalendarServer/branches/users/glyph/sql-store/twistedcaldav/test/test_sharing.py
CalendarServer/branches/users/glyph/sql-store/twistedcaldav/test/util.py
Modified: CalendarServer/branches/users/glyph/sql-store/twistedcaldav/test/test_sharing.py
===================================================================
--- CalendarServer/branches/users/glyph/sql-store/twistedcaldav/test/test_sharing.py 2010-08-06 22:46:14 UTC (rev 6007)
+++ CalendarServer/branches/users/glyph/sql-store/twistedcaldav/test/test_sharing.py 2010-08-06 22:46:47 UTC (rev 6008)
@@ -25,6 +25,8 @@
from twistedcaldav.config import config
from twistedcaldav.test.util import HomeTestCase, norequest
from twistedcaldav.resource import CalDAVResource
+from txcaldav.calendarstore.test.test_postgres import buildStore
+from txcaldav.calendarstore.test.common import StubNotifierFactory
class SharingTests(HomeTestCase):
@@ -54,8 +56,8 @@
def displayName(self):
return self.displayname
-
+
@inlineCallbacks
def setUp(self):
yield super(SharingTests, self).setUp()
@@ -63,11 +65,6 @@
self.patch(config.Sharing, "Enabled", True)
self.patch(config.Sharing.Calendars, "Enabled", True)
- self.resource = (
- yield self.site.resource.locateChild(norequest(), ["calendar"])
- )[0]
- self.site.resource.putChild("calendar", self.resource)
-
CalDAVResource.validUserIDForShare = self._fakeValidUserID
CalDAVResource.validUserIDWithCommonNameForShare = self._fakeValidUserID
CalDAVResource.sendInvite = lambda self, record, request: succeed(True)
@@ -76,6 +73,17 @@
CalDAVResource.principalForCalendarUserAddress = lambda self, cuaddr: SharingTests.FakePrincipal(cuaddr)
+ @inlineCallbacks
+ def _refreshRoot(self, request=None):
+ if request is None:
+ request = norequest()
+ result = yield super(SharingTests, self)._refreshRoot(request)
+ self.resource = (
+ yield self.site.resource.locateChild(request, ["calendar"])
+ )[0]
+ returnValue(result)
+
+
def _fakeValidUserID(self, userid, *args):
if userid.startswith("/principals/"):
return userid
@@ -400,7 +408,7 @@
@inlineCallbacks
def test_POSTaddRemoveSameInvitee(self):
-
+
self.resource.upgradeToShare()
yield self._doPOST("""<?xml version="1.0" encoding="utf-8" ?>
@@ -448,9 +456,9 @@
),
))
+
@inlineCallbacks
def test_POSTaddInvalidInvitee(self):
-
self.resource.upgradeToShare()
response = (yield self._doPOST("""<?xml version="1.0" encoding="utf-8" ?>
@@ -464,7 +472,6 @@
""",
responsecode.MULTI_STATUS
))
-
self.assertEqual(
str(response.stream.read()).replace("\r\n", "\n"),
"""<?xml version='1.0' encoding='UTF-8'?>
@@ -475,10 +482,13 @@
</response>
</multistatus>"""
)
-
propInvite = (yield self.resource.readProperty(customxml.Invite, None))
- self.assertEquals(self._clearUIDElementValue(propInvite), customxml.Invite())
+ self.assertEquals(
+ self._clearUIDElementValue(propInvite), customxml.Invite()
+ )
+
+
@inlineCallbacks
def test_POSTremoveInvalidInvitee(self):
@@ -530,3 +540,18 @@
propInvite = (yield self.resource.readProperty(customxml.Invite, None))
self.assertEquals(self._clearUIDElementValue(propInvite), customxml.Invite())
+
+
+
+class DatabaseSharingTests(SharingTests):
+
+ @inlineCallbacks
+ def setUp(self):
+ self.calendarStore = yield buildStore(self, StubNotifierFactory())
+ yield super(DatabaseSharingTests, self).setUp()
+
+
+ def createDataStore(self):
+ return self.calendarStore
+
+
Modified: CalendarServer/branches/users/glyph/sql-store/twistedcaldav/test/util.py
===================================================================
--- CalendarServer/branches/users/glyph/sql-store/twistedcaldav/test/util.py 2010-08-06 22:46:14 UTC (rev 6007)
+++ CalendarServer/branches/users/glyph/sql-store/twistedcaldav/test/util.py 2010-08-06 22:46:47 UTC (rev 6008)
@@ -335,21 +335,39 @@
def _defer(user):
# Commit the transaction
- self.site.resource._associatedTransaction.commit()
- self.docroot = user._newStoreHome._path.path
+ self.addCleanup(self.noRenderCommit)
+ # FIXME: nothing should use docroot any more.
+ aPath = getattr(user._newStoreHome, "_path", None)
+ if aPath is not None:
+ self.docroot = aPath.path
return self._refreshRoot().addCallback(_defer)
+ committed = True
+
+ def noRenderCommit(self):
+ """
+ A resource was retrieved but will not be rendered, so commit.
+ """
+ if not self.committed:
+ self.committed = True
+ self.site.resource._associatedTransaction.commit()
+
+
@inlineCallbacks
- def _refreshRoot(self):
+ def _refreshRoot(self, request=None):
"""
Refresh the user resource positioned at the root of this site, to give
it a new transaction.
"""
+ self.noRenderCommit()
+ if request is None:
+ request = norequest()
users = self.homeProvisioner.getChild("users")
- user, ignored = (yield users.locateChild(norequest(), ["wsanchez"]))
+ user, ignored = (yield users.locateChild(request, ["wsanchez"]))
+
# Force the request to succeed regardless of the implementation of
# accessControlList.
user.accessControlList = lambda request, *a, **k: succeed(
@@ -359,6 +377,7 @@
# Fix the site to point directly at the user's calendar home so that we
# can focus on testing just that rather than hierarchy traversal..
self.site.resource = user
+ self.committed = False
returnValue(user)
@@ -368,10 +387,15 @@
Override C{send} in order to refresh the 'user' resource each time, to
get a new transaction to associate with the calendar home.
"""
+ self.noRenderCommit()
+ yield self._refreshRoot(request)
+ result = (yield super(HomeTestCase, self).send(request, callback))
+ self.committed = True
yield self._refreshRoot()
- result = (yield super(HomeTestCase, self).send(request, callback))
returnValue(result)
+
+
class AddressBookHomeTestCase(TestCase):
"""
Utility class for tests which wish to interact with a addressbook home rather
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20100806/41f73bdc/attachment.html>
More information about the calendarserver-changes
mailing list