Extract sqlite db preparation to a separate base test case

This is needed to make integrated tests to check ec2api behavior in
complex cases.

Change-Id: Ie6c3838dadd6cf1860ba0ae429ca73ecf8e39c42
This commit is contained in:
Feodor Tersin 2015-07-22 14:09:08 +03:00
parent e2e4bdf226
commit 75f150c835
2 changed files with 37 additions and 33 deletions

View File

@ -19,12 +19,15 @@ from cinderclient import client as cinderclient
from glanceclient import client as glanceclient from glanceclient import client as glanceclient
import mock import mock
from novaclient import client as novaclient from novaclient import client as novaclient
from oslo_config import cfg
from oslo_config import fixture as config_fixture from oslo_config import fixture as config_fixture
from oslotest import base as test_base from oslotest import base as test_base
import ec2api.api.apirequest import ec2api.api.apirequest
from ec2api.api import ec2utils from ec2api.api import ec2utils
import ec2api.db.sqlalchemy.api from ec2api import config
from ec2api.db import migration
from ec2api.db.sqlalchemy import api as db_backend
from ec2api.tests.unit import fakes from ec2api.tests.unit import fakes
from ec2api.tests.unit import matchers from ec2api.tests.unit import matchers
from ec2api.tests.unit import tools from ec2api.tests.unit import tools
@ -67,8 +70,7 @@ class ApiTestCase(test_base.BaseTestCase):
cinder_patcher.start().return_value = self.cinder cinder_patcher.start().return_value = self.cinder
self.addCleanup(cinder_patcher.stop) self.addCleanup(cinder_patcher.stop)
db_api_patcher = mock.patch('ec2api.db.api.IMPL', db_api_patcher = mock.patch('ec2api.db.api.IMPL', autospec=db_backend)
autospec=ec2api.db.sqlalchemy.api)
self.db_api = db_api_patcher.start() self.db_api = db_api_patcher.start()
self.addCleanup(db_api_patcher.stop) self.addCleanup(db_api_patcher.stop)
@ -231,3 +233,33 @@ class ApiTestCase(test_base.BaseTestCase):
response['Error']['Message']) response['Error']['Message'])
else: else:
return '' return ''
class DbTestCase(test_base.BaseTestCase):
DB_SCHEMA = None
@classmethod
def setUpClass(cls):
super(DbTestCase, cls).setUpClass()
conf = cfg.CONF
try:
config.parse_args([], default_config_files=[])
conf.set_override('connection', 'sqlite://', group='database')
conf.set_override('sqlite_synchronous', False, group='database')
engine = db_backend.get_engine()
conn = engine.connect()
migration.db_sync()
cls.DB_SCHEMA = "".join(line
for line in conn.connection.iterdump())
engine.dispose()
finally:
conf.reset()
def setUp(self):
super(DbTestCase, self).setUp()
engine = db_backend.get_engine()
engine.dispose()
conn = engine.connect()
conn.connection.executescript(self.DB_SCHEMA)

View File

@ -12,48 +12,20 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
from oslo_config import cfg
from oslotest import base as test_base
from sqlalchemy.orm import exc as orm_exception from sqlalchemy.orm import exc as orm_exception
from ec2api.api import validator from ec2api.api import validator
from ec2api import config
from ec2api import context as ec2_context from ec2api import context as ec2_context
from ec2api.db import api as db_api from ec2api.db import api as db_api
from ec2api.db import migration from ec2api.tests.unit import base
from ec2api.db.sqlalchemy import api as session
from ec2api.tests.unit import fakes from ec2api.tests.unit import fakes
from ec2api.tests.unit import matchers from ec2api.tests.unit import matchers
class DbApiTestCase(test_base.BaseTestCase): class DbApiTestCase(base.DbTestCase):
DB_SCHEMA = None
@classmethod
def setUpClass(cls):
super(DbApiTestCase, cls).setUpClass()
conf = cfg.CONF
try:
config.parse_args([], default_config_files=[])
conf.set_override('connection', 'sqlite://', group='database')
conf.set_override('sqlite_synchronous', False, group='database')
engine = session.get_engine()
conn = engine.connect()
migration.db_sync()
cls.DB_SCHEMA = "".join(line
for line in conn.connection.iterdump())
engine.dispose()
finally:
conf.reset()
def setUp(self): def setUp(self):
super(DbApiTestCase, self).setUp() super(DbApiTestCase, self).setUp()
engine = session.get_engine()
engine.dispose()
conn = engine.connect()
conn.connection.executescript(self.DB_SCHEMA)
self.context = ec2_context.RequestContext(fakes.ID_OS_USER, self.context = ec2_context.RequestContext(fakes.ID_OS_USER,
fakes.ID_OS_PROJECT) fakes.ID_OS_PROJECT)
self.other_context = ec2_context.RequestContext( self.other_context = ec2_context.RequestContext(