[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)