Fix db shim layer mismatches with implementation
The module manila/db/api.py is a pass-through shim layer intended to provide an interface between the implementation and the actual database queries implemented elsewhere. However, many interface methods in this module were not in sync with the actual implementation. Remove unused interfaces and create a unit test to avoid mismatches in the future. Co-Authored-By: Goutham Pacha Ravi <gouthamr@netapp.com> Change-Id: I275f028bf6f6afe10eb71fa005d3caefbc5673d2 Closes-Bug: #1516160
This commit is contained in:
parent
360e47f6d5
commit
0ac5604159
|
@ -337,7 +337,7 @@ def share_instances_get_all_by_share_network(context, share_network_id):
|
|||
|
||||
def share_instances_get_all_by_share(context, share_id):
|
||||
"""Returns list of shares that belong to given share."""
|
||||
return IMPL.share_instances_get_all_by_share_network(context, share_id)
|
||||
return IMPL.share_instances_get_all_by_share(context, share_id)
|
||||
|
||||
|
||||
def share_instances_get_all_by_consistency_group_id(context, cg_id):
|
||||
|
@ -393,14 +393,6 @@ def share_get_all_by_consistency_group_id(context, cg_id,
|
|||
sort_key=sort_key, sort_dir=sort_dir)
|
||||
|
||||
|
||||
def share_get_all_by_share_network(context, share_network_id, filters=None,
|
||||
sort_key=None, sort_dir=None):
|
||||
"""Returns list of shares that belong to given share network."""
|
||||
return IMPL.share_get_all_by_share_network(
|
||||
context, share_network_id, filters=filters, sort_key=sort_key,
|
||||
sort_dir=sort_dir)
|
||||
|
||||
|
||||
def share_get_all_by_share_server(context, share_server_id, filters=None,
|
||||
sort_key=None, sort_dir=None):
|
||||
"""Returns all shares with given share server ID."""
|
||||
|
@ -752,20 +744,6 @@ def share_server_get(context, id, session=None):
|
|||
return IMPL.share_server_get(context, id, session=session)
|
||||
|
||||
|
||||
def share_server_get_by_host(context, host, share_net_id, session=None):
|
||||
"""Get share server DB records by host."""
|
||||
return IMPL.share_server_get_by_host(context, host, share_net_id,
|
||||
session=session)
|
||||
|
||||
|
||||
def share_server_get_by_host_and_share_net(context, host, share_net_id,
|
||||
session=None):
|
||||
"""Get share server DB records by host and share net."""
|
||||
return IMPL.share_server_get_by_host_and_share_net(context, host,
|
||||
share_net_id,
|
||||
session=session)
|
||||
|
||||
|
||||
def share_server_get_all_by_host_and_share_net_valid(context, host,
|
||||
share_net_id,
|
||||
session=None):
|
||||
|
@ -854,11 +832,6 @@ def share_type_access_remove(context, type_id, project_id):
|
|||
return IMPL.share_type_access_remove(context, type_id, project_id)
|
||||
|
||||
|
||||
def share_type_qos_specs_get(context, type_id):
|
||||
"""Get all qos specs for given share type."""
|
||||
return IMPL.share_type_qos_specs_get(context, type_id)
|
||||
|
||||
|
||||
def share_type_destroy(context, id):
|
||||
"""Delete a share type."""
|
||||
return IMPL.share_type_destroy(context, id)
|
||||
|
|
|
@ -0,0 +1,54 @@
|
|||
# Copyright (c) Goutham Pacha Ravi.
|
||||
# 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.
|
||||
"""Unit Tests for the interface methods in the manila/db/api.py."""
|
||||
|
||||
import re
|
||||
|
||||
from manila.db import api as db_interface
|
||||
from manila.db.sqlalchemy import api as db_api
|
||||
from manila import test
|
||||
|
||||
|
||||
class DBInterfaceTestCase(test.TestCase):
|
||||
"""Test cases for the DB Interface methods."""
|
||||
|
||||
def setUp(self):
|
||||
super(self.__class__, self).setUp()
|
||||
|
||||
def test_interface_methods(self):
|
||||
"""Ensure that implementation methods match interfaces.
|
||||
|
||||
manila/db/api module is merely shim layer between the database
|
||||
implementation and the other methods using these implementations.
|
||||
Bugs are introduced when the shims go out of sync with the actual
|
||||
implementation. So this test ensures that method names and
|
||||
signatures match between the interface and the implementation.
|
||||
"""
|
||||
members = dir(db_interface)
|
||||
# Ignore private methods for the file and any other members that
|
||||
# need not match.
|
||||
ignore_members = re.compile(r'^_|CONF|IMPL')
|
||||
interfaces = [i for i in members if not ignore_members.match(i)]
|
||||
for interface in interfaces:
|
||||
method = getattr(db_interface, interface)
|
||||
if callable(method):
|
||||
mock_method_call = self.mock_object(db_api, interface)
|
||||
# kwargs always specify defaults, ignore them in the signature.
|
||||
args = filter(
|
||||
lambda x: x != 'kwargs', method.__code__.co_varnames)
|
||||
|
||||
method(*args)
|
||||
|
||||
self.assertTrue(mock_method_call.called)
|
Loading…
Reference in New Issue