[CalendarServer-changes] [6362] CalendarServer/branches/users/glyph/more-deferreds-6/txdav/carddav/ datastore/test/common.py
source_changes at macosforge.org
source_changes at macosforge.org
Thu Sep 23 18:12:37 PDT 2010
Revision: 6362
http://trac.macosforge.org/projects/calendarserver/changeset/6362
Author: glyph at apple.com
Date: 2010-09-23 18:12:36 -0700 (Thu, 23 Sep 2010)
Log Message:
-----------
defer all addressbookWithName in txdav tests
Modified Paths:
--------------
CalendarServer/branches/users/glyph/more-deferreds-6/txdav/carddav/datastore/test/common.py
Modified: CalendarServer/branches/users/glyph/more-deferreds-6/txdav/carddav/datastore/test/common.py
===================================================================
--- CalendarServer/branches/users/glyph/more-deferreds-6/txdav/carddav/datastore/test/common.py 2010-09-24 01:08:51 UTC (rev 6361)
+++ CalendarServer/branches/users/glyph/more-deferreds-6/txdav/carddav/datastore/test/common.py 2010-09-24 01:12:36 UTC (rev 6362)
@@ -17,7 +17,7 @@
"""
Tests for common addressbook store API functions.
"""
-from twisted.internet.defer import inlineCallbacks
+from twisted.internet.defer import inlineCallbacks, returnValue
from txdav.idav import IPropertyStore, IDataStore
from txdav.base.propertystore.base import PropertyName
@@ -140,19 +140,23 @@
return self.transactionUnderTest().addressbookHomeWithUID("home1")
+ @inlineCallbacks
def addressbookUnderTest(self):
"""
Get the addressbook detailed by C{requirements['home1']['addressbook_1']}.
"""
- return self.homeUnderTest().addressbookWithName("addressbook_1")
+ returnValue((yield (yield self.homeUnderTest())
+ .addressbookWithName("addressbook_1")))
+ @inlineCallbacks
def addressbookObjectUnderTest(self):
"""
Get the addressbook detailed by
C{requirements['home1']['addressbook_1']['1.vcf']}.
"""
- return self.addressbookUnderTest().addressbookObjectWithName("1.vcf")
+ returnValue((yield self.addressbookUnderTest())
+ .addressbookObjectWithName("1.vcf"))
def test_addressbookStoreProvides(self):
@@ -182,25 +186,30 @@
self.assertProvides(IAddressBookHome, self.homeUnderTest())
+ @inlineCallbacks
def test_addressbookProvides(self):
"""
The addressbooks generated by the addressbook store provide L{IAddressBook} and
its required attributes.
"""
- self.assertProvides(IAddressBook, self.addressbookUnderTest())
+ self.assertProvides(IAddressBook, (yield self.addressbookUnderTest()))
+ @inlineCallbacks
def test_addressbookObjectProvides(self):
"""
The addressbook objects generated by the addressbook store provide
L{IAddressBookObject} and its required attributes.
"""
- self.assertProvides(IAddressBookObject, self.addressbookObjectUnderTest())
+ self.assertProvides(IAddressBookObject,
+ (yield self.addressbookObjectUnderTest()))
+
+ @inlineCallbacks
def test_notifierID(self):
home = self.homeUnderTest()
self.assertEquals(home.notifierID(), "CardDAV|home1")
- addressbook = home.addressbookWithName("addressbook_1")
+ addressbook = yield home.addressbookWithName("addressbook_1")
self.assertEquals(addressbook.notifierID(), "CardDAV|home1")
self.assertEquals(addressbook.notifierID(label="collection"), "CardDAV|home1/addressbook_1")
@@ -226,6 +235,7 @@
self.assertEquals(txn.addressbookHomeWithUID("xyzzy"), None)
+ @inlineCallbacks
def test_addressbookWithName_exists(self):
"""
L{IAddressBookHome.addressbookWithName} returns an L{IAddressBook} provider,
@@ -233,7 +243,7 @@
"""
home = self.homeUnderTest()
for name in home1_addressbookNames:
- addressbook = home.addressbookWithName(name)
+ addressbook = yield home.addressbookWithName(name)
if addressbook is None:
self.fail("addressbook %r didn't exist" % (name,))
self.assertProvides(IAddressBook, addressbook)
@@ -246,29 +256,32 @@
L{IAddressBook.rename} changes the name of the L{IAddressBook}.
"""
home = self.homeUnderTest()
- addressbook = home.addressbookWithName("addressbook_1")
+ addressbook = yield home.addressbookWithName("addressbook_1")
addressbook.rename("some_other_name")
+ @inlineCallbacks
def positiveAssertions():
self.assertEquals(addressbook.name(), "some_other_name")
- self.assertEquals(addressbook, home.addressbookWithName("some_other_name"))
- self.assertEquals(None, home.addressbookWithName("addressbook_1"))
- positiveAssertions()
+ self.assertEquals(addressbook, (yield home.addressbookWithName("some_other_name")))
+ self.assertEquals(None, (yield home.addressbookWithName("addressbook_1")))
+ yield positiveAssertions()
yield self.commit()
- home = self.homeUnderTest()
- addressbook = home.addressbookWithName("some_other_name")
+ home = yield self.homeUnderTest()
+ addressbook = yield home.addressbookWithName("some_other_name")
positiveAssertions()
# FIXME: revert
# FIXME: test for multiple renames
# FIXME: test for conflicting renames (a->b, c->a in the same txn)
+ @inlineCallbacks
def test_addressbookWithName_absent(self):
"""
L{IAddressBookHome.addressbookWithName} returns C{None} for addressbooks which
do not exist.
"""
- self.assertEquals(self.homeUnderTest().addressbookWithName("xyzzy"),
- None)
+ self.assertEquals(
+ (yield (yield self.homeUnderTest()).addressbookWithName("xyzzy")),
+ None)
@inlineCallbacks
@@ -279,11 +292,11 @@
"""
home = self.homeUnderTest()
name = "new"
- self.assertIdentical(home.addressbookWithName(name), None)
+ self.assertIdentical((yield home.addressbookWithName(name)), None)
home.createAddressBookWithName(name)
- self.assertNotIdentical(home.addressbookWithName(name), None)
+ self.assertNotIdentical((yield home.addressbookWithName(name)), None)
def checkProperties():
- addressbookProperties = home.addressbookWithName(name).properties()
+ addressbookProperties = (yield home.addressbookWithName(name)).properties()
addressbookType = davxml.ResourceType.addressbook #@UndefinedVariable
self.assertEquals(
addressbookProperties[
@@ -300,7 +313,7 @@
# Make sure it's available in a new transaction; i.e. test the commit.
home = self.homeUnderTest()
- self.assertNotIdentical(home.addressbookWithName(name), None)
+ self.assertNotIdentical((yield home.addressbookWithName(name)), None)
# FIXME: These two lines aren't in the calendar common tests:
# home = self.addressbookStore.newTransaction().addressbookHomeWithUID(
@@ -333,9 +346,9 @@
home = self.homeUnderTest()
# FIXME: test transactions
for name in home1_addressbookNames:
- self.assertNotIdentical(home.addressbookWithName(name), None)
+ self.assertNotIdentical((yield home.addressbookWithName(name)), None)
home.removeAddressBookWithName(name)
- self.assertEquals(home.addressbookWithName(name), None)
+ self.assertEquals((yield home.addressbookWithName(name)), None)
yield self.commit()
@@ -362,12 +375,13 @@
home.removeAddressBookWithName, "xyzzy")
+ @inlineCallbacks
def test_addressbookObjects(self):
"""
L{IAddressBook.addressbookObjects} will enumerate the addressbook objects present
in the filesystem, in name order, but skip those with hidden names.
"""
- addressbook1 = self.addressbookUnderTest()
+ addressbook1 = yield self.addressbookUnderTest()
addressbookObjects = list(addressbook1.addressbookObjects())
for addressbookObject in addressbookObjects:
@@ -383,35 +397,38 @@
)
+ @inlineCallbacks
def test_addressbookObjectsWithRemovedObject(self):
"""
L{IAddressBook.addressbookObjects} skips those objects which have been
removed by L{AddressBook.removeAddressBookObjectWithName} in the same
transaction, even if it has not yet been committed.
"""
- addressbook1 = self.addressbookUnderTest()
+ addressbook1 = yield self.addressbookUnderTest()
addressbook1.removeAddressBookObjectWithName("2.vcf")
addressbookObjects = list(addressbook1.addressbookObjects())
self.assertEquals(set(o.name() for o in addressbookObjects),
set(addressbook1_objectNames) - set(["2.vcf"]))
+ @inlineCallbacks
def test_ownerAddressBookHome(self):
"""
L{IAddressBook.ownerAddressBookHome} should match the home UID.
"""
self.assertEquals(
- self.addressbookUnderTest().ownerAddressBookHome().uid(),
- self.homeUnderTest().uid()
+ (yield self.addressbookUnderTest()).ownerAddressBookHome().uid(),
+ (yield self.homeUnderTest()).uid()
)
+ @inlineCallbacks
def test_addressbookObjectWithName_exists(self):
"""
L{IAddressBook.addressbookObjectWithName} returns an L{IAddressBookObject}
provider for addressbooks which already exist.
"""
- addressbook1 = self.addressbookUnderTest()
+ addressbook1 = yield self.addressbookUnderTest()
for name in addressbook1_objectNames:
addressbookObject = addressbook1.addressbookObjectWithName(name)
self.assertProvides(IAddressBookObject, addressbookObject)
@@ -419,20 +436,22 @@
# FIXME: add more tests based on CommonTests.requirements
+ @inlineCallbacks
def test_addressbookObjectWithName_absent(self):
"""
L{IAddressBook.addressbookObjectWithName} returns C{None} for addressbooks which
don't exist.
"""
- addressbook1 = self.addressbookUnderTest()
+ addressbook1 = yield self.addressbookUnderTest()
self.assertEquals(addressbook1.addressbookObjectWithName("xyzzy"), None)
+ @inlineCallbacks
def test_removeAddressBookObjectWithUID_exists(self):
"""
Remove an existing addressbook object.
"""
- addressbook = self.addressbookUnderTest()
+ addressbook = yield self.addressbookUnderTest()
for name in addressbook1_objectNames:
uid = (u'uid' + name.rstrip(".vcf"))
self.assertNotIdentical(addressbook.addressbookObjectWithUID(uid),
@@ -453,7 +472,7 @@
"""
Remove an existing addressbook object.
"""
- addressbook = self.addressbookUnderTest()
+ addressbook = yield self.addressbookUnderTest()
for name in addressbook1_objectNames:
self.assertNotIdentical(
addressbook.addressbookObjectWithName(name), None
@@ -478,37 +497,43 @@
)
+ @inlineCallbacks
def test_removeAddressBookObjectWithName_absent(self):
"""
Attempt to remove an non-existing addressbook object should raise.
"""
- addressbook = self.addressbookUnderTest()
+ addressbook = yield self.addressbookUnderTest()
self.assertRaises(
NoSuchObjectResourceError,
addressbook.removeAddressBookObjectWithName, "xyzzy"
)
+ @inlineCallbacks
def test_addressbookName(self):
"""
L{AddressBook.name} reflects the name of the addressbook.
"""
- self.assertEquals(self.addressbookUnderTest().name(), "addressbook_1")
+ self.assertEquals((yield self.addressbookUnderTest()).name(), "addressbook_1")
+ @inlineCallbacks
def test_addressbookObjectName(self):
"""
L{IAddressBookObject.name} reflects the name of the addressbook object.
"""
- self.assertEquals(self.addressbookObjectUnderTest().name(), "1.vcf")
+ self.assertEquals(
+ (yield self.addressbookObjectUnderTest()).name(),
+ "1.vcf")
+ @inlineCallbacks
def test_component(self):
"""
L{IAddressBookObject.component} returns a L{VComponent} describing the
addressbook data underlying that addressbook object.
"""
- component = self.addressbookObjectUnderTest().component()
+ component = (yield self.addressbookObjectUnderTest()).component()
self.failUnless(
isinstance(component, VComponent),
@@ -519,35 +544,39 @@
self.assertEquals(component.resourceUID(), "uid1")
+ @inlineCallbacks
def test_iAddressBookText(self):
"""
L{IAddressBookObject.iAddressBookText} returns a C{str} describing the same
data provided by L{IAddressBookObject.component}.
"""
- text = self.addressbookObjectUnderTest().vCardText()
+ text = (yield self.addressbookObjectUnderTest()).vCardText()
self.assertIsInstance(text, str)
self.failUnless(text.startswith("BEGIN:VCARD\r\n"))
self.assertIn("\r\nUID:uid1\r\n", text)
self.failUnless(text.endswith("\r\nEND:VCARD\r\n"))
+ @inlineCallbacks
def test_addressbookObjectUID(self):
"""
L{IAddressBookObject.uid} returns a C{str} describing the C{UID} property
of the addressbook object's component.
"""
- self.assertEquals(self.addressbookObjectUnderTest().uid(), "uid1")
+ self.assertEquals((yield self.addressbookObjectUnderTest()).uid(), "uid1")
+ @inlineCallbacks
def test_addressbookObjectWithUID_absent(self):
"""
L{IAddressBook.addressbookObjectWithUID} returns C{None} for addressbooks which
don't exist.
"""
- addressbook1 = self.addressbookUnderTest()
+ addressbook1 = yield self.addressbookUnderTest()
self.assertEquals(addressbook1.addressbookObjectWithUID("xyzzy"), None)
+ @inlineCallbacks
def test_addressbooks(self):
"""
L{IAddressBookHome.addressbooks} returns an iterable of L{IAddressBook}
@@ -556,13 +585,15 @@
"""
# Add a dot directory to make sure we don't find it
# self.home1._path.child(".foo").createDirectory()
- home = self.homeUnderTest()
- addressbooks = list(home.addressbooks())
+ home = yield self.homeUnderTest()
+ addressbooks = list((yield home.addressbooks()))
for addressbook in addressbooks:
self.assertProvides(IAddressBook, addressbook)
- self.assertEquals(addressbook,
- home.addressbookWithName(addressbook.name()))
+ self.assertEquals(
+ addressbook,
+ (yield home.addressbookWithName(addressbook.name()))
+ )
self.assertEquals(
set(c.name() for c in addressbooks),
@@ -588,7 +619,7 @@
L{IAddressBook.createAddressBookObjectWithName} creates a new
L{IAddressBookObject}.
"""
- addressbook1 = self.addressbookUnderTest()
+ addressbook1 = yield self.addressbookUnderTest()
name = "4.vcf"
self.assertIdentical(addressbook1.addressbookObjectWithName(name), None)
component = VComponent.fromString(vcard4_text)
@@ -609,6 +640,7 @@
)
+ @inlineCallbacks
def test_createAddressBookObjectWithName_exists(self):
"""
L{IAddressBook.createAddressBookObjectWithName} raises
@@ -617,11 +649,12 @@
"""
self.assertRaises(
ObjectResourceNameAlreadyExistsError,
- self.addressbookUnderTest().createAddressBookObjectWithName,
+ (yield self.addressbookUnderTest()).createAddressBookObjectWithName,
"1.vcf", VComponent.fromString(vcard4_text)
)
+ @inlineCallbacks
def test_createAddressBookObjectWithName_invalid(self):
"""
L{IAddressBook.createAddressBookObjectWithName} raises
@@ -630,17 +663,18 @@
"""
self.assertRaises(
InvalidObjectResourceError,
- self.addressbookUnderTest().createAddressBookObjectWithName,
+ (yield self.addressbookUnderTest()).createAddressBookObjectWithName,
"new", VComponent.fromString(vcard4notCardDAV_text)
)
+ @inlineCallbacks
def test_setComponent_invalid(self):
"""
L{IAddressBookObject.setComponent} raises L{InvalidIAddressBookDataError} if
presented with invalid iAddressBook text.
"""
- addressbookObject = self.addressbookObjectUnderTest()
+ addressbookObject = (yield self.addressbookObjectUnderTest())
self.assertRaises(
InvalidObjectResourceError,
addressbookObject.setComponent,
@@ -648,12 +682,13 @@
)
+ @inlineCallbacks
def test_setComponent_uidchanged(self):
"""
L{IAddressBookObject.setComponent} raises L{InvalidAddressBookComponentError}
when given a L{VComponent} whose UID does not match its existing UID.
"""
- addressbook1 = self.addressbookUnderTest()
+ addressbook1 = yield self.addressbookUnderTest()
component = VComponent.fromString(vcard4_text)
addressbookObject = addressbook1.addressbookObjectWithName("1.vcf")
self.assertRaises(
@@ -694,7 +729,7 @@
"""
component = VComponent.fromString(vcard1modified_text)
- addressbook1 = self.addressbookUnderTest()
+ addressbook1 = yield self.addressbookUnderTest()
addressbookObject = addressbook1.addressbookObjectWithName("1.vcf")
oldComponent = addressbookObject.component()
self.assertNotEqual(component, oldComponent)
@@ -732,26 +767,29 @@
self.checkPropertiesMethod(self.homeUnderTest())
+ @inlineCallbacks
def test_addressbookProperties(self):
"""
L{IAddressBook.properties} returns a property store.
"""
- self.checkPropertiesMethod(self.addressbookUnderTest())
+ self.checkPropertiesMethod((yield self.addressbookUnderTest()))
+ @inlineCallbacks
def test_addressbookObjectProperties(self):
"""
L{IAddressBookObject.properties} returns a property store.
"""
- self.checkPropertiesMethod(self.addressbookObjectUnderTest())
+ self.checkPropertiesMethod((yield self.addressbookObjectUnderTest()))
+ @inlineCallbacks
def test_newAddressBookObjectProperties(self):
"""
L{IAddressBookObject.properties} returns an empty property store for a
addressbook object which has been created but not committed.
"""
- addressbook = self.addressbookUnderTest()
+ addressbook = yield self.addressbookUnderTest()
addressbook.createAddressBookObjectWithName(
"4.vcf", VComponent.fromString(vcard4_text)
)
@@ -773,15 +811,17 @@
propertyContent.name = propertyName.name
propertyContent.namespace = propertyName.namespace
- self.addressbookObjectUnderTest().properties()[
+ (yield self.addressbookObjectUnderTest()).properties()[
propertyName] = propertyContent
yield self.commit()
# Sanity check; are properties even readable in a separate transaction?
# Should probably be a separate test.
self.assertEquals(
- self.addressbookObjectUnderTest().properties()[propertyName],
+ (yield self.addressbookObjectUnderTest()).properties()[
+ propertyName
+ ],
propertyContent)
- obj = self.addressbookObjectUnderTest()
+ obj = yield self.addressbookObjectUnderTest()
vcard1_text = obj.vCardText()
vcard1_text_withDifferentNote = vcard1_text.replace(
"NOTE:CardDAV protocol updates",
@@ -796,11 +836,12 @@
# caching that may take place.
yield self.commit()
self.assertEquals(
- self.addressbookObjectUnderTest().properties()[propertyName],
+ (yield self.addressbookObjectUnderTest()).properties()[propertyName],
propertyContent
)
+ @inlineCallbacks
def test_dontLeakAddressbooks(self):
"""
Addressbooks in one user's addressbook home should not show up in another
@@ -808,7 +849,7 @@
"""
home2 = self.transactionUnderTest().addressbookHomeWithUID(
"home2", create=True)
- self.assertIdentical(home2.addressbookWithName("addressbook_1"), None)
+ self.assertIdentical((yield home2.addressbookWithName("addressbook_1")), None)
def test_dontLeakObjects(self):
@@ -819,9 +860,9 @@
home1 = self.homeUnderTest()
home2 = self.transactionUnderTest().addressbookHomeWithUID(
"home2", create=True)
- addressbook1 = home1.addressbookWithName("addressbook_1")
- addressbook2 = home2.addressbookWithName("addressbook")
- objects = list(home2.addressbookWithName("addressbook").addressbookObjects())
+ addressbook1 = yield home1.addressbookWithName("addressbook_1")
+ addressbook2 = yield home2.addressbookWithName("addressbook")
+ objects = list((yield (yield home2.addressbookWithName("addressbook")).addressbookObjects()))
self.assertEquals(objects, [])
for resourceName in self.requirements['home1']['addressbook_1'].keys():
obj = addressbook1.addressbookObjectWithName(resourceName)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20100923/3a6129c1/attachment-0001.html>
More information about the calendarserver-changes
mailing list