[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