[Checkins] SVN: transaction/branches/sphinx/ Coverage for Transaction.{__init__, isDoomed, doom}.

Tres Seaver cvs-admin at zope.org
Mon Dec 17 23:57:58 UTC 2012


Log message for revision 128734:
  Coverage for Transaction.{__init__,isDoomed,doom}.
  
  Note that we now raise ValueError from doom() if not in a doomable state,
  rather than asserting.

Changed:
  _U  transaction/branches/sphinx/
  U   transaction/branches/sphinx/CHANGES.txt
  U   transaction/branches/sphinx/docs/doom.rst
  U   transaction/branches/sphinx/transaction/_transaction.py
  U   transaction/branches/sphinx/transaction/tests/test__transaction.py

-=-
Modified: transaction/branches/sphinx/CHANGES.txt
===================================================================
--- transaction/branches/sphinx/CHANGES.txt	2012-12-17 23:57:57 UTC (rev 128733)
+++ transaction/branches/sphinx/CHANGES.txt	2012-12-17 23:57:58 UTC (rev 128734)
@@ -4,6 +4,9 @@
 1.3.1 (unreleased)
 ------------------
 
+- Raise ValueError from ``Transaction.doom`` if the transaction is in a
+  non-doomable state (rather than using ``assert``).
+
 - Raise ValueError from ``TransactionManager.attempts`` if passed a
   non-positive value (rather than using ``assert``).
 

Modified: transaction/branches/sphinx/docs/doom.rst
===================================================================
--- transaction/branches/sphinx/docs/doom.rst	2012-12-17 23:57:57 UTC (rev 128733)
+++ transaction/branches/sphinx/docs/doom.rst	2012-12-17 23:57:58 UTC (rev 128734)
@@ -144,7 +144,7 @@
     >>> txn.doom()
     Traceback (most recent call last):
         ...
-    AssertionError
+    ValueError: non-doomable
 
 A doomed transaction should act the same as an active transaction, so we should
 be able to join it:

Modified: transaction/branches/sphinx/transaction/_transaction.py
===================================================================
--- transaction/branches/sphinx/transaction/_transaction.py	2012-12-17 23:57:57 UTC (rev 128733)
+++ transaction/branches/sphinx/transaction/_transaction.py	2012-12-17 23:57:58 UTC (rev 128734)
@@ -31,13 +31,13 @@
 _marker = object()
 
 _TB_BUFFER = None #unittests may hook
-def _makeTracebackBuffer():
+def _makeTracebackBuffer(): #pragma NO COVER
     if _TB_BUFFER is not None:
         return _TB_BUFFER
     return StringIO()
 
 _LOGGER = None #unittests may hook
-def _makeLogger():
+def _makeLogger(): #pragma NO COVER
     if _LOGGER is not None:
         return _LOGGER
     return logging.getLogger("txn.%d" % get_thread_ident())
@@ -130,7 +130,7 @@
             if self.status is not Status.ACTIVE:
                 # should not doom transactions in the middle,
                 # or after, a commit
-                raise AssertionError()
+                raise ValueError('non-doomable')
             self.status = Status.DOOMED
 
     # Raise TransactionFailedError, due to commit()/join()/register()

Modified: transaction/branches/sphinx/transaction/tests/test__transaction.py
===================================================================
--- transaction/branches/sphinx/transaction/tests/test__transaction.py	2012-12-17 23:57:57 UTC (rev 128733)
+++ transaction/branches/sphinx/transaction/tests/test__transaction.py	2012-12-17 23:57:58 UTC (rev 128734)
@@ -48,6 +48,62 @@
     def _makeOne(self, synchronizers=None, manager=None):
         return self._getTargetClass()(synchronizers, manager)
 
+    def test_ctor_defaults(self):
+        from transaction.weakset import WeakSet
+        from transaction.tests.common import Monkey
+        from transaction import _transaction
+        logger = DummyLogger()
+        with Monkey(_transaction, _LOGGER=logger):
+            t = self._makeOne()
+        self.assertTrue(isinstance(t._synchronizers, WeakSet))
+        self.assertEqual(len(t._synchronizers), 0)
+        self.assertTrue(t._manager is None)
+        self.assertEqual(t._resources, [])
+        self.assertEqual(t._adapters, {})
+        self.assertEqual(t._voted, {})
+        self.assertEqual(t._extension, {})
+        self.assertTrue(t.log is logger)
+        self.assertEqual(len(logger._log), 1)
+        self.assertEqual(logger._log[0][0], 'DEBUG')
+        self.assertEqual(logger._log[0][1], 'new transaction')
+        self.assertTrue(t._failure_traceback is None)
+        self.assertEqual(t._before_commit, [])
+        self.assertEqual(t._after_commit, [])
+
+    def test_ctor_w_syncs(self):
+        from transaction.weakset import WeakSet
+        synchs = WeakSet()
+        t = self._makeOne(synchronizers=synchs)
+        self.assertTrue(t._synchronizers is synchs)
+
+    def test_isDoomed(self):
+        from transaction._transaction import Status
+        t = self._makeOne()
+        self.assertFalse(t.isDoomed())
+        t.status = Status.DOOMED
+        self.assertTrue(t.isDoomed())
+
+    def test_doom_active(self):
+        from transaction._transaction import Status
+        t = self._makeOne()
+        t.doom()
+        self.assertTrue(t.isDoomed())
+        self.assertEqual(t.status, Status.DOOMED)
+
+    def test_doom_invalid(self):
+        from transaction._transaction import Status
+        t = self._makeOne()
+        for status in Status.COMMITTING, Status.COMMITTED, Status.COMMITFAILED:
+            t.status = status
+            self.assertRaises(ValueError, t.doom)
+
+    def test_doom_already_doomed(self):
+        from transaction._transaction import Status
+        t = self._makeOne()
+        t.status = Status.DOOMED
+        self.assertTrue(t.isDoomed())
+        self.assertEqual(t.status, Status.DOOMED)
+
     def test_note(self):
         t = self._makeOne()
         try:
@@ -149,6 +205,19 @@
         self.assertEqual(list(dm.keys()), ['a'])
 
 
+class DummyLogger(object):
+    def __init__(self):
+        self._log = []
+    def log(self, level, msg, *args, **kw):
+        if args:
+            self._log.append((level, msg % args))
+        elif kw:
+            self._log.append((level, msg % kw))
+        else:
+            self._log.append((level, msg))
+    def debug(self, msg, *args, **kw):
+        self.log('DEBUG', msg, *args, **kw)
+
 def test_suite():
     return unittest.TestSuite((
         unittest.makeSuite(TransactionTests),



More information about the checkins mailing list