[CalendarServer-changes] [611] CalendarServer/branches/users/wsanchez/provisioning-2/twistedcaldav/ directory/test/test_principal.py

source_changes at macosforge.org source_changes at macosforge.org
Mon Nov 27 20:07:35 PST 2006


Revision: 611
          http://trac.macosforge.org/projects/calendarserver/changeset/611
Author:   wsanchez at apple.com
Date:     2006-11-27 20:07:34 -0800 (Mon, 27 Nov 2006)

Log Message:
-----------
More tests for principal provisioning.

Modified Paths:
--------------
    CalendarServer/branches/users/wsanchez/provisioning-2/twistedcaldav/directory/test/test_principal.py

Modified: CalendarServer/branches/users/wsanchez/provisioning-2/twistedcaldav/directory/test/test_principal.py
===================================================================
--- CalendarServer/branches/users/wsanchez/provisioning-2/twistedcaldav/directory/test/test_principal.py	2006-11-28 04:06:53 UTC (rev 610)
+++ CalendarServer/branches/users/wsanchez/provisioning-2/twistedcaldav/directory/test/test_principal.py	2006-11-28 04:07:34 UTC (rev 611)
@@ -28,6 +28,7 @@
 from twisted.internet.defer import deferredGenerator, waitForDeferred
 from twisted.web2.dav.fileop import rmdir
 
+from twistedcaldav.static import CalendarHomeProvisioningFile
 from twistedcaldav.directory.apache import BasicDirectoryService, DigestDirectoryService
 from twistedcaldav.directory.test.test_apache import basicUserFile, digestUserFile, groupFile
 from twistedcaldav.directory.xmlfile import XMLDirectoryService
@@ -68,7 +69,17 @@
     @deferredGenerator
     def test_hierarchy(self):
         """
-        listChildren(), getChildren(), principalCollectionURL(), principalURL(), principalCollections()
+        DirectoryPrincipalProvisioningResource.listChildren(),
+        DirectoryPrincipalProvisioningResource.getChildren(),
+        DirectoryPrincipalProvisioningResource.principalCollectionURL(),
+        DirectoryPrincipalProvisioningResource.principalCollections()
+
+        DirectoryPrincipalTypeResource.listChildren(),
+        DirectoryPrincipalTypeResource.getChildren(),
+        DirectoryPrincipalTypeResource.principalCollectionURL(),
+        DirectoryPrincipalTypeResource.principalCollections()
+
+        DirectoryPrincipalResource.principalURL(),
         """
         for directory in directoryServices:
             #print "\n -> %s" % (directory.__class__.__name__,)
@@ -113,3 +124,126 @@
                     yield principalCollections
                     principalCollections = principalCollections.getResult()
                     self.assertEquals(set((provisioningURL,)), set(principalCollections))
+
+    def test_principalForUser(self):
+        """
+        DirectoryPrincipalProvisioningResource.principalForUser()
+        """
+        for directory in directoryServices:
+            provisioningResource = self.principalRootResources[directory.__class__.__name__]
+
+            for user in directory.listRecords("user"):
+                userResource = provisioningResource.principalForUser(user.shortName)
+                self.failIf(userResource is None)
+                self.assertEquals(user, userResource.record)
+
+    def test_principalForRecord(self):
+        """
+        DirectoryPrincipalProvisioningResource.principalForRecord()
+        """
+        for provisioningResource, recordType, recordResource, record in self._allRecords():
+            self.assertEquals(recordResource.record, record)
+                    
+    def test_displayName(self):
+        """
+        DirectoryPrincipalResource.displayName()
+        """
+        for provisioningResource, recordType, recordResource, record in self._allRecords():
+            self.failUnless(recordResource.displayName())
+
+    def test_groupMembers(self):
+        """
+        DirectoryPrincipalResource.groupMembers()
+        """
+        for provisioningResource, recordType, recordResource, record in self._allRecords():
+            self.failUnless(set(record.members()).issubset(set(r.record for r in recordResource.groupMembers())))
+
+    def test_groupMemberships(self):
+        """
+        DirectoryPrincipalResource.groupMemberships()
+        """
+        for provisioningResource, recordType, recordResource, record in self._allRecords():
+            self.failUnless(set(record.groups()).issubset(set(r.record for r in recordResource.groupMemberships())))
+
+    def test_principalUID(self):
+        """
+        DirectoryPrincipalResource.principalUID()
+        """
+        for provisioningResource, recordType, recordResource, record in self._allRecords():
+            self.assertEquals(record.shortName, recordResource.principalUID())
+
+    def test_calendarUserAddresses(self):
+        """
+        DirectoryPrincipalResource.calendarUserAddresses()
+        """
+        for provisioningResource, recordType, recordResource, record in self._allRecords():
+            self.failUnless(
+                (
+                    set((recordResource.principalURL(),)) |
+                    set(record.calendarUserAddresses)
+                ).issubset(set(recordResource.calendarUserAddresses()))
+            )
+
+    def test_calendarHomeURLs(self):
+        """
+        DirectoryPrincipalResource.calendarHomeURLs(),
+        DirectoryPrincipalResource.scheduleInboxURL(),
+        DirectoryPrincipalResource.scheduleOutboxURL()
+        """
+        # No calendar home provisioner should result in no calendar homes.
+        for provisioningResource, recordType, recordResource, record in self._allRecords():
+            self.failIf(tuple(recordResource.calendarHomeURLs()))
+            self.failIf(recordResource.scheduleInboxURL())
+            self.failIf(recordResource.scheduleOutboxURL())
+
+        # Need to create a calendar home provisioner for each service.
+        calendarRootResources = {}
+
+        for directory in directoryServices:
+            url = "/homes_" + directory.__class__.__name__ + "/"
+            path = os.path.join(self.docroot, url[1:])
+
+            if os.path.exists(path):
+                rmdir(path)
+            os.mkdir(path)
+
+            provisioningResource = CalendarHomeProvisioningFile(path, directory, url)
+
+            calendarRootResources[directory.__class__.__name__] = provisioningResource
+        
+        # Calendar home provisioners should result in calendar homes.
+        for provisioningResource, recordType, recordResource, record in self._allRecords():
+            homeURLs = tuple(recordResource.calendarHomeURLs())
+            self.failUnless(homeURLs)
+
+            calendarRootURL = calendarRootResources[record.service.__class__.__name__].url()
+
+            inboxURL = recordResource.scheduleInboxURL()
+            outboxURL = recordResource.scheduleOutboxURL()
+
+            self.failUnless(inboxURL)
+            self.failUnless(outboxURL)
+
+            for homeURL in homeURLs:
+                self.failUnless(homeURL.startswith(calendarRootURL))
+
+                if inboxURL and inboxURL.startswith(homeURL):
+                    self.failUnless(len(inboxURL) > len(homeURL))
+                    self.failUnless(inboxURL.endswith("/"))
+                    inboxURL = None
+
+                if outboxURL and outboxURL.startswith(homeURL):
+                    self.failUnless(len(outboxURL) > len(homeURL))
+                    self.failUnless(outboxURL.endswith("/"))
+                    outboxURL = None
+
+            self.failIf(inboxURL)
+            self.failIf(outboxURL)
+
+    def _allRecords(self):
+        for directory in directoryServices:
+            provisioningResource = self.principalRootResources[directory.__class__.__name__]
+            for recordType in directory.recordTypes():
+                for record in directory.listRecords(recordType):
+                    recordResource = provisioningResource.principalForRecord(record)
+                    yield provisioningResource, recordType, recordResource, record

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20061127/47a637aa/attachment.html


More information about the calendarserver-changes mailing list