import tempfile, shutil, os from django.core import management from django.conf import settings import common # we need to set DATABASE_ENGINE now, at import time, before the Django database # system gets initialized. # django.conf.settings.LazySettings is buggy and requires us to get something # from it before we set stuff on it. getattr(settings, 'DATABASE_ENGINE') settings.DATABASE_ENGINE = 'sqlite3' settings.DATABASE_NAME = ':memory:' from django.db import connection from autotest_lib.frontend.afe import readonly_connection def run_syncdb(verbosity=0): management.call_command('syncdb', verbosity=verbosity, interactive=False) def destroy_test_database(): connection.close() # Django brilliantly ignores close() requests on in-memory DBs to keep us # naive users from accidentally destroying data. So reach in and close # the real connection ourselves. # Note this depends on Django internals and will likely need to be changed # when we move to Django 1.x. real_connection = connection.connection if real_connection is not None: real_connection.close() connection.connection = None def set_up(): run_syncdb() readonly_connection.ReadOnlyConnection.set_globally_disabled(True) def tear_down(): readonly_connection.ReadOnlyConnection.set_globally_disabled(False) destroy_test_database() def print_queries(): """ Print all SQL queries executed so far. Useful for debugging failing tests - you can call it from tearDown(), and then execute the single test case of interest from the command line. """ for query in connection.queries: print query['sql'] + ';\n'