summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-06-22 01:32:57 +0000
committerGerrit Code Review <review@openstack.org>2013-06-22 01:32:57 +0000
commit97225ffc034c2c8b82266ef875edaa4db9efa322 (patch)
tree51f2650a7bebe4a9f204ea906bb245e1b55810e3
parent49f5385b8d5474c7846624a8f04566570d949650 (diff)
parent316f059a0e18e705c0fe276f181445b05ba087ea (diff)
Merge "Base.get_engine honor allow_global_engine=False"
-rw-r--r--keystone/common/sql/core.py17
-rw-r--r--tests/test_sql_core.py40
2 files changed, 49 insertions, 8 deletions
diff --git a/keystone/common/sql/core.py b/keystone/common/sql/core.py
index 694d30bd..e1bd138e 100644
--- a/keystone/common/sql/core.py
+++ b/keystone/common/sql/core.py
@@ -99,10 +99,6 @@ def set_global_engine(engine):
GLOBAL_ENGINE = engine
-def get_global_engine():
- return GLOBAL_ENGINE
-
-
# Special Fields
class JsonBlob(sql_types.TypeDecorator):
@@ -244,14 +240,19 @@ class Base(object):
return sql.create_engine(CONF.sql.connection, **engine_config)
- engine = get_global_engine() or new_engine()
+ if not allow_global_engine:
+ return new_engine()
+
+ if GLOBAL_ENGINE:
+ return GLOBAL_ENGINE
+
+ engine = new_engine()
# auto-build the db to support wsgi server w/ in-memory backend
- if allow_global_engine and CONF.sql.connection == 'sqlite://':
+ if CONF.sql.connection == 'sqlite://':
ModelBase.metadata.create_all(bind=engine)
- if allow_global_engine:
- set_global_engine(engine)
+ set_global_engine(engine)
return engine
diff --git a/tests/test_sql_core.py b/tests/test_sql_core.py
new file mode 100644
index 00000000..d8f2a4f7
--- /dev/null
+++ b/tests/test_sql_core.py
@@ -0,0 +1,40 @@
+# Copyright 2013 IBM Corp.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+
+from keystone.common import sql
+from keystone import test
+
+
+class TestBase(test.TestCase):
+
+ def tearDown(self):
+ sql.set_global_engine(None)
+ super(TestBase, self).tearDown()
+
+ def test_get_engine_global(self):
+ # If call get_engine() twice, get the same global engine.
+ base = sql.Base()
+ engine1 = base.get_engine()
+ self.assertIsNotNone(engine1)
+ engine2 = base.get_engine()
+ self.assertIs(engine1, engine2)
+
+ def test_get_engine_not_global(self):
+ # If call get_engine() twice, once with allow_global_engine=True
+ # and once with allow_global_engine=False, get different engines.
+ base = sql.Base()
+ engine1 = base.get_engine()
+ engine2 = base.get_engine(allow_global_engine=False)
+ self.assertIsNot(engine1, engine2)