def test_begin_exception_already_rollbacked(): trm = TransactionsManager() trh1 = TransactionHandlerMock() trm.add_transaction_handler(trh1) with pytest.raises(WeAreDoomedException): with trm.begin(): trm.rollback() raise Exception("I KILL YOU !")
def test_rollback(): trm = TransactionsManager() trh1 = TransactionHandlerMock() trh2 = TransactionHandlerMock() trm.add_transaction_handler(trh1) trm.add_transaction_handler(trh2) with trm.begin(): trm.rollback() assert trh1.rollback.called assert trh2.rollback.called
def test_mutex_handler_rollback_last(): trm = TransactionsManager() rollbacks = [] mh = TransactionHandlerMock( {"rollback": lambda: rollbacks.append("A")}) th = TransactionHandlerMock( {"rollback": lambda: rollbacks.append("B")}) trm.set_mutex_handler(mh) trm.add_transaction_handler(th) with trm.begin(): trm.rollback() assert rollbacks == ["B", "A"]
def test_rollback_exceptions(): trm = TransactionsManager() trh1 = TransactionHandlerMock( {"rollback": MagicMock(side_effect=Exception)}) trh2 = TransactionHandlerMock( {"rollback": MagicMock(side_effect=Exception)}) trm.add_transaction_handler(trh1) trm.add_transaction_handler(trh2) with pytest.raises(Exception): with trm.begin(): trm.rollback() assert trh1.rollback.called assert trh2.rollback.called assert len(trm.exceptions_encountered) == 2
def test_mutex_handler_rollback_exception(): trm = TransactionsManager() rollbacks = [] th = TransactionHandlerMock( {"rollback": lambda: rollbacks.append("A")}) trm.add_transaction_handler(th) mh = TransactionHandlerMock( {"rollback": MagicMock(side_effect=Exception())}) trm.set_mutex_handler(mh) try: with trm.begin(): trm.rollback() except Exception: pass assert rollbacks == ["A"] assert mh.rollback.called
def test_commit_prepare_failed(): trm = TransactionsManager() trh1 = TransactionHandlerMock({ "can_prepare_commit": MagicMock(return_value=True), "prepare_commit": MagicMock(return_value=False), }) trh2 = TransactionHandlerMock( {"can_prepare_commit": MagicMock(return_value=False)}) trm.add_transaction_handler(trh1) trm.add_transaction_handler(trh2) trm.rollback = MagicMock() with trm.begin(): trm.commit() assert trh1.can_prepare_commit.called assert trh2.can_prepare_commit.called assert trh1.prepare_commit.called assert not trh1.commit.called assert not trh2.commit.called assert trm.rollback.called
def test_rollback_not_begun(): trm = TransactionsManager() with pytest.raises(TransactionException): trm.rollback()