diff options
Diffstat (limited to 'oslo_db/tests/sqlalchemy/test_enginefacade.py')
-rw-r--r-- | oslo_db/tests/sqlalchemy/test_enginefacade.py | 26 |
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( |