summaryrefslogtreecommitdiff
path: root/oslo_db/tests/sqlalchemy/test_enginefacade.py
diff options
context:
space:
mode:
Diffstat (limited to 'oslo_db/tests/sqlalchemy/test_enginefacade.py')
-rw-r--r--oslo_db/tests/sqlalchemy/test_enginefacade.py26
1 files changed, 26 insertions, 0 deletions
diff --git a/oslo_db/tests/sqlalchemy/test_enginefacade.py b/oslo_db/tests/sqlalchemy/test_enginefacade.py
index 206c335..303a8dd 100644
--- a/oslo_db/tests/sqlalchemy/test_enginefacade.py
+++ b/oslo_db/tests/sqlalchemy/test_enginefacade.py
@@ -13,6 +13,7 @@
import collections
import contextlib
import copy
+import fixtures
import pickle
import warnings
@@ -24,6 +25,7 @@ from sqlalchemy import Column
from sqlalchemy import Integer
from sqlalchemy import MetaData
from sqlalchemy.orm import mapper
+from sqlalchemy.orm import Session
from sqlalchemy import select
from sqlalchemy import String
from sqlalchemy import Table
@@ -1654,6 +1656,30 @@ class LiveFacadeTest(test_base.DbTestCase):
session.query(self.User.name).scalar()
)
+ @mock.patch.object(Session, 'commit')
+ @mock.patch.object(Session, 'rollback')
+ def test_save_and_reraise_when_rollback_exception(self,
+ rollback_patch,
+ commit_patch):
+ context = oslo_context.RequestContext()
+ log = self.useFixture(fixtures.FakeLogger())
+
+ class RollbackException(Exception):
+ pass
+
+ class CommitException(Exception):
+ pass
+
+ commit_patch.side_effect = CommitException()
+ rollback_patch.side_effect = RollbackException()
+
+ @enginefacade.writer
+ def go_session(context):
+ context.session.add(self.User(name="u1"))
+
+ self.assertRaises(RollbackException, go_session, context)
+ self.assertIn('CommitException', log.output)
+
def test_flush_on_subtransaction(self):
facade = enginefacade.transaction_context()
facade.configure(