Improved share_servers db api
Returning backend_details in dict. Removed unused db method share_server_get_by_host_and_share_net. Added unittests. Partially-implements bp implement-backend-details-in-drivers Change-Id: I1998ce06e1568ea6318fad9c535832295bbddcaa
This commit is contained in:
parent
f07936c277
commit
3edbce8c0c
|
@ -34,10 +34,7 @@ class ViewBuilder(common.ViewBuilder):
|
|||
}
|
||||
|
||||
def build_share_server_details(self, details):
|
||||
details_dict = {}
|
||||
for pair in details:
|
||||
details_dict[pair.key] = pair.value
|
||||
return {'details': details_dict}
|
||||
return {'details': details}
|
||||
|
||||
def _build_share_server_view(self, share_server, detailed=False):
|
||||
share_server_dict = {
|
||||
|
@ -50,7 +47,5 @@ class ViewBuilder(common.ViewBuilder):
|
|||
}
|
||||
if detailed:
|
||||
share_server_dict['created_at'] = share_server.created_at
|
||||
share_server_dict['backend_details'] = {}
|
||||
for pair in share_server.backend_details:
|
||||
share_server_dict['backend_details'][pair.key] = pair.value
|
||||
share_server_dict['backend_details'] = share_server.backend_details
|
||||
return share_server_dict
|
||||
|
|
|
@ -1662,8 +1662,7 @@ def share_server_delete(context, id):
|
|||
session = get_session()
|
||||
with session.begin():
|
||||
server_ref = share_server_get(context, id, session=session)
|
||||
for item in server_ref['backend_details']:
|
||||
item.delete(session=session)
|
||||
share_server_backend_details_delete(context, id, session=session)
|
||||
server_ref.delete(session=session)
|
||||
|
||||
|
||||
|
@ -1688,16 +1687,6 @@ def share_server_get(context, server_id, session=None):
|
|||
return result
|
||||
|
||||
|
||||
@require_context
|
||||
def share_server_get_by_host_and_share_net(context, host, share_net_id,
|
||||
session=None):
|
||||
result = _server_get_query(context, session).filter_by(host=host)\
|
||||
.filter_by(share_network_id=share_net_id).all()
|
||||
if result is None:
|
||||
raise exception.ShareServerNotFound(share_server_id=id)
|
||||
return result
|
||||
|
||||
|
||||
@require_context
|
||||
def share_server_get_by_host_and_share_net_valid(context, host, share_net_id,
|
||||
session=None):
|
||||
|
@ -1707,6 +1696,8 @@ def share_server_get_by_host_and_share_net_valid(context, host, share_net_id,
|
|||
(constants.STATUS_CREATING, constants.STATUS_ACTIVE))).first()
|
||||
if result is None:
|
||||
raise exception.ShareServerNotFound(share_server_id=id)
|
||||
result['backend_details'] = share_server_backend_details_get(
|
||||
context, result['id'], session=session)
|
||||
return result
|
||||
|
||||
|
||||
|
@ -1735,8 +1726,10 @@ def share_server_backend_details_delete(context, share_server_id,
|
|||
session=None):
|
||||
if not session:
|
||||
session = get_session()
|
||||
share_server_details = share_server_backend_details_get(
|
||||
context, share_server_id, session=session)
|
||||
share_server_details = model_query(context,
|
||||
models.ShareServerBackendDetails,
|
||||
session=session)\
|
||||
.filter_by(share_server_id=share_server_id).all()
|
||||
for item in share_server_details:
|
||||
item.delete(session=session)
|
||||
|
||||
|
@ -1744,9 +1737,10 @@ def share_server_backend_details_delete(context, share_server_id,
|
|||
@require_context
|
||||
def share_server_backend_details_get(context, share_server_id,
|
||||
session=None):
|
||||
return model_query(context, models.ShareServerBackendDetails,
|
||||
session=session)\
|
||||
query = model_query(context, models.ShareServerBackendDetails,
|
||||
session=session)\
|
||||
.filter_by(share_server_id=share_server_id).all()
|
||||
return dict([(item.key, item.value) for item in query])
|
||||
|
||||
|
||||
###################
|
||||
|
|
|
@ -23,63 +23,6 @@ from manila import policy
|
|||
from manila import test
|
||||
|
||||
|
||||
class FakeBackendDetails(object):
|
||||
key = 'fake_key_1'
|
||||
value = 'fake_value_1'
|
||||
|
||||
|
||||
class FakeBackendDetails2(object):
|
||||
key = 'fake_key_2'
|
||||
value = 'fake_value_2'
|
||||
|
||||
|
||||
class FakeShareServer(object):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(FakeShareServer, self).__init__()
|
||||
self.id = kwargs.get('id', 'fake_server_id')
|
||||
if 'created_at' in kwargs:
|
||||
self.created_at = kwargs.get('created_at', None)
|
||||
self.updated_at = kwargs.get('updated_at', None)
|
||||
self.host = kwargs.get('host', 'fake_host')
|
||||
self.share_network = kwargs.get('share_network', {
|
||||
'name': 'fake_sn_name', 'id': 'fake_sn_id',
|
||||
'project_id': 'fake_project_id'})
|
||||
self.share_network_id = kwargs.get('share_network_id',
|
||||
self.share_network['id'])
|
||||
self.status = kwargs.get('status', constants.STATUS_ACTIVE)
|
||||
self.project_id = self.share_network['project_id']
|
||||
self.backend_details = [
|
||||
FakeBackendDetails(),
|
||||
FakeBackendDetails2(),
|
||||
]
|
||||
|
||||
def __getitem__(self, item):
|
||||
return getattr(self, item)
|
||||
|
||||
|
||||
def fake_share_server_get_all():
|
||||
fake_share_servers = [
|
||||
FakeShareServer(),
|
||||
FakeShareServer(id='fake_server_id_2',
|
||||
host='fake_host_2',
|
||||
share_network={
|
||||
'name': None,
|
||||
'id': 'fake_sn_id_2',
|
||||
'project_id': 'fake_project_id_2'},
|
||||
status=constants.STATUS_ERROR)
|
||||
]
|
||||
return fake_share_servers
|
||||
|
||||
|
||||
def fake_share_server_get():
|
||||
return FakeShareServer(created_at=None)
|
||||
|
||||
|
||||
def fake_share_server_backend_details_get():
|
||||
return [FakeBackendDetails(), FakeBackendDetails2(), ]
|
||||
|
||||
|
||||
fake_share_server_list = {
|
||||
'share_servers': [
|
||||
{
|
||||
|
@ -118,18 +61,63 @@ fake_share_server_get_result = {
|
|||
}
|
||||
}
|
||||
|
||||
share_server_backend_details = {
|
||||
'fake_key_1': 'fake_value_1',
|
||||
'fake_key_2': 'fake_value_2',
|
||||
}
|
||||
|
||||
fake_share_server_backend_details_get_result = {
|
||||
'details': {
|
||||
'fake_key_1': 'fake_value_1',
|
||||
'fake_key_2': 'fake_value_2',
|
||||
}
|
||||
'details': share_server_backend_details
|
||||
}
|
||||
|
||||
|
||||
CONTEXT = context.get_admin_context()
|
||||
|
||||
|
||||
class FakeShareServer(object):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(FakeShareServer, self).__init__()
|
||||
self.id = kwargs.get('id', 'fake_server_id')
|
||||
if 'created_at' in kwargs:
|
||||
self.created_at = kwargs.get('created_at', None)
|
||||
self.updated_at = kwargs.get('updated_at', None)
|
||||
self.host = kwargs.get('host', 'fake_host')
|
||||
self.share_network = kwargs.get('share_network', {
|
||||
'name': 'fake_sn_name', 'id': 'fake_sn_id',
|
||||
'project_id': 'fake_project_id'})
|
||||
self.share_network_id = kwargs.get('share_network_id',
|
||||
self.share_network['id'])
|
||||
self.status = kwargs.get('status', constants.STATUS_ACTIVE)
|
||||
self.project_id = self.share_network['project_id']
|
||||
self.backend_details = share_server_backend_details
|
||||
|
||||
def __getitem__(self, item):
|
||||
return getattr(self, item)
|
||||
|
||||
|
||||
def fake_share_server_get_all():
|
||||
fake_share_servers = [
|
||||
FakeShareServer(),
|
||||
FakeShareServer(id='fake_server_id_2',
|
||||
host='fake_host_2',
|
||||
share_network={
|
||||
'name': None,
|
||||
'id': 'fake_sn_id_2',
|
||||
'project_id': 'fake_project_id_2'},
|
||||
status=constants.STATUS_ERROR)
|
||||
]
|
||||
return fake_share_servers
|
||||
|
||||
|
||||
def fake_share_server_get():
|
||||
return FakeShareServer(created_at=None)
|
||||
|
||||
|
||||
def fake_share_server_backend_details_get():
|
||||
return share_server_backend_details
|
||||
|
||||
|
||||
class FakeRequestAdmin(object):
|
||||
environ = {"manila.context": CONTEXT}
|
||||
GET = {}
|
||||
|
|
|
@ -0,0 +1,217 @@
|
|||
# Copyright (c) 2014 NetApp, Inc.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# 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.
|
||||
|
||||
"""Tests for the ShareServer and ShareServerBackendDetails tables."""
|
||||
|
||||
from manila import context
|
||||
from manila import db
|
||||
from manila import exception
|
||||
from manila.openstack.common import uuidutils
|
||||
from manila import test
|
||||
|
||||
|
||||
class ShareServerTableTestCase(test.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(ShareServerTableTestCase, self).setUp()
|
||||
self.ctxt = context.RequestContext(user_id='user_id',
|
||||
project_id='project_id',
|
||||
is_admin=True)
|
||||
|
||||
def _create_share_server(self, values=None):
|
||||
if not values:
|
||||
values = {
|
||||
'share_network_id': uuidutils.generate_uuid(),
|
||||
'host': 'host1',
|
||||
'status': 'ACTIVE'
|
||||
}
|
||||
return db.share_server_create(self.ctxt, values)
|
||||
|
||||
def test_share_server_get(self):
|
||||
values = {
|
||||
'share_network_id': 'fake-share-net-id',
|
||||
'host': 'hostname',
|
||||
'status': 'ACTIVE'
|
||||
}
|
||||
expected = self._create_share_server(values)
|
||||
server = db.share_server_get(self.ctxt, expected['id'])
|
||||
self.assertEqual(expected['id'], server['id'])
|
||||
self.assertEqual(server.share_network_id, expected.share_network_id)
|
||||
self.assertEqual(server.host, expected.host)
|
||||
self.assertEqual(server.status, expected.status)
|
||||
|
||||
def test_share_get_not_found(self):
|
||||
fake_id = 'FAKE_UUID'
|
||||
self.assertRaises(exception.ShareServerNotFound, db.share_server_get,
|
||||
self.ctxt, fake_id)
|
||||
|
||||
def test_share_server_create(self):
|
||||
values = {
|
||||
'share_network_id': 'fake-share-net-id',
|
||||
'host': 'hostname',
|
||||
'status': 'ACTIVE'
|
||||
}
|
||||
server = self._create_share_server(values)
|
||||
self.assertTrue(server['id'])
|
||||
self.assertEqual(server.share_network_id, values['share_network_id'])
|
||||
self.assertEqual(server.host, values['host'])
|
||||
self.assertEqual(server.status, values['status'])
|
||||
|
||||
def test_share_server_delete(self):
|
||||
server = self._create_share_server()
|
||||
num_records = len(db.share_server_get_all(self.ctxt))
|
||||
db.share_server_delete(self.ctxt, server['id'])
|
||||
self.assertEqual(len(db.share_server_get_all(self.ctxt)),
|
||||
num_records - 1)
|
||||
|
||||
def test_share_server_delete_not_found(self):
|
||||
fake_id = 'FAKE_UUID'
|
||||
self.assertRaises(exception.ShareServerNotFound,
|
||||
db.share_server_delete,
|
||||
self.ctxt, fake_id)
|
||||
|
||||
def test_share_server_update(self):
|
||||
update = {
|
||||
'share_network_id': 'update_net',
|
||||
'host': 'update_host',
|
||||
'status': 'updated_status'
|
||||
}
|
||||
server = self._create_share_server()
|
||||
updated_server = db.share_server_update(self.ctxt, server['id'],
|
||||
update)
|
||||
self.assertEqual(server['id'], updated_server['id'])
|
||||
self.assertEqual(updated_server.share_network_id,
|
||||
update['share_network_id'])
|
||||
self.assertEqual(updated_server.host, update['host'])
|
||||
self.assertEqual(updated_server.status, update['status'])
|
||||
|
||||
def test_share_server_update_not_found(self):
|
||||
fake_id = 'FAKE_UUID'
|
||||
self.assertRaises(exception.ShareServerNotFound,
|
||||
db.share_server_update,
|
||||
self.ctxt, fake_id, {})
|
||||
|
||||
def test_share_server_get_by_host_and_share_net_valid(self):
|
||||
valid = {
|
||||
'share_network_id': '1',
|
||||
'host': 'host1',
|
||||
'status': 'ACTIVE'
|
||||
}
|
||||
invalid = {
|
||||
'share_network_id': '1',
|
||||
'host': 'host1',
|
||||
'status': 'ERROR'
|
||||
}
|
||||
other = {
|
||||
'share_network_id': '2',
|
||||
'host': 'host2',
|
||||
'status': 'ACTIVE'
|
||||
}
|
||||
valid = self._create_share_server(valid)
|
||||
self._create_share_server(invalid)
|
||||
self._create_share_server(other)
|
||||
|
||||
servers = db.share_server_get_by_host_and_share_net_valid(
|
||||
self.ctxt,
|
||||
host='host1',
|
||||
share_net_id='1')
|
||||
self.assertEqual(servers['id'], valid['id'])
|
||||
|
||||
def test_share_server_get_by_host_and_share_net_not_found(self):
|
||||
self.assertRaises(exception.ShareServerNotFound,
|
||||
db.share_server_get_by_host_and_share_net_valid,
|
||||
self.ctxt, host='fake', share_net_id='fake')
|
||||
|
||||
def test_share_server_get_all(self):
|
||||
srv1 = {
|
||||
'share_network_id': '1',
|
||||
'host': 'host1',
|
||||
'status': 'ACTIVE'
|
||||
}
|
||||
srv2 = {
|
||||
'share_network_id': '1',
|
||||
'host': 'host1',
|
||||
'status': 'ERROR'
|
||||
}
|
||||
srv3 = {
|
||||
'share_network_id': '2',
|
||||
'host': 'host2',
|
||||
'status': 'ACTIVE'
|
||||
}
|
||||
servers = db.share_server_get_all(self.ctxt)
|
||||
self.assertEqual(len(servers), 0)
|
||||
|
||||
to_delete = self._create_share_server(srv1)
|
||||
self._create_share_server(srv2)
|
||||
self._create_share_server(srv3)
|
||||
|
||||
servers = db.share_server_get_all(self.ctxt)
|
||||
self.assertEqual(len(servers), 3)
|
||||
|
||||
db.share_server_delete(self.ctxt, to_delete['id'])
|
||||
servers = db.share_server_get_all(self.ctxt)
|
||||
self.assertEqual(len(servers), 2)
|
||||
|
||||
def test_share_server_backend_details_set(self):
|
||||
details = {
|
||||
'value1': '1',
|
||||
'value2': '2',
|
||||
}
|
||||
server = self._create_share_server()
|
||||
db.share_server_backend_details_set(self.ctxt, server['id'], details)
|
||||
|
||||
self.assertDictMatch(
|
||||
details,
|
||||
db.share_server_backend_details_get(self.ctxt, server['id'])
|
||||
)
|
||||
|
||||
def test_share_server_backend_details_set_not_found(self):
|
||||
fake_id = 'FAKE_UUID'
|
||||
self.assertRaises(exception.ShareServerNotFound,
|
||||
db.share_server_backend_details_set,
|
||||
self.ctxt, fake_id, {})
|
||||
|
||||
def test_share_server_get_with_details(self):
|
||||
values = {
|
||||
'share_network_id': 'fake-share-net-id',
|
||||
'host': 'hostname',
|
||||
'status': 'ACTIVE'
|
||||
}
|
||||
details = {
|
||||
'value1': '1',
|
||||
'value2': '2',
|
||||
}
|
||||
srv_id = self._create_share_server(values)['id']
|
||||
db.share_server_backend_details_set(self.ctxt, srv_id, details)
|
||||
server = db.share_server_get(self.ctxt, srv_id)
|
||||
self.assertEqual(srv_id, server['id'])
|
||||
self.assertEqual(server.share_network_id, values['share_network_id'])
|
||||
self.assertEqual(server.host, values['host'])
|
||||
self.assertEqual(server.status, values['status'])
|
||||
self.assertDictMatch(details, server['backend_details'])
|
||||
|
||||
def test_share_server_delete_with_details(self):
|
||||
server = self._create_share_server()
|
||||
details = {
|
||||
'value1': '1',
|
||||
'value2': '2',
|
||||
}
|
||||
db.share_server_backend_details_set(self.ctxt, server['id'], details)
|
||||
num_records = len(db.share_server_get_all(self.ctxt))
|
||||
db.share_server_delete(self.ctxt, server['id'])
|
||||
self.assertEqual(len(db.share_server_get_all(self.ctxt)),
|
||||
num_records - 1)
|
||||
self.assertFalse(
|
||||
db.share_server_backend_details_get(self.ctxt, server['id']))
|
Loading…
Reference in New Issue