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
import mock
from novaclient import client as novaclient
from oslo_config import cfg
from oslo_config import fixture as config_fixture
from oslotest import base as test_base
import ec2api.api.apirequest
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 matchers
from ec2api.tests.unit import tools
@ -67,8 +70,7 @@ class ApiTestCase(test_base.BaseTestCase):
cinder_patcher.start().return_value = self.cinder
self.addCleanup(cinder_patcher.stop)
db_api_patcher = mock.patch('ec2api.db.api.IMPL',
autospec=ec2api.db.sqlalchemy.api)
db_api_patcher = mock.patch('ec2api.db.api.IMPL', autospec=db_backend)
self.db_api = db_api_patcher.start()
self.addCleanup(db_api_patcher.stop)
@ -231,3 +233,33 @@ class ApiTestCase(test_base.BaseTestCase):
response['Error']['Message'])
else:
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
# 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 ec2api.api import validator
from ec2api import config
from ec2api import context as ec2_context
from ec2api.db import api as db_api
from ec2api.db import migration
from ec2api.db.sqlalchemy import api as session
from ec2api.tests.unit import base
from ec2api.tests.unit import fakes
from ec2api.tests.unit import matchers
class DbApiTestCase(test_base.BaseTestCase):
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()
class DbApiTestCase(base.DbTestCase):
def setUp(self):
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,
fakes.ID_OS_PROJECT)
self.other_context = ec2_context.RequestContext(