[CalendarServer-changes] [2496] CalendarServer/trunk/twistedcaldav/directory/test/ test_proxyprincipalmembers.py

source_changes at macosforge.org source_changes at macosforge.org
Sun May 25 11:03:20 PDT 2008


Revision: 2496
          http://trac.macosforge.org/projects/calendarserver/changeset/2496
Author:   wsanchez at apple.com
Date:     2008-05-25 11:03:14 -0700 (Sun, 25 May 2008)

Log Message:
-----------
Unwind defgens, less copy/paste programming.

Modified Paths:
--------------
    CalendarServer/trunk/twistedcaldav/directory/test/test_proxyprincipalmembers.py

Modified: CalendarServer/trunk/twistedcaldav/directory/test/test_proxyprincipalmembers.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/test_proxyprincipalmembers.py	2008-05-25 04:23:44 UTC (rev 2495)
+++ CalendarServer/trunk/twistedcaldav/directory/test/test_proxyprincipalmembers.py	2008-05-25 18:03:14 UTC (rev 2496)
@@ -16,8 +16,7 @@
 
 import os
 
-from twisted.internet.defer import deferredGenerator
-from twisted.internet.defer import waitForDeferred
+from twisted.internet.defer import DeferredList
 from twisted.web2.dav.fileop import rmdir
 from twisted.web2.dav import davxml
 
@@ -54,151 +53,154 @@
 
         self.principalRootResources[directoryService.__class__.__name__] = provisioningResource
 
-    @deferredGenerator
+    def _getPrincipalByShortName(self, type, name):
+        provisioningResource = self.principalRootResources[directoryService.__class__.__name__]
+        return provisioningResource.principalForShortName(type, name)
+
+    def _groupMembersTest(self, recordType, recordName, subPrincipalName, expectedMembers):
+        def gotMembers(members):
+            memberNames = set([p.displayName() for p in members])
+            self.assertEquals(memberNames, set(expectedMembers))
+
+        principal = self._getPrincipalByShortName(recordType, recordName)
+        if subPrincipalName is not None:
+            principal = principal.getChild(subPrincipalName)
+
+        d = principal.groupMembers()
+        d.addCallback(gotMembers)
+        return d
+
+    def _groupMembershipsTest(self, recordType, recordName, subPrincipalName, expectedMemberships):
+        def gotMemberships(memberships):
+            uids = set([p.principalUID() for p in memberships])
+            self.assertEquals(uids, set(expectedMemberships))
+
+        principal = self._getPrincipalByShortName(recordType, recordName)
+        if subPrincipalName is not None:
+            principal = principal.getChild(subPrincipalName)
+
+        d = principal.groupMemberships()
+        d.addCallback(gotMemberships)
+        return d
+
     def test_groupMembersRegular(self):
         """
         DirectoryPrincipalResource.groupMembers()
         """
-        d = waitForDeferred(self._getRecordByShortName(DirectoryService.recordType_groups, "both_coasts").groupMembers())
-        yield d
-        members = d.getResult()
-        members = set([p.displayName() for p in members])
-        self.assertEquals(members, set(('Chris Lecroy', 'David Reid', 'Wilfredo Sanchez', 'West Coast', 'East Coast', 'Cyrus Daboo',)))
+        return self._groupMembersTest(
+            DirectoryService.recordType_groups, "both_coasts", None,
+            ("Chris Lecroy", "David Reid", "Wilfredo Sanchez", "West Coast", "East Coast", "Cyrus Daboo",),
+        )
 
-    @deferredGenerator
     def test_groupMembersRecursive(self):
         """
         DirectoryPrincipalResource.groupMembers()
         """
-        d = waitForDeferred(self._getRecordByShortName(DirectoryService.recordType_groups, "recursive1_coasts").groupMembers())
-        yield d
-        members = d.getResult()
-        members = set([p.displayName() for p in members])
-        self.assertEquals(members, set(('Wilfredo Sanchez', 'Recursive2 Coasts', 'Cyrus Daboo',)))
+        return self._groupMembersTest(
+            DirectoryService.recordType_groups, "recursive1_coasts", None,
+            ("Wilfredo Sanchez", "Recursive2 Coasts", "Cyrus Daboo",),
+        )
 
-    @deferredGenerator
     def test_groupMembersProxySingleUser(self):
         """
         DirectoryPrincipalResource.groupMembers()
         """
-        d = waitForDeferred(self._getRecordByShortName(DirectoryService.recordType_locations, "gemini").getChild("calendar-proxy-write").groupMembers())
-        yield d
-        members = d.getResult()
-        members = set([p.displayName() for p in members])
-        self.assertEquals(members, set(('Wilfredo Sanchez',)))
+        return self._groupMembersTest(
+            DirectoryService.recordType_locations, "gemini", "calendar-proxy-write",
+            ("Wilfredo Sanchez",),
+        )
 
-    @deferredGenerator
     def test_groupMembersProxySingleGroup(self):
         """
         DirectoryPrincipalResource.groupMembers()
         """
