[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