200 lines
7.4 KiB
Python
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'])
|