-        d = waitForDeferred(self._getRecordByShortName(DirectoryService.recordType_locations, "mercury").getChild("calendar-proxy-write").groupMembers())
-        yield d
-        members = d.getResult()
-        members = set([p.displayName() for p in members])
-        self.assertEquals(members, set(('Chris Lecroy', 'David Reid', 'Wilfredo Sanchez', 'West Coast',)))
+        return self._groupMembersTest(
+            DirectoryService.recordType_locations, "mercury", "calendar-proxy-write",
+            ("Chris Lecroy", "David Reid", "Wilfredo Sanchez", "West Coast",),
+        )
 
-    @deferredGenerator
     def test_groupMembersProxySingleGroupWithNestedGroups(self):
         """
         DirectoryPrincipalResource.groupMembers()
         """
-        d = waitForDeferred(self._getRecordByShortName(DirectoryService.recordType_locations, "apollo").getChild("calendar-proxy-write").groupMembers())
-        yield d
-        members = d.getResult()
-        members = set([p.displayName() for p in members])
-        self.assertEquals(members, set(('Chris Lecroy', 'David Reid', 'Wilfredo Sanchez', 'West Coast', 'East Coast', 'Cyrus Daboo', 'Both Coasts',)))
+        return self._groupMembersTest(
+            DirectoryService.recordType_locations, "apollo", "calendar-proxy-write",
+            ("Chris Lecroy", "David Reid", "Wilfredo Sanchez", "West Coast", "East Coast", "Cyrus Daboo", "Both Coasts",),
+        )
 
-    @deferredGenerator
     def test_groupMembersProxySingleGroupWithNestedRecursiveGroups(self):
         """
         DirectoryPrincipalResource.groupMembers()
         """
-        d = waitForDeferred(self._getRecordByShortName(DirectoryService.recordType_locations, "orion").getChild("calendar-proxy-write").groupMembers())
-        yield d
-        members = d.getResult()
-        members = set([p.displayName() for p in members])
-        self.assertEquals(members, set(('Wilfredo Sanchez', 'Cyrus Daboo', 'Recursive1 Coasts', 'Recursive2 Coasts',)))
+        return self._groupMembersTest(
+            DirectoryService.recordType_locations, "orion", "calendar-proxy-write",
+            ("Wilfredo Sanchez", "Cyrus Daboo", "Recursive1 Coasts", "Recursive2 Coasts",),
+        )
 
-    @deferredGenerator
     def test_groupMembersProxySingleGroupWithNonCalendarGroup(self):
         """
         DirectoryPrincipalResource.groupMembers()
         """
-        d = waitForDeferred(self._getRecordByShortName(DirectoryService.recordType_resources, "non_calendar_proxy").getChild("calendar-proxy-write").groupMembers())
-        yield d
-        members = d.getResult()
-        members = set([p.displayName() for p in members])
-        self.assertEquals(members, set(('Chris Lecroy', 'Cyrus Daboo', 'Non-calendar group')))
+        ds = []
 
-        d = waitForDeferred(self._getRecordByShortName(DirectoryService.recordType_groups, "non_calendar_group").groupMemberships())
-        yield d
-        memberships = d.getResult()
-        memberships = set([p.principalUID() for p in memberships])
-        self.assertEquals(memberships, set(('non_calendar_proxy#calendar-proxy-write',)))
+        ds.append(self._groupMembersTest(
+            DirectoryService.recordType_resources, "non_calendar_proxy", "calendar-proxy-write",
+            ("Chris Lecroy", "Cyrus Daboo", "Non-calendar group"),
+        ))
 
-    @deferredGenerator
+        ds.append(self._groupMembershipsTest(
+            DirectoryService.recordType_groups, "non_calendar_group", None,
+            ("non_calendar_proxy#calendar-proxy-write",),
+        ))
+
+        return DeferredList(ds)
+
     def test_groupMembersProxyMissingUser(self):
         """
         DirectoryPrincipalResource.groupMembers()
         """
+        proxy = self._getPrincipalByShortName(DirectoryService.recordType_users, "cdaboo")
+        proxyGroup = proxy.getChild("calendar-proxy-write")
 
+        def gotMembers(members):
+            members.add("12345")
+            return proxyGroup._index().setGroupMembers("%s#calendar-proxy-write" % (proxy.principalUID(),), members)
+
+        def check(_):
+            return self._groupMembersTest(
+                DirectoryService.recordType_users, "cdaboo", "calendar-proxy-write",
+                (),
+            )
+
         # Setup the fake entry in the DB
-        proxy = self._getRecordByShortName(DirectoryService.recordType_users, "cdaboo")
-        proxy_group = proxy.getChild("calendar-proxy-write")
-        d = waitForDeferred(proxy_group._index().getMembers("%s#calendar-proxy-write" % (proxy.principalUID(),)))
-        yield d
-        members = d.getResult()
-        members.add("12345")
-        d = waitForDeferred(proxy_group._index().setGroupMembers("%s#calendar-proxy-write" % (proxy.principalUID(),), members))
-        yield d
-        d.getResult()
+        d = proxyGroup._index().getMembers("%s#calendar-proxy-write" % (proxy.principalUID(),))
+        d.addCallback(gotMembers)
+        d.addCallback(check)
+        return d
 
