def after_request(response): session = Client().session() if response.status_code not in xrange(200, 399): coordinated_rollback(g.queued_tasks) return response coordinated_commit(g.queued_tasks) return response
def test_commits_in_the_happy_case(self): session = Client().session() task = Mock() with session_cleanup(): session.commit = Mock() session.rollback = Mock() session.rollback.side_effect = \ AssertionError("Shouldn't've been called") coordinated_commit([task]) session.commit.assert_called_once_with()
def test_revokes_tasks_and_rolls_back_on_data_error(self): session = Client().session() # invalid foreign keys ahoy! session.add(ImageTag(image_id=8675309, tag_id=8675309)) task = Mock() with session_cleanup(): session.rollback = Mock() assert_raises(IntegrityError, lambda: coordinated_commit([task])) session.rollback.assert_called_once_with() task.revoke.assert_called_once_with()
def test_revokes_tasks_on_connection_error(self): session = Client().session() task = Mock() with session_cleanup(): session.rollback = Mock() session.rollback.side_effect = AssertionError( "Don't try to roll back when the db is unavailable") session.commit = Mock() session.commit.side_effect = \ OperationalError(None, None, 'database timeout') assert_raises(OperationalError, lambda: coordinated_commit([task])) task.revoke.assert_called_once_with()
def test_sky_is_falling_if_database_and_redis_are_unreachable(self): session = Client().session() task = Mock() task.revoke.side_effect = TimeoutError('go sit in the corner') with session_cleanup(): session.rollback = Mock() session.rollback.side_effect = AssertionError( "Don't try to roll back when the db is unavailable") session.commit = Mock() session.commit.side_effect = \ OperationalError(None, None, b'database timeout') assert_raises(SkyIsFallingError, lambda: coordinated_commit([task])) task.revoke.assert_called_once_with()
def after_task(**kwargs): coordinated_commit(queued_tasks)