Skip to content

Commit

Permalink
Adds more multi-database tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
BertrandBordage committed Oct 21, 2014
1 parent aa1d367 commit 1f16978
Show file tree
Hide file tree
Showing 4 changed files with 75 additions and 19 deletions.
1 change: 1 addition & 0 deletions cachalot/tests/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@
from .write import WriteTestCase
from .transaction import AtomicTestCase
from .thread_safety import ThreadSafetyTestCase
from .multi_db import MultiDatabaseTestCase
from .settings import SettingsTestCase
71 changes: 71 additions & 0 deletions cachalot/tests/multi_db.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# coding: utf-8

from __future__ import unicode_literals
try:
from unittest import skipIf
except ImportError: # For Python 2.6
from unittest2 import skipIf

from django.conf import settings
from django.db import DEFAULT_DB_ALIAS, connections
from django.test import TransactionTestCase

from .models import Test


@skipIf(len(settings.DATABASES) == 1,
'We can’t change the DB used since there’s only one configured')
class MultiDatabaseTestCase(TransactionTestCase):
multi_db = True

def setUp(self):
self.t1 = Test.objects.create(name='test1')
self.t2 = Test.objects.create(name='test2')
self.db_alias2 = [alias for alias in settings.DATABASES
if alias != DEFAULT_DB_ALIAS][0]
self.is_sqlite2 = connections[self.db_alias2].vendor == 'sqlite'

def test_read(self):
with self.assertNumQueries(1):
data1 = list(Test.objects.all())
self.assertListEqual(data1, [self.t1, self.t2])

with self.assertNumQueries(1, using=self.db_alias2):
data2 = list(Test.objects.using(self.db_alias2))
self.assertListEqual(data2, [])

with self.assertNumQueries(0, using=self.db_alias2):
data3 = list(Test.objects.using(self.db_alias2))
self.assertListEqual(data3, [])

def test_invalidate_other_db(self):
"""
Tests if the non-default database is invalidated when modified.
"""
with self.assertNumQueries(1, using=self.db_alias2):
data1 = list(Test.objects.using(self.db_alias2))
self.assertListEqual(data1, [])

with self.assertNumQueries(2 if self.is_sqlite2 else 1,
using=self.db_alias2):
t3 = Test.objects.using(self.db_alias2).create(name='test3')

with self.assertNumQueries(1, using=self.db_alias2):
data2 = list(Test.objects.using(self.db_alias2))
self.assertListEqual(data2, [t3])

def test_invalidation_independence(self):
"""
Tests if invalidation doesn’t affect the unmodified databases.
"""
with self.assertNumQueries(1):
data1 = list(Test.objects.all())
self.assertListEqual(data1, [self.t1, self.t2])

with self.assertNumQueries(2 if self.is_sqlite2 else 1,
using=self.db_alias2):
Test.objects.using(self.db_alias2).create(name='test3')

with self.assertNumQueries(0):
data2 = list(Test.objects.all())
self.assertListEqual(data2, [self.t1, self.t2])
15 changes: 0 additions & 15 deletions cachalot/tests/read.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
except ImportError: # For Python 2.6
from unittest2 import skip, skipIf

from django.conf import settings
from django.contrib.auth.models import Group, Permission, User
from django.db import connection, transaction
from django.db.models import Count
Expand Down Expand Up @@ -437,20 +436,6 @@ def test_prefetch_related(self):
self.assertListEqual(permissions8, permissions7)
self.assertListEqual(permissions8, self.group__permissions)

@skipIf(len(settings.DATABASES) == 1,
'We can’t change the DB used since there’s only one configured')
def test_using(self):
with self.assertNumQueries(1):
data1 = list(Test.objects.all())
self.assertListEqual(data1, [self.t1, self.t2])

other_cache_alias = [alias for alias in settings.DATABASES
if alias != 'default'][0]

with self.assertNumQueries(1, using=other_cache_alias):
data2 = list(Test.objects.using(other_cache_alias))
self.assertListEqual(data2, [])

@skipUnlessDBFeature('has_select_for_update')
def test_select_for_update(self):
with self.assertRaises(TransactionManagementError):
Expand Down
7 changes: 3 additions & 4 deletions cachalot/tests/settings.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
# coding: utf-8

from __future__ import unicode_literals
from django.conf import settings


try:
from unittest import skipIf
except ImportError: # For Python 2.6
from unittest2 import skipIf

from django.conf import settings
from django.core.cache import DEFAULT_CACHE_ALIAS
from django.db import connection
from django.test import TransactionTestCase

Expand Down Expand Up @@ -59,7 +58,7 @@ def test_cache(self):
list(Test.objects.all())

other_cache_alias = [alias for alias in settings.CACHES
if alias != 'default'][0]
if alias != DEFAULT_CACHE_ALIAS][0]

with cachalot_settings(CACHALOT_CACHE=other_cache_alias):
with self.assertNumQueries(1):
Expand Down

0 comments on commit 1f16978

Please sign in to comment.