def setup_databases(self, verbosity, autoclobber, **kwargs): # Taken from Django 1.2 code, (C) respective Django authors. Modified for backward compatibility by me connections = get_databases() old_names = [] mirrors = [] from django.conf import settings if 'south' in settings.INSTALLED_APPS: from south.management.commands import patch_for_test_db_setup settings.SOUTH_TESTS_MIGRATE = getattr(settings, 'DST_RUN_SOUTH_MIGRATIONS', True) patch_for_test_db_setup() for alias in connections: connection = connections[alias] # If the database is a test mirror, redirect it's connection # instead of creating a test database. if 'TEST_MIRROR' in connection.settings_dict and connection.settings_dict['TEST_MIRROR']: mirrors.append((alias, connection)) mirror_alias = connection.settings_dict['TEST_MIRROR'] connections._connections[alias] = connections[mirror_alias] else: if 'NAME' in connection.settings_dict: old_names.append((connection, connection.settings_dict['NAME'])) else: old_names.append((connection, connection.settings_dict['DATABASE_NAME'])) connection.creation.create_test_db(verbosity=verbosity, autoclobber=autoclobber) return old_names, mirrors
def check_database_multithread_compilant(self): # When using memory database, complain as we'd use indepenent databases connections = get_databases() for alias in connections: database = connections[alias] if database.settings_dict['NAME'] == ':memory:' and database.settings_dict['ENGINE'] in ('django.db.backends.sqlite3', 'sqlite3'): self.skipped = True return False return True
def teardown_databases(self, old_config, verbosity, **kwargs): # Taken from Django 1.2 code, (C) respective Django authors connections = get_databases() old_names, mirrors = old_config # Point all the mirrors back to the originals for alias, connection in mirrors: connections._connections[alias] = connection # Destroy all the non-mirror databases for connection, old_name in old_names: connection.creation.destroy_test_db(old_name, verbosity)
def prepareTestRunner(self, runner): """ Before running tests, initialize database et al, so noone will complain """ # FIXME: this should be lazy for tests that do not need test # database at all from django.conf import settings connections = get_databases() if not self.persist_test_database or test_databases_exist(): self.old_config = self.setup_databases(verbosity=False, autoclobber=True) for db in connections: if getattr(settings, "FLUSH_TEST_DATABASE_AFTER_INITIAL_SYNCDB", False): getattr(settings, "TEST_DATABASE_FLUSH_COMMAND", flush_database)(self, database=db) flush_cache() self.need_flush = False