Revision: 4307 http://trac.macosforge.org/projects/calendarserver/changeset/4307 Author: sagen@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"))
participants (1)
-
source_changes@macosforge.org