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