[autotest] add lightweight django setup for use in test_that
BUG=chromium:236471
TEST=new unit test, ensure that jobs can be added to django_lite db
Change-Id: I340934126f46e8158dd80b4727e6d54f856787dd
Reviewed-on: https://gerrit.chromium.org/gerrit/50210
Commit-Queue: Aviv Keshet <akeshet@chromium.org>
Reviewed-by: Aviv Keshet <akeshet@chromium.org>
Tested-by: Aviv Keshet <akeshet@chromium.org>
diff --git a/frontend/afe/management.py b/frontend/afe/management.py
index 4f6066c..bdd5c6c 100644
--- a/frontend/afe/management.py
+++ b/frontend/afe/management.py
@@ -2,6 +2,7 @@
from django.db.models import signals
from django.contrib import auth
+from django.conf import settings
# In this file, it is critical that we import models *just like this*. In
# particular, we *cannot* do import common; from autotest_lib... import models.
# This is because when we pass the models module to signal.connect(), it
@@ -41,5 +42,5 @@
else:
print 'Group "%s" already exists' % BASIC_ADMIN
-
-signals.post_syncdb.connect(create_admin_group, sender=models)
+if settings.AUTOTEST_CREATE_ADMIN_GROUPS:
+ signals.post_syncdb.connect(create_admin_group, sender=models)
diff --git a/frontend/django_lite_unittest.py b/frontend/django_lite_unittest.py
new file mode 100755
index 0000000..d68133c
--- /dev/null
+++ b/frontend/django_lite_unittest.py
@@ -0,0 +1,28 @@
+#!/usr/bin/python
+#pylint: disable-msg=C0111
+
+import unittest
+import common
+#pylint: disable-msg=W0611
+from autotest_lib.frontend import setup_django_lite_environment
+from autotest_lib.frontend.afe import frontend_test_utils
+from autotest_lib.frontend.afe import models
+
+class JobTest(unittest.TestCase, frontend_test_utils.FrontendTestMixin):
+ """
+ Test that a jobs can be created when using django as set in
+ setup_django_lite_environment.
+ """
+ def setUp(self):
+ self._frontend_common_setup()
+
+ def tearDown(self):
+ self._frontend_common_teardown()
+
+ def test_job_creation(self):
+ self._create_job()
+ self.assertEqual(1, models.Job.objects.all().count())
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/frontend/settings.py b/frontend/settings.py
index 341b10a..efec924 100644
--- a/frontend/settings.py
+++ b/frontend/settings.py
@@ -138,3 +138,5 @@
# TODO(scottz): Temporary addition until time can be spent untangling middleware
# session crosbug.com/31608
SESSION_COOKIE_AGE = 1200
+
+AUTOTEST_CREATE_ADMIN_GROUPS = True
\ No newline at end of file
diff --git a/frontend/settings_lite.py b/frontend/settings_lite.py
new file mode 100644
index 0000000..ea179a5
--- /dev/null
+++ b/frontend/settings_lite.py
@@ -0,0 +1,21 @@
+"""Django settings for lightweight in-memory model database.
+"""
+
+import common
+
+LIGHTWEIGHT_DEFAULT = {
+ 'ENGINE': 'django.db.backends.sqlite3',
+ 'NAME': ':memory:'
+}
+
+DATABASES = {'default': LIGHTWEIGHT_DEFAULT}
+
+INSTALLED_APPS = (
+ 'frontend.afe',
+# 'frontend.tko',
+)
+
+# Required for Django to start, even though not used.
+SECRET_KEY = 'Three can keep a secret if two are dead.'
+
+AUTOTEST_CREATE_ADMIN_GROUPS = False
diff --git a/frontend/setup_django_lite_environment.py b/frontend/setup_django_lite_environment.py
new file mode 100644
index 0000000..a31682a
--- /dev/null
+++ b/frontend/setup_django_lite_environment.py
@@ -0,0 +1,12 @@
+import os
+import common
+
+os.environ.setdefault('DJANGO_SETTINGS_MODULE',
+ 'autotest_lib.frontend.settings_lite')
+
+from autotest_lib.frontend.afe import readonly_connection
+readonly_connection.ReadOnlyConnection.set_globally_disabled(True)
+
+import django.core.management
+
+django.core.management.call_command('syncdb', interactive=False, verbosity=0)