# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
from django.core import cache
from celery.utils import gen_unique_id
from celery.task import task as task_dec
from celery.tests.worker.test_request import jail
from djcelery.app import app
from djcelery.tests.utils import unittest
@task_dec()
def mytask(i):
return i ** i
@task_dec()
def get_db_connection(i):
from django.db import connection
return id(connection)
get_db_connection.ignore_result = True
class TestJail(unittest.TestCase):
def test_django_db_connection_is_closed(self):
from django.db import connection
connection._was_closed = False
old_connection_close = connection.close
def monkeypatched_connection_close(*args, **kwargs):
connection._was_closed = True
return old_connection_close(*args, **kwargs)
connection.close = monkeypatched_connection_close
try:
jail(app, gen_unique_id(), get_db_connection.name, [2], {})
self.assertTrue(connection._was_closed)
finally:
connection.close = old_connection_close
def test_django_cache_connection_is_closed(self):
old_cache_close = getattr(cache.cache, 'close', None)
cache._was_closed = False
old_cache_parse_backend = getattr(cache, 'parse_backend_uri', None)
if old_cache_parse_backend: # checks to make sure attr exists
delattr(cache, 'parse_backend_uri')
def monkeypatched_cache_close(*args, **kwargs):
cache._was_closed = True
cache.cache.close = monkeypatched_cache_close
jail(app, gen_unique_id(), mytask.name, [4], {})
self.assertTrue(cache._was_closed)
cache.cache.close = old_cache_close
if old_cache_parse_backend:
cache.parse_backend_uri = old_cache_parse_backend
def test_django_cache_connection_is_closed_django_1_1(self):
old_cache_close = getattr(cache.cache, 'close', None)
cache._was_closed = False
old_cache_parse_backend = getattr(cache, 'parse_backend_uri', None)
cache.parse_backend_uri = lambda uri: ['libmemcached', '1', '2']
def monkeypatched_cache_close(*args, **kwargs):
cache._was_closed = True
cache.cache.close = monkeypatched_cache_close
jail(app, gen_unique_id(), mytask.name, [4], {})
self.assertTrue(cache._was_closed)
cache.cache.close = old_cache_close
if old_cache_parse_backend:
cache.parse_backend_uri = old_cache_parse_backend
else:
del(cache.parse_backend_uri)