[CalendarServer-changes] [10249] CalendarServer/branches/users/glyph/queue-locking-and-timing
source_changes at macosforge.org
source_changes at macosforge.org
Fri Jan 4 16:39:07 PST 2013
Revision: 10249
http://trac.calendarserver.org//changeset/10249
Author: glyph at apple.com
Date: 2013-01-04 16:39:07 -0800 (Fri, 04 Jan 2013)
Log Message:
-----------
Some tests for the new preCommit API.
Modified Paths:
--------------
CalendarServer/branches/users/glyph/queue-locking-and-timing/twext/enterprise/test/test_adbapi2.py
Property Changed:
----------------
CalendarServer/branches/users/glyph/queue-locking-and-timing/
Modified: CalendarServer/branches/users/glyph/queue-locking-and-timing/twext/enterprise/test/test_adbapi2.py
===================================================================
--- CalendarServer/branches/users/glyph/queue-locking-and-timing/twext/enterprise/test/test_adbapi2.py 2013-01-05 00:39:06 UTC (rev 10248)
+++ CalendarServer/branches/users/glyph/queue-locking-and-timing/twext/enterprise/test/test_adbapi2.py 2013-01-05 00:39:07 UTC (rev 10249)
@@ -30,6 +30,7 @@
from twisted.trial.unittest import TestCase
from twisted.internet.task import Clock
+from twisted.internet.defer import Deferred
from twisted.internet.interfaces import IReactorThreads
@@ -369,11 +370,11 @@
@property
- def _q(self):
+ def _get_q(self):
return self._q_
- @_q.setter
+ @_get_q.setter
def _q(self, newq):
if newq is not None:
oget = newq.get
@@ -1080,6 +1081,52 @@
return t
+ def test_preCommitSuccess(self):
+ """
+ Callables passed to L{IAsyncTransaction.preCommit} will be invoked upon
+ commit.
+ """
+ txn = self.createTransaction()
+ def simple():
+ simple.done = True
+ simple.done = False
+ txn.preCommit(simple)
+ self.assertEquals(simple.done, False)
+ result = self.resultOf(txn.commit())
+ self.assertEquals(len(result), 1)
+ self.assertEquals(simple.done, True)
+
+
+ def test_deferPreCommit(self):
+ """
+ If callables passed to L{IAsyncTransaction.preCommit} return
+ L{Deferred}s, they will defer the actual commit operation until it has
+ fired.
+ """
+ txn = self.createTransaction()
+ d = Deferred()
+ def wait():
+ wait.started = True
+ def executed(it):
+ wait.sqlResult = it
+ # To make sure the _underlying_ commit operation was Deferred, we
+ # have to execute some SQL to make sure it happens.
+ return (d.addCallback(lambda ignored: txn.execSQL("some test sql"))
+ .addCallback(executed))
+ wait.started = False
+ wait.sqlResult = None
+ txn.preCommit(wait)
+ result = self.resultOf(txn.commit())
+ self.flushHolders()
+ self.assertEquals(wait.started, True)
+ self.assertEquals(wait.sqlResult, None)
+ self.assertEquals(result, [])
+ d.callback(None)
+ self.flushHolders()
+ self.assertEquals(len(result), 1)
+ self.assertEquals(wait.sqlResult, [[1, "some test sql"]])
+
+
def test_noOpCommitDoesntHinderReconnection(self):
"""
Until you've executed a query or performed a statement on an ADBAPI
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20130104/17f70c74/attachment-0001.html>
More information about the calendarserver-changes
mailing list