-        # Do the failing lookup
-        d = waitForDeferred(self._getRecordByShortName(DirectoryService.recordType_users, "cdaboo").getChild("calendar-proxy-write").groupMembers())
-        yield d
-        members = d.getResult()
-        members = set([p.displayName() for p in members])
-        self.assertEquals(members, set())
-
-    @deferredGenerator
     def test_groupMembershipsMissingUser(self):
         """
         DirectoryPrincipalResource.groupMembers()
         """
-
         # Setup the fake entry in the DB
         fake_uid = "12345"
-        proxy = self._getRecordByShortName(DirectoryService.recordType_users, "cdaboo")
-        proxy_group = proxy.getChild("calendar-proxy-write")
-        d = waitForDeferred(proxy_group._index().getMembers("%s#calendar-proxy-write" % (fake_uid,)))
-        yield d
-        members = d.getResult()
-        members.add("%s#calendar-proxy-write" % (proxy.principalUID(),))
-        d = waitForDeferred(proxy_group._index().setGroupMembers("%s#calendar-proxy-write" % (fake_uid,), members))
-        yield d
-        d.getResult()
+        proxy = self._getPrincipalByShortName(DirectoryService.recordType_users, "cdaboo")
+        proxyGroup = proxy.getChild("calendar-proxy-write")
 
-        # Do the failing lookup
-        d = waitForDeferred(self._getRecordByShortName(DirectoryService.recordType_users, "cdaboo").getChild("calendar-proxy-write").groupMemberships())
-        yield d
-        memberships = d.getResult()
-        memberships = set([p.displayName() for p in memberships])
-        self.assertEquals(memberships, set())
+        def gotMembers(members):
+            members.add("%s#calendar-proxy-write" % (proxy.principalUID(),))
+            return proxyGroup._index().setGroupMembers("%s#calendar-proxy-write" % (fake_uid,), members)
 
-    def _getRecordByShortName(self, type, name):
-        """
-        @return: an iterable of tuples
-            C{(provisioningResource, recordType, recordResource, record)}, where
-            C{provisioningResource} is the root provisioning resource,
-            C{recordType} is the record type,
-            C{recordResource} is the principal resource and
-            C{record} is the directory service record
-            for each record in each directory in C{directoryServices}.
-        """
-        provisioningResource = self.principalRootResources[directoryService.__class__.__name__]
-        return provisioningResource.principalForShortName(type, name)
+        def check(_):
+            return self._groupMembershipsTest(
+                DirectoryService.recordType_users, "cdaboo", "calendar-proxy-write",
+                (),
+            )
 
+        d = proxyGroup._index().getMembers("%s#calendar-proxy-write" % (fake_uid,))
+        d.addCallback(gotMembers)
+        d.addCallback(check)
+        return d
 
     def test_setGroupMemberSet(self):
         class StubMemberDB(object):
@@ -209,14 +211,14 @@
                 self.members = members
 
 
-        user = self._getRecordByShortName(directoryService.recordType_users,
+        user = self._getPrincipalByShortName(directoryService.recordType_users,
                                            "cdaboo")
 
-        proxy_group = user.getChild("calendar-proxy-write")
+        proxyGroup = user.getChild("calendar-proxy-write")
 
         memberdb = StubMemberDB()
 
-        proxy_group._index = (lambda: memberdb)
+        proxyGroup._index = (lambda: memberdb)
 
         new_members = davxml.GroupMemberSet(
             davxml.HRef.fromString(
@@ -224,7 +226,7 @@
             davxml.HRef.fromString(
                 "/XMLDirectoryService/__uids__/5FF60DAD-0BDE-4508-8C77-15F0CA5C8DD1/"))
 
-        proxy_group.setGroupMemberSet(new_members, None)
+        proxyGroup.setGroupMemberSet(new_members, None)
 
         self.assertEquals(
             set([str(p) for p in memberdb.members]),
@@ -238,10 +240,10 @@
             def changed(self):
                 self.changedCount += 1
 
-        user = self._getRecordByShortName(directoryService.recordType_users,
+        user = self._getPrincipalByShortName(directoryService.recordType_users,
                                           "cdaboo")
 
-        proxy_group = user.getChild("calendar-proxy-write")
+        proxyGroup = user.getChild("calendar-proxy-write")
 
         notifier = StubCacheNotifier()
 
@@ -252,7 +254,7 @@
 
             self.assertEquals(notifier.changedCount, 0)
 
-            proxy_group.setGroupMemberSet(
+            proxyGroup.setGroupMemberSet(
                 davxml.GroupMemberSet(
                     davxml.HRef.fromString(
                         "/XMLDirectoryService/__uids__/5FF60DAD-0BDE-4508-8C77-15F0CA5C8DD1/")),

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20080525/e2c50fa1/attachment-0001.htm 


More information about the calendarserver-changes mailing list