summaryrefslogtreecommitdiff
path: root/oslo_db/tests/sqlalchemy/test_provision.py
diff options
context:
space:
mode:
Diffstat (limited to 'oslo_db/tests/sqlalchemy/test_provision.py')
-rw-r--r--oslo_db/tests/sqlalchemy/test_provision.py82
1 files changed, 78 insertions, 4 deletions
diff --git a/oslo_db/tests/sqlalchemy/test_provision.py b/oslo_db/tests/sqlalchemy/test_provision.py
index 7c57de3..25f5bc4 100644
--- a/oslo_db/tests/sqlalchemy/test_provision.py
+++ b/oslo_db/tests/sqlalchemy/test_provision.py
@@ -10,11 +10,13 @@
# License for the specific language governing permissions and limitations
# under the License.
-
+from oslotest import base as oslo_test_base
from sqlalchemy import inspect
from sqlalchemy import schema
from sqlalchemy import types
+from oslo.db import exception
+from oslo.db.sqlalchemy import provision
from oslo_db.sqlalchemy import test_base
@@ -62,7 +64,7 @@ class DropAllObjectsTest(test_base.DbTestCase):
set(insp.get_table_names())
)
- self.provision.drop_all_objects()
+ self.db.backend.drop_all_objects(self.engine)
insp = inspect(self.engine)
self.assertEqual(
@@ -71,11 +73,83 @@ class DropAllObjectsTest(test_base.DbTestCase):
)
-class MySQLRetainSchemaTest(
+class MySQLDropAllObjectsTest(
DropAllObjectsTest, test_base.MySQLOpportunisticTestCase):
pass
-class PostgresqlRetainSchemaTest(
+class PostgreSQLDropAllObjectsTest(
DropAllObjectsTest, test_base.PostgreSQLOpportunisticTestCase):
pass
+
+
+class RetainSchemaTest(oslo_test_base.BaseTestCase):
+ DRIVER = "sqlite"
+
+ def setUp(self):
+ super(RetainSchemaTest, self).setUp()
+
+ metadata = schema.MetaData()
+ self.test_table = schema.Table(
+ 'test_table', metadata,
+ schema.Column('x', types.Integer),
+ schema.Column('y', types.Integer),
+ mysql_engine='InnoDB'
+ )
+
+ def gen_schema(engine):
+ metadata.create_all(engine, checkfirst=False)
+ self._gen_schema = gen_schema
+
+ def test_once(self):
+ self._run_test()
+
+ def test_twice(self):
+ self._run_test()
+
+ def _run_test(self):
+ try:
+ database_resource = provision.DatabaseResource(self.DRIVER)
+ except exception.BackendNotAvailable:
+ self.skip("database not available")
+
+ schema_resource = provision.SchemaResource(
+ database_resource, self._gen_schema)
+ transaction_resource = provision.TransactionResource(
+ database_resource, schema_resource)
+
+ engine = transaction_resource.getResource()
+
+ with engine.connect() as conn:
+ rows = conn.execute(self.test_table.select())
+ self.assertEqual(rows.fetchall(), [])
+
+ trans = conn.begin()
+ conn.execute(
+ self.test_table.insert(),
+ {"x": 1, "y": 2}
+ )
+ trans.rollback()
+
+ rows = conn.execute(self.test_table.select())
+ self.assertEqual(rows.fetchall(), [])
+
+ trans = conn.begin()
+ conn.execute(
+ self.test_table.insert(),
+ {"x": 2, "y": 3}
+ )
+ trans.commit()
+
+ rows = conn.execute(self.test_table.select())
+ self.assertEqual(rows.fetchall(), [(2, 3)])
+
+ transaction_resource.finishedWith(engine)
+
+
+class MySQLRetainSchemaTest(RetainSchemaTest):
+ DRIVER = "mysql"
+
+
+class PostgresqlRetainSchemaTest(RetainSchemaTest):
+ DRIVER = "postgresql"