[CalendarServer-changes] [4307] CalendarServer/trunk/twistedcaldav/directory

source_changes at macosforge.org source_changes at macosforge.org
Thu May 21 11:26:08 PDT 2009


Revision: 4307
          http://trac.macosforge.org/projects/calendarserver/changeset/4307
Author:   sagen at apple.com
Date:     2009-05-21 11:26:08 -0700 (Thu, 21 May 2009)
Log Message:
-----------
If there are duplicate GUIDs, don't fault any of them in (plus unit test)

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

Modified: CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py	2009-05-20 22:44:57 UTC (rev 4306)
+++ CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py	2009-05-21 18:26:08 UTC (rev 4307)
@@ -437,7 +437,8 @@
         return deferred
 
 
-    def queryDirectory(self, recordTypes, indexType, indexKey):
+    def queryDirectory(self, recordTypes, indexType, indexKey,
+        lookupMethod=opendirectory.queryRecordsWithAttribute_list):
         
         attrs = [
             dsattributes.kDS1AttrGeneratedUID,
@@ -508,7 +509,7 @@
                 listRecordTypes,
                 attrs,
             ))
-            results = opendirectory.queryRecordsWithAttribute_list(
+            results = lookupMethod(
                 self.directory,
                 query.attribute,
                 query.value,
@@ -602,7 +603,7 @@
                             dsattributes.kDSStdRecordTypeGroups,
                             [dsattributes.kDSNAttrGroupMembers, dsattributes.kDSNAttrNestedGroups,],
                         ))
-                        results = opendirectory.queryRecordsWithAttribute_list(
+                        results = lookupMethod(
                             self.directory,
                             attributeToMatch,
                             valueToMatch,
@@ -689,8 +690,8 @@
             record = disabledRecords[0]
         elif indexType == self.INDEX_TYPE_GUID and len(enabledRecords) > 1:
             self.log_error("Duplicate records found for GUID %s:" % (indexKey,))
-            for record in enabledRecords:
-                self.log_error("Duplicate: %s" % (", ".join(record.shortNames)))
+            for duplicateRecord in enabledRecords:
+                self.log_error("Duplicate: %s" % (", ".join(duplicateRecord.shortNames)))
 
         if record:
             if isinstance(origIndexKey, unicode):

Modified: CalendarServer/trunk/twistedcaldav/directory/test/test_opendirectory.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/test_opendirectory.py	2009-05-20 22:44:57 UTC (rev 4306)
+++ CalendarServer/trunk/twistedcaldav/directory/test/test_opendirectory.py	2009-05-21 18:26:08 UTC (rev 4307)
@@ -23,6 +23,7 @@
     import twistedcaldav.directory.test.util
     from twistedcaldav.directory.directory import DirectoryService
     from twistedcaldav.directory.appleopendirectory import OpenDirectoryRecord
+    import dsattributes
 
     # Wonky hack to prevent unclean reactor shutdowns
     class DummyReactor(object):
@@ -80,3 +81,56 @@
             digested = twisted.web2.auth.digest.DigestedCredentials("user", "GET", "example.com", digestFields, None)
 
             self.assertFalse(record.verifyCredentials(digested))
+
+
+        def test_queryDirectorySingleGUID(self):
+            """ Test for lookup on existing and non-existing GUIDs """
+
+            def lookupMethod(obj, attr, value, matchType, casei, recordType, attributes, count=0):
+
+                data = [
+                    {
+                        dsattributes.kDS1AttrGeneratedUID : "1234567890",
+                        dsattributes.kDSNAttrRecordName : ["user1", "User 1"],
+                        dsattributes.kDSNAttrRecordType : dsattributes.kDSStdRecordTypeUsers,
+                    },
+                ]
+                results = []
+                for entry in data:
+                    if entry[attr] == value:
+                        results.append(("", entry))
+                return results
+
+            recordTypes = [DirectoryService.recordType_users, DirectoryService.recordType_groups, DirectoryService.recordType_locations, DirectoryService.recordType_resources]
+            self.service().queryDirectory(recordTypes, self.service().INDEX_TYPE_GUID, "1234567890", lookupMethod=lookupMethod)
+            self.assertTrue(self.service().recordWithGUID("1234567890"))
+            self.assertFalse(self.service().recordWithGUID("987654321"))
+
+
+        def test_queryDirectoryDuplicateGUIDs(self):
+            """ Test for lookup on duplicate GUIDs, ensuring they don't get
+                faulted in """
+
+            def lookupMethod(obj, attr, value, matchType, casei, recordType, attributes, count=0):
+
+                data = [
+                    {
+                        dsattributes.kDS1AttrGeneratedUID : "1234567890",
+                        dsattributes.kDSNAttrRecordName : ["user1", "User 1"],
+                        dsattributes.kDSNAttrRecordType : dsattributes.kDSStdRecordTypeUsers,
+                    },
+                    {
+                        dsattributes.kDS1AttrGeneratedUID : "1234567890",
+                        dsattributes.kDSNAttrRecordName : ["user2", "User 2"],
+                        dsattributes.kDSNAttrRecordType : dsattributes.kDSStdRecordTypeUsers,
+                    },
+                ]
+                results = []
+                for entry in data:
+                    if entry[attr] == value:
+                        results.append(("", entry))
+                return results
+
+            recordTypes = [DirectoryService.recordType_users, DirectoryService.recordType_groups, DirectoryService.recordType_locations, DirectoryService.recordType_resources]
+            self.service().queryDirectory(recordTypes, self.service().INDEX_TYPE_GUID, "1234567890", lookupMethod=lookupMethod)
+            self.assertFalse(self.service().recordWithGUID("1234567890"))
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20090521/77cc8ae2/attachment.html>


More information about the calendarserver-changes mailing list