group-based-policy/gbpservice/neutron/tests/unit/services/servicechain/ncp/test_tscp_resource_mapping.py

200 lines
7.4 KiB
Python

# 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.
import mock
from neutron.common import config # noqa
from neutron import context as n_context
from neutron import manager
from oslo_config import cfg
from gbpservice.neutron.services.servicechain.plugins.ncp import model
from gbpservice.neutron.tests.unit.services.grouppolicy import (
test_resource_mapping as test_gp_driver)
from gbpservice.neutron.tests.unit.services.servicechain.ncp import (
test_ncp_plugin as base)
GATEWAY = 'gateway'
GATEWAY_HA = 'gateway_ha'
TRANSPARENT = 'transparent'
ENDPOINT = 'endpoint'
info_mapping = {
GATEWAY: {'plumbing_type': GATEWAY, 'provider': [{}], 'consumer': [{}]},
GATEWAY_HA: {'plumbing_type': GATEWAY, 'provider': [{}, {}, {}],
'consumer': [{}, {}, {}]},
TRANSPARENT: {'plumbing_type': TRANSPARENT, 'provider': [{}],
'consumer': [{}]},
ENDPOINT: {'plumbing_type': ENDPOINT, 'provider': [{}]},
}
info_mapping['FIREWALL'] = info_mapping[GATEWAY]
info_mapping['FIREWALL_HA'] = info_mapping[GATEWAY_HA]
info_mapping['TRANSPARENT_FIREWALL'] = info_mapping[TRANSPARENT]
info_mapping['LOADBALANCER'] = info_mapping[ENDPOINT]
class ResourceMappingStitchingPlumberGBPTestCase(
test_gp_driver.ResourceMappingTestCase):
def setUp(self):
cfg.CONF.set_override(
'extension_drivers', ['proxy_group'], group='group_policy')
cfg.CONF.set_override('node_plumber', 'stitching_plumber',
group='node_composition_plugin')
ml2_opts = {'mechanism_drivers': ['stitching_gbp']}
host_agents = mock.patch('neutron.plugins.ml2.driver_context.'
'PortContext.host_agents').start()
host_agents.return_value = [self.agent_conf]
super(ResourceMappingStitchingPlumberGBPTestCase, self).setUp(
sc_plugin=base.SC_PLUGIN_KLASS, ml2_options=ml2_opts)
def get_plumbing_info(context):
return info_mapping.get(context.current_profile['service_type'])
self.node_driver = self.sc_plugin.driver_manager.ordered_drivers[0].obj
self.node_driver.get_plumbing_info = get_plumbing_info
@property
def sc_plugin(self):
plugins = manager.NeutronManager.get_service_plugins()
servicechain_plugin = plugins.get('SERVICECHAIN')
return servicechain_plugin
class TestPolicyRuleSet(ResourceMappingStitchingPlumberGBPTestCase,
test_gp_driver.TestPolicyRuleSet):
pass
class TestServiceChain(ResourceMappingStitchingPlumberGBPTestCase,
test_gp_driver.TestServiceChain):
def test_parent_ruleset_update_for_redirect(self):
# NCP doesn't support multiple SPECs per instance
pass
def test_enforce_parent_redirect_after_ptg_create(self):
# NCP doesn't support multiple SPECs per instance
pass
def test_hierarchical_redirect(self):
# NCP doesn't support multiple SPECs per instance
pass
def test_redirect_multiple_ptgs_single_prs(self):
# REVISIT(ivar): This test is doing a mock patching that breaks the
# workflow
pass
def test_action_spec_value_update(self):
# NCP doesn't support multiple SPECs per instance
pass
def test_rule_update_hierarchial_prs(self):
# NCP doesn't support multiple SPECs per instance
pass
def test_rule_update_updates_chain(self):
# NCP doesn't support multiple SPECs per instance
pass
class TestServiceChainAdminOwner(ResourceMappingStitchingPlumberGBPTestCase,
test_gp_driver.TestServiceChainAdminOwner):
def test_parent_ruleset_update_for_redirect(self):
# NCP doesn't support multiple SPECs per instance
pass
def test_enforce_parent_redirect_after_ptg_create(self):
# NCP doesn't support multiple SPECs per instance
pass
def test_hierarchical_redirect(self):
# NCP doesn't support multiple SPECs per instance
pass
def test_redirect_multiple_ptgs_single_prs(self):
# REVISIT(ivar): This test is doing a mock patching that breaks the
# workflow
pass
def test_action_spec_value_update(self):
# NCP doesn't support multiple SPECs per instance
pass
def test_rule_update_hierarchial_prs(self):
# NCP doesn't support multiple SPECs per instance
pass
def test_rule_update_updates_chain(self):
# NCP doesn't support multiple SPECs per instance
pass
class TestPolicyAction(ResourceMappingStitchingPlumberGBPTestCase,
test_gp_driver.TestPolicyAction):
pass
class TestPolicyRule(ResourceMappingStitchingPlumberGBPTestCase,
test_gp_driver.TestPolicyRule):
pass
class TestExternalSegment(ResourceMappingStitchingPlumberGBPTestCase,
test_gp_driver.TestExternalSegment):
def test_update(self):
super(TestExternalSegment, self).test_update(
proxy_ip_pool1='182.169.0.0/16',
proxy_ip_pool2='172.169.0.0/16')
class TestExternalPolicy(ResourceMappingStitchingPlumberGBPTestCase,
test_gp_driver.TestExternalPolicy):
pass
class TestImplicitServiceChains(ResourceMappingStitchingPlumberGBPTestCase,
base.NodeCompositionPluginTestMixin):
def test_service_targets_vif_details(self):
context = n_context.get_admin_context()
self._create_simple_service_chain(service_type='TRANSPARENT_FIREWALL')
targets = model.get_service_targets(context.session)
self.assertTrue(len(targets) > 0)
for target in targets:
pt = self.show_policy_target(
target.policy_target_id)['policy_target']
# Being service targets, port filter and hybrid plug will be false
port = self._bind_port_to_host(pt['port_id'], 'host')['port']
self.assertFalse(port['binding:vif_details']['port_filter'])
self.assertFalse(port['binding:vif_details']['ovs_hybrid_plug'])
def test_endpoint_target_vif_details(self):
context = n_context.get_admin_context()
self._create_simple_service_chain(service_type='LOADBALANCER')
targets = model.get_service_targets(context.session)
self.assertTrue(len(targets) > 0)
for target in targets:
pt = self.show_policy_target(
target.policy_target_id)['policy_target']
port = self._bind_port_to_host(pt['port_id'], 'host')['port']
self.assertTrue(port['binding:vif_details']['port_filter'])
# REVISIT: On account of the following commit:
# https://git.io/v2czD
# the hybrid plugging is disabled. Assuming that we are just
# checking for the default value here, this should be fine. Else we
# need to revisit.
self.assertFalse(port['binding:vif_details']['ovs_hybrid_plug'])