summaryrefslogtreecommitdiffstats
path: root/networking_sfc/tests/unit/db/test_sfc_db.py
diff options
context:
space:
mode:
Diffstat (limited to 'networking_sfc/tests/unit/db/test_sfc_db.py')
-rw-r--r--networking_sfc/tests/unit/db/test_sfc_db.py1490
1 files changed, 0 insertions, 1490 deletions
diff --git a/networking_sfc/tests/unit/db/test_sfc_db.py b/networking_sfc/tests/unit/db/test_sfc_db.py
deleted file mode 100644
index 70d57e3..0000000
--- a/networking_sfc/tests/unit/db/test_sfc_db.py
+++ /dev/null
@@ -1,1490 +0,0 @@
-# Copyright 2015 Futurewei. 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.
-
-import contextlib
-import mock
-import six
-import webob.exc
-
-from oslo_config import cfg
-from oslo_utils import importutils
-from oslo_utils import uuidutils
-
-from neutron.api import extensions as api_ext
-from neutron.common import config
-import neutron.extensions as nextensions
-
-from networking_sfc.db import flowclassifier_db as fdb
-from networking_sfc.db import sfc_db
-from networking_sfc import extensions
-from networking_sfc.extensions import flowclassifier as fc_ext
-from networking_sfc.extensions import sfc
-from networking_sfc.tests import base
-from networking_sfc.tests.unit.db import test_flowclassifier_db
-
-
-DB_SFC_PLUGIN_CLASS = (
- "networking_sfc.db.sfc_db.SfcDbPlugin"
-)
-extensions_path = ':'.join(extensions.__path__ + nextensions.__path__)
-
-
-class SfcDbPluginTestCaseBase(
- base.BaseTestCase
-):
- def _create_port_chain(
- self, fmt, port_chain=None, expected_res_status=None, **kwargs
- ):
- ctx = kwargs.get('context', None)
- tenant_id = kwargs.get('tenant_id', self._tenant_id)
- data = {'port_chain': port_chain or {}}
- if ctx is None:
- data['port_chain'].update({'tenant_id': tenant_id})
- req = self.new_create_request(
- 'port_chains', data, fmt, context=ctx
- )
- res = req.get_response(self.ext_api)
- if expected_res_status:
- self.assertEqual(res.status_int, expected_res_status)
- return res
-
- @contextlib.contextmanager
- def port_chain(self, fmt=None, port_chain=None, do_delete=True, **kwargs):
- if not fmt:
- fmt = self.fmt
- res = self._create_port_chain(fmt, port_chain, **kwargs)
- if res.status_int >= 400:
- raise webob.exc.HTTPClientError(code=res.status_int)
- port_chain = self.deserialize(fmt or self.fmt, res)
- yield port_chain
- if do_delete:
- self._delete('port_chains', port_chain['port_chain']['id'])
-
- def _create_port_pair_group(
- self, fmt, port_pair_group=None, expected_res_status=None, **kwargs
- ):
- ctx = kwargs.get('context', None)
- tenant_id = kwargs.get('tenant_id', self._tenant_id)
- data = {'port_pair_group': port_pair_group or {}}
- if ctx is None:
- data['port_pair_group'].update({'tenant_id': tenant_id})
- req = self.new_create_request(
- 'port_pair_groups', data, fmt, context=ctx
- )
- res = req.get_response(self.ext_api)
- if expected_res_status:
- self.assertEqual(res.status_int, expected_res_status)
- return res
-
- @contextlib.contextmanager
- def port_pair_group(
- self, fmt=None, port_pair_group=None, do_delete=True, **kwargs
- ):
- if not fmt:
- fmt = self.fmt
- res = self._create_port_pair_group(fmt, port_pair_group, **kwargs)
- if res.status_int >= 400:
- raise webob.exc.HTTPClientError(code=res.status_int)
- port_pair_group = self.deserialize(fmt or self.fmt, res)
- yield port_pair_group
- if do_delete:
- self._delete(
- 'port_pair_groups',
- port_pair_group['port_pair_group']['id'])
-
- def _create_port_pair(
- self, fmt, port_pair=None, expected_res_status=None, **kwargs
- ):
- ctx = kwargs.get('context', None)
- tenant_id = kwargs.get('tenant_id', self._tenant_id)
- data = {'port_pair': port_pair or {}}
- if ctx is None:
- data['port_pair'].update({'tenant_id': tenant_id})
- req = self.new_create_request(
- 'port_pairs', data, fmt, context=ctx
- )
- res = req.get_response(self.ext_api)
- if expected_res_status:
- self.assertEqual(res.status_int, expected_res_status)
- return res
-
- @contextlib.contextmanager
- def port_pair(self, fmt=None, port_pair=None, do_delete=True, **kwargs):
- if not fmt:
- fmt = self.fmt
- res = self._create_port_pair(fmt, port_pair, **kwargs)
- if res.status_int >= 400:
- raise webob.exc.HTTPClientError(code=res.status_int)
- port_pair = self.deserialize(fmt or self.fmt, res)
- yield port_pair
- if do_delete:
- self._delete('port_pairs', port_pair['port_pair']['id'])
-
- def _get_expected_port_pair(self, port_pair):
- return {
- 'name': port_pair.get('name') or '',
- 'description': port_pair.get('description') or '',
- 'egress': port_pair.get('egress'),
- 'ingress': port_pair.get('ingress'),
- 'service_function_parameters': port_pair.get(
- 'service_function_parameters') or {'correlation': None}
- }
-
- def _test_create_port_pair(self, port_pair, expected_port_pair=None):
- if expected_port_pair is None:
- expected_port_pair = self._get_expected_port_pair(port_pair)
- with self.port_pair(port_pair=port_pair) as pp:
- for k, v in six.iteritems(expected_port_pair):
- self.assertEqual(pp['port_pair'][k], v)
-
- def _test_create_port_pairs(
- self, port_pairs, expected_port_pairs=None
- ):
- if port_pairs:
- port_pair = port_pairs.pop()
- if expected_port_pairs:
- expected_port_pair = expected_port_pairs.pop()
- else:
- expected_port_pair = self._get_expected_port_pair(port_pair)
- with self.port_pair(port_pair=port_pair) as pp:
- for k, v in six.iteritems(expected_port_pair):
- self.assertEqual(pp['port_pair'][k], v)
-
- def _get_expected_port_pair_group(self, port_pair_group):
- return {
- 'name': port_pair_group.get('name') or '',
- 'description': port_pair_group.get('description') or '',
- 'port_pairs': port_pair_group.get('port_pairs') or []
- }
-
- def _test_create_port_pair_group(
- self, port_pair_group, expected_port_pair_group=None
- ):
- if expected_port_pair_group is None:
- expected_port_pair_group = self._get_expected_port_pair_group(
- port_pair_group)
- with self.port_pair_group(port_pair_group=port_pair_group) as pg:
- for k, v in six.iteritems(expected_port_pair_group):
- self.assertEqual(pg['port_pair_group'][k], v)
-
- def _test_create_port_pair_groups(
- self, port_pair_groups, expected_port_pair_groups=None
- ):
- if port_pair_groups:
- port_pair_group = port_pair_groups.pop()
- if expected_port_pair_groups:
- expected_port_pair_group = expected_port_pair_groups.pop()
- else:
- expected_port_pair_group = self._get_expected_port_pair_group(
- port_pair_group)
- with self.port_pair_group(port_pair_group=port_pair_group) as pg:
- for k, v in six.iteritems(expected_port_pair_group):
- self.assertEqual(pg['port_pair_group'][k], v)
-
- def _get_expected_port_chain(self, port_chain):
- return {
- 'name': port_chain.get('name') or '',
- 'description': port_chain.get('description') or '',
- 'port_pair_groups': port_chain['port_pair_groups'],
- 'flow_classifiers': port_chain.get('flow_classifiers') or [],
- 'chain_parameters': port_chain.get(
- 'chain_parameters') or {'correlation': 'mpls'}
- }
-
- def _test_create_port_chain(self, port_chain, expected_port_chain=None):
- if expected_port_chain is None:
- expected_port_chain = self._get_expected_port_chain(port_chain)
- with self.port_chain(port_chain=port_chain) as pc:
- for k, v in six.iteritems(expected_port_chain):
- self.assertEqual(pc['port_chain'][k], v)
-
- def _test_create_port_chains(
- self, port_chains, expected_port_chains=None
- ):
- if port_chains:
- port_chain = port_chains.pop()
- if expected_port_chains:
- expected_port_chain = expected_port_chains.pop()
- else:
- expected_port_chain = self._get_expected_port_chain(
- port_chain)
- with self.port_chain(port_chain=port_chain) as pc:
- for k, v in six.iteritems(expected_port_chain):
- self.assertEqual(pc['port_chain'][k], v)
-
-
-class SfcDbPluginTestCase(
- base.NeutronDbPluginV2TestCase,
- test_flowclassifier_db.FlowClassifierDbPluginTestCaseBase,
- SfcDbPluginTestCaseBase
-):
- resource_prefix_map = dict([
- (k, sfc.SFC_PREFIX)
- for k in sfc.RESOURCE_ATTRIBUTE_MAP.keys()
- ] + [
- (k, fc_ext.FLOW_CLASSIFIER_PREFIX)
- for k in fc_ext.RESOURCE_ATTRIBUTE_MAP.keys()
- ])
-
- def setUp(self, core_plugin=None, sfc_plugin=None,
- flowclassifier_plugin=None, ext_mgr=None):
- mock_log_p = mock.patch.object(sfc_db, 'LOG')
- self.mock_log = mock_log_p.start()
- cfg.CONF.register_opts(sfc.sfc_quota_opts, 'QUOTAS')
- if not sfc_plugin:
- sfc_plugin = DB_SFC_PLUGIN_CLASS
- if not flowclassifier_plugin:
- flowclassifier_plugin = (
- test_flowclassifier_db.DB_FLOWCLASSIFIER_PLUGIN_CLASS)
-
- service_plugins = {
- sfc.SFC_EXT: sfc_plugin,
- fc_ext.FLOW_CLASSIFIER_EXT: flowclassifier_plugin
- }
- sfc_db.SfcDbPlugin.supported_extension_aliases = [
- "sfc"]
- sfc_db.SfcDbPlugin.path_prefix = sfc.SFC_PREFIX
- fdb.FlowClassifierDbPlugin.supported_extension_aliases = [
- "flow_classifier"]
- fdb.FlowClassifierDbPlugin.path_prefix = (
- fc_ext.FLOW_CLASSIFIER_PREFIX
- )
- super(SfcDbPluginTestCase, self).setUp(
- ext_mgr=ext_mgr,
- plugin=core_plugin,
- service_plugins=service_plugins
- )
- if not ext_mgr:
- self.sfc_plugin = importutils.import_object(sfc_plugin)
- self.flowclassifier_plugin = importutils.import_object(
- flowclassifier_plugin)
- ext_mgr = api_ext.PluginAwareExtensionManager(
- extensions_path,
- {
- sfc.SFC_EXT: self.sfc_plugin,
- fc_ext.FLOW_CLASSIFIER_EXT: self.flowclassifier_plugin
- }
- )
- app = config.load_paste_app('extensions_test_app')
- self.ext_api = api_ext.ExtensionMiddleware(app, ext_mgr=ext_mgr)
-
- def test_create_port_chain(self):
- with self.port_pair_group(port_pair_group={}) as pg:
- self._test_create_port_chain({
- 'port_pair_groups': [pg['port_pair_group']['id']]})
-
- def test_quota_create_port_chain(self):
- cfg.CONF.set_override('quota_port_chain', 3, group='QUOTAS')
- with self.port_pair_group(
- port_pair_group={}, do_delete=False
- ) as pg1, self.port_pair_group(
- port_pair_group={}, do_delete=False
- ) as pg2, self.port_pair_group(
- port_pair_group={}, do_delete=False
- ) as pg3, self.port_pair_group(
- port_pair_group={}, do_delete=False
- ) as pg4:
- self._create_port_chain(
- self.fmt, {
- 'port_pair_groups': [pg1['port_pair_group']['id']]
- }, expected_res_status=201)
- self._create_port_chain(
- self.fmt, {
- 'port_pair_groups': [pg2['port_pair_group']['id']]
- }, expected_res_status=201)
- self._create_port_chain(
- self.fmt, {
- 'port_pair_groups': [pg3['port_pair_group']['id']]
- }, expected_res_status=201)
- self._create_port_chain(
- self.fmt, {
- 'port_pair_groups': [pg4['port_pair_group']['id']]
- }, expected_res_status=409)
-
- def test_create_port_chain_all_fields(self):
- with self.port_pair_group(port_pair_group={}) as pg:
- self._test_create_port_chain({
- 'port_pair_groups': [pg['port_pair_group']['id']],
- 'flow_classifiers': [],
- 'name': 'abc',
- 'description': 'def',
- 'chain_parameters': {'correlation': 'mpls'}
- })
-
- def test_create_port_chain_multi_port_pair_groups(self):
- with self.port_pair_group(
- port_pair_group={}
- ) as pg1, self.port_pair_group(
- port_pair_group={}
- ) as pg2:
- self._test_create_port_chain({
- 'port_pair_groups': [
- pg1['port_pair_group']['id'],
- pg2['port_pair_group']['id']
- ]
- })
-
- def test_create_port_chain_shared_port_pair_groups(self):
- with self.port_pair_group(
- port_pair_group={}
- ) as pg1, self.port_pair_group(
- port_pair_group={}
- ) as pg2, self.port_pair_group(
- port_pair_group={}
- ) as pg3:
- self._test_create_port_chains([{
- 'port_pair_groups': [
- pg1['port_pair_group']['id'],
- pg2['port_pair_group']['id']
- ]
- }, {
- 'port_pair_groups': [
- pg1['port_pair_group']['id'],
- pg3['port_pair_group']['id']
- ]
- }])
-
- def test_create_port_chain_shared_port_pair_groups_different_order(self):
- with self.port_pair_group(
- port_pair_group={}
- ) as pg1, self.port_pair_group(
- port_pair_group={}
- ) as pg2:
- self._test_create_port_chains([{
- 'port_pair_groups': [
- pg1['port_pair_group']['id'],
- pg2['port_pair_group']['id']
- ]
- }, {
- 'port_pair_groups': [
- pg2['port_pair_group']['id'],
- pg1['port_pair_group']['id']
- ]
- }])
-
- def test_create_port_chain_with_empty_chain_parameters(self):
- with self.port_pair_group(port_pair_group={}) as pg:
- self._test_create_port_chain({
- 'chain_parameters': {},
- 'port_pair_groups': [pg['port_pair_group']['id']]
- })
-
- def test_create_port_chain_with_none_chain_parameters(self):
- with self.port_pair_group(port_pair_group={}) as pg:
- self._test_create_port_chain({
- 'chain_parameters': None,
- 'port_pair_groups': [pg['port_pair_group']['id']]
- })
-
- def test_create_port_chain_with_default_chain_parameters(self):
- with self.port_pair_group(port_pair_group={}) as pg:
- self._test_create_port_chain({
- 'chain_parameters': {'correlation': 'mpls'},
- 'port_pair_groups': [pg['port_pair_group']['id']]
- })
-
- def test_create_port_chain_with_none_flow_classifiers(self):
- with self.port_pair_group(port_pair_group={}) as pg:
- self._test_create_port_chain({
- 'flow_classifiers': None,
- 'port_pair_groups': [pg['port_pair_group']['id']]
- })
-
- def test_create_port_chain_with_empty_flow_classifiers(self):
- with self.port_pair_group(port_pair_group={}) as pg:
- self._test_create_port_chain({
- 'flow_classifiers': [],
- 'port_pair_groups': [pg['port_pair_group']['id']]
- })
-
- def test_create_port_chain_with_flow_classifiers(self):
- with self.flow_classifier(flow_classifier={}) as fc:
- with self.port_pair_group(port_pair_group={}) as pg:
- self._test_create_port_chain({
- 'flow_classifiers': [fc['flow_classifier']['id']],
- 'port_pair_groups': [pg['port_pair_group']['id']]
- })
-
- def test_create_port_chain_with_multi_flow_classifiers(self):
- with self.flow_classifier(
- flow_classifier={}
- ) as fc1, self.flow_classifier(
- flow_classifier={}
- ) as fc2:
- with self.port_pair_group(port_pair_group={}) as pg:
- self._test_create_port_chain({
- 'flow_classifiers': [
- fc1['flow_classifier']['id'],
- fc2['flow_classifier']['id']
- ],
- 'port_pair_groups': [pg['port_pair_group']['id']]
- })
-
- def test_create_port_chain_with_port_pairs(self):
- with self.port(
- name='port1',
- device_id='default'
- ) as src_port, self.port(
- name='port2',
- device_id='default'
- ) as dst_port:
- with self.port_pair(port_pair={
- 'ingress': src_port['port']['id'],
- 'egress': dst_port['port']['id']
- }) as pp1, self.port_pair(port_pair={
- 'ingress': dst_port['port']['id'],
- 'egress': src_port['port']['id']
- }) as pp2:
- with self.port_pair_group(port_pair_group={
- 'port_pairs': [
- pp1['port_pair']['id']
- ]
- }) as pg1, self.port_pair_group(port_pair_group={
- 'port_pairs': [
- pp2['port_pair']['id']
- ]
- }) as pg2:
- self._test_create_port_chain({
- 'port_pair_groups': [
- pg1['port_pair_group']['id'],
- pg2['port_pair_group']['id']
- ]
- })
-
- def test_create_port_chain_with_empty_port_pair_groups(self):
- self._create_port_chain(
- self.fmt, {'port_pair_groups': []},
- expected_res_status=400
- )
-
- def test_create_port_chain_with_nonuuid_port_pair_group_id(self):
- self._create_port_chain(
- self.fmt, {'port_pair_groups': ['unknown']},
- expected_res_status=400
- )
-
- def test_create_port_chain_with_unknown_port_pair_group_id(self):
- self._create_port_chain(
- self.fmt, {'port_pair_groups': [uuidutils.generate_uuid()]},
- expected_res_status=404
- )
-
- def test_create_port_chain_with_same_port_pair_groups(self):
- with self.port_pair_group(
- port_pair_group={}
- ) as pg:
- with self.port_chain(
- port_chain={
- 'port_pair_groups': [pg['port_pair_group']['id']]
- }
- ):
- self._create_port_chain(
- self.fmt, {
- 'port_pair_groups': [pg['port_pair_group']['id']]
- }, expected_res_status=409
- )
-
- def test_create_port_chain_with_no_port_pair_groups(self):
- self._create_port_chain(
- self.fmt, {}, expected_res_status=400
- )
-
- def test_create_port_chain_with_invalid_chain_parameters(self):
- with self.port_pair_group(port_pair_group={}) as pg:
- self._create_port_chain(
- self.fmt, {
- 'chain_parameters': {'correlation': 'unknown'},
- 'port_pair_groups': [pg['port_pair_group']['id']]
- }, expected_res_status=400
- )
-
- def test_create_port_chain_unknown_flow_classifiers(self):
- with self.port_pair_group(port_pair_group={}) as pg:
- self._create_port_chain(
- self.fmt, {
- 'flow_classifiers': [uuidutils.generate_uuid()],
- 'port_pair_groups': [pg['port_pair_group']['id']]
- }, expected_res_status=404
- )
-
- def test_create_port_chain_nouuid_flow_classifiers(self):
- with self.port_pair_group(port_pair_group={}) as pg:
- self._create_port_chain(
- self.fmt, {
- 'flow_classifiers': ['unknown'],
- 'port_pair_groups': [pg['port_pair_group']['id']]
- }, expected_res_status=400
- )
-
- def test_list_port_chains(self):
- with self.port_pair_group(
- port_pair_group={}
- ) as pg1, self.port_pair_group(
- port_pair_group={}
- ) as pg2:
- with self.port_chain(port_chain={
- 'port_pair_groups': [pg1['port_pair_group']['id']]
- }) as pc1, self.port_chain(port_chain={
- 'port_pair_groups': [pg2['port_pair_group']['id']]
- }) as pc2:
- port_chains = [pc1, pc2]
- self._test_list_resources(
- 'port_chain', port_chains
- )
-
- def test_list_port_chains_with_params(self):
- with self.port_pair_group(
- port_pair_group={}
- ) as pg1, self.port_pair_group(
- port_pair_group={}
- ) as pg2:
- with self.port_chain(port_chain={
- 'name': 'test1',
- 'port_pair_groups': [pg1['port_pair_group']['id']]
- }) as pc1, self.port_chain(port_chain={
- 'name': 'test2',
- 'port_pair_groups': [pg2['port_pair_group']['id']]
- }) as pc2:
- self._test_list_resources(
- 'port_chain', [pc1],
- query_params='name=test1'
- )
- self._test_list_resources(
- 'port_chain', [pc2],
- query_params='name=test2'
- )
- self._test_list_resources(
- 'port_chain', [],
- query_params='name=test3'
- )
-
- def test_list_port_chains_with_unknown_params(self):
- with self.port_pair_group(
- port_pair_group={}
- ) as pg1, self.port_pair_group(
- port_pair_group={}
- ) as pg2:
- with self.port_chain(port_chain={
- 'name': 'test1',
- 'port_pair_groups': [pg1['port_pair_group']['id']]
- }) as pc1, self.port_chain(port_chain={
- 'name': 'test2',
- 'port_pair_groups': [pg2['port_pair_group']['id']]
- }) as pc2:
- self._test_list_resources(
- 'port_chain', [pc1, pc2],
- query_params='hello=test3'
- )
-
- def test_show_port_chain(self):
- with self.port_pair_group(
- port_pair_group={}
- ) as pg:
- with self.port_chain(port_chain={
- 'name': 'test1',
- 'description': 'portchain',
- 'port_pair_groups': [pg['port_pair_group']['id']]
- }) as pc:
- req = self.new_show_request(
- 'port_chains', pc['port_chain']['id']
- )
- res = self.deserialize(
- self.fmt, req.get_response(self.ext_api)
- )
- expected = self._get_expected_port_chain(pc['port_chain'])
- for k, v in six.iteritems(expected):
- self.assertEqual(res['port_chain'][k], v)
-
- def test_show_port_chain_noexist(self):
- req = self.new_show_request(
- 'port_chains', '1'
- )
- res = req.get_response(self.ext_api)
- self.assertEqual(res.status_int, 404)
-
- def test_update_port_chain(self):
- with self.flow_classifier(
- flow_classifier={}
- ) as fc1, self.flow_classifier(
- flow_classifier={}
- ) as fc2:
- with self.port_pair_group(
- port_pair_group={}
- ) as pg:
- with self.port_chain(port_chain={
- 'name': 'test1',
- 'description': 'desc1',
- 'port_pair_groups': [pg['port_pair_group']['id']],
- 'flow_classifiers': [fc1['flow_classifier']['id']]
- }) as pc:
- updates = {
- 'name': 'test2',
- 'description': 'desc2',
- 'flow_classifiers': [fc2['flow_classifier']['id']]
- }
- req = self.new_update_request(
- 'port_chains', {'port_chain': updates},
- pc['port_chain']['id']
- )
- res = self.deserialize(
- self.fmt,
- req.get_response(self.ext_api)
- )
- expected = pc['port_chain']
- expected.update(updates)
- for k, v in six.iteritems(expected):
- self.assertEqual(res['port_chain'][k], v)
- req = self.new_show_request(
- 'port_chains', pc['port_chain']['id']
- )
- res = self.deserialize(
- self.fmt, req.get_response(self.ext_api)
- )
- for k, v in six.iteritems(expected):
- self.assertEqual(res['port_chain'][k], v)
-
- def test_update_port_chain_port_pair_groups(self):
- with self.port_pair_group(
- port_pair_group={}
- ) as pg1, self.port_pair_group(
- port_pair_group={}
- ) as pg2:
- with self.port_chain(port_chain={
- 'port_pair_groups': [pg1['port_pair_group']['id']],
- }) as pc:
- updates = {
- 'port_pair_groups': [pg2['port_pair_group']['id']]
- }
- req = self.new_update_request(
- 'port_chains', {'port_chain': updates},
- pc['port_chain']['id']
- )
- res = req.get_response(self.ext_api)
- self.assertEqual(res.status_int, 400)
-
- def test_update_port_chain_chain_parameters(self):
- with self.port_pair_group(
- port_pair_group={}
- ) as pg:
- with self.port_chain(port_chain={
- 'port_pair_groups': [pg['port_pair_group']['id']],
- }) as pc:
- updates = {
- 'chain_parameters': {'correlation': 'mpls'}
- }
- req = self.new_update_request(
- 'port_chains', {'port_chain': updates},
- pc['port_chain']['id']
- )
- res = req.get_response(self.ext_api)
- self.assertEqual(res.status_int, 400)
-
- def test_delete_port_chain(self):
- with self.port_pair_group(
- port_pair_group={}
- ) as pg:
- with self.port_chain(port_chain={
- 'port_pair_groups': [pg['port_pair_group']['id']]
- }, do_delete=False) as pc:
- req = self.new_delete_request(
- 'port_chains', pc['port_chain']['id']
- )
- res = req.get_response(self.ext_api)
- self.assertEqual(res.status_int, 204)
- req = self.new_show_request(
- 'port_chains', pc['port_chain']['id']
- )
- res = req.get_response(self.ext_api)
- self.assertEqual(res.status_int, 404)
- req = self.new_show_request(
- 'port_pair_groups', pg['port_pair_group']['id']
- )
- res = req.get_response(self.ext_api)
- self.assertEqual(res.status_int, 200)
-
- def test_delete_port_chain_noexist(self):
- req = self.new_delete_request(
- 'port_chains', '1'
- )
- res = req.get_response(self.ext_api)
- self.assertEqual(res.status_int, 404)
-
- def test_delete_flow_classifier_port_chain_exist(self):
- with self.flow_classifier(flow_classifier={
- }) as fc:
- with self.port_pair_group(port_pair_group={
- }) as pg:
- with self.port_chain(port_chain={
- 'port_pair_groups': [pg['port_pair_group']['id']],
- 'flow_classifiers': [fc['flow_classifier']['id']]
- }):
- req = self.new_delete_request(
- 'flow_classifiers', fc['flow_classifier']['id']
- )
- res = req.get_response(self.ext_api)
- self.assertEqual(res.status_int, 409)
-
- def test_create_port_pair_group(self):
- self._test_create_port_pair_group({})
-
- def test_quota_create_port_pair_group_quota(self):
- cfg.CONF.set_override('quota_port_pair_group', 3, group='QUOTAS')
- self._create_port_pair_group(
- self.fmt, {'port_pairs': []}, expected_res_status=201
- )
- self._create_port_pair_group(
- self.fmt, {'port_pairs': []}, expected_res_status=201
- )
- self._create_port_pair_group(
- self.fmt, {'port_pairs': []}, expected_res_status=201
- )
- self._create_port_pair_group(
- self.fmt, {'port_pairs': []}, expected_res_status=409
- )
-
- def test_create_port_pair_group_all_fields(self):
- self._test_create_port_pair_group({
- 'name': 'test1',
- 'description': 'desc1',
- 'port_pairs': []
- })
-
- def test_create_port_pair_group_with_port_pairs(self):
- with self.port(
- name='port1',
- device_id='default'
- ) as src_port, self.port(
- name='port2',
- device_id='default'
- ) as dst_port:
- with self.port_pair(port_pair={
- 'ingress': src_port['port']['id'],
- 'egress': dst_port['port']['id']
- }) as pp1, self.port_pair(port_pair={
- 'ingress': dst_port['port']['id'],
- 'egress': src_port['port']['id']
- }) as pp2:
- self._test_create_port_pair_group({
- 'port_pairs': [
- pp1['port_pair']['id'],
- pp2['port_pair']['id']
- ]
- })
-
- def test_create_port_pair_group_with_nouuid_port_pair_id(self):
- self._create_port_pair_group(
- self.fmt, {'port_pairs': ['unknown']},
- expected_res_status=400
- )
-
- def test_create_port_pair_group_with_unknown_port_pair_id(self):
- self._create_port_pair_group(
- self.fmt, {'port_pairs': [uuidutils.generate_uuid()]},
- expected_res_status=404
- )
-
- def test_create_port_pair_group_share_port_pair_id(self):
- with self.port(
- name='port1',
- device_id='default'
- ) as src_port, self.port(
- name='port2',
- device_id='default'
- ) as dst_port:
- with self.port_pair(port_pair={
- 'ingress': src_port['port']['id'],
- 'egress': dst_port['port']['id']
- }) as pp:
- with self.port_pair_group(port_pair_group={
- 'port_pairs': [pp['port_pair']['id']]
- }):
- self._create_port_pair_group(
- self.fmt, {'port_pairs': [pp['port_pair']['id']]},
- expected_res_status=409
- )
-
- def test_list_port_pair_groups(self):
- with self.port_pair_group(port_pair_group={
- 'name': 'test1'
- }) as pc1, self.port_pair_group(port_pair_group={
- 'name': 'test2'
- }) as pc2:
- port_pair_groups = [pc1, pc2]
- self._test_list_resources(
- 'port_pair_group', port_pair_groups
- )
-
- def test_list_port_pair_groups_with_params(self):
- with self.port_pair_group(port_pair_group={
- 'name': 'test1'
- }) as pc1, self.port_pair_group(port_pair_group={
- 'name': 'test2'
- }) as pc2:
- self._test_list_resources(
- 'port_pair_group', [pc1],
- query_params='name=test1'
- )
- self._test_list_resources(
- 'port_pair_group', [pc2],
- query_params='name=test2'
- )
- self._test_list_resources(
- 'port_pair_group', [],
- query_params='name=test3'
- )
-
- def test_list_port_pair_groups_with_unknown_params(self):
- with self.port_pair_group(port_pair_group={
- 'name': 'test1'
- }) as pc1, self.port_pair_group(port_pair_group={
- 'name': 'test2'
- }) as pc2:
- self._test_list_resources(
- 'port_pair_group', [pc1, pc2],
- query_params='hello=test3'
- )
-
- def test_show_port_pair_group(self):
- with self.port_pair_group(port_pair_group={
- 'name': 'test1'
- }) as pc:
- req = self.new_show_request(
- 'port_pair_groups', pc['port_pair_group']['id']
- )
- res = self.deserialize(
- self.fmt, req.get_response(self.ext_api)
- )
- for k, v in six.iteritems(pc['port_pair_group']):
- self.assertEqual(res['port_pair_group'][k], v)
-
- def test_show_port_pair_group_noexist(self):
- req = self.new_show_request(
- 'port_pair_groups', '1'
- )
- res = req.get_response(self.ext_api)
- self.assertEqual(res.status_int, 404)
-
- def test_update_port_pair_group(self):
- with self.port(
- name='port1',
- device_id='default'
- ) as src_port, self.port(
- name='port2',
- device_id='default'
- ) as dst_port:
- with self.port_pair(port_pair={
- 'ingress': src_port['port']['id'],
- 'egress': dst_port['port']['id']
- }) as pp1, self.port_pair(port_pair={
- 'ingress': dst_port['port']['id'],
- 'egress': src_port['port']['id']
- }) as pp2:
- with self.port_pair_group(port_pair_group={
- 'name': 'test1',
- 'description': 'desc1',
- 'port_pairs': [pp1['port_pair']['id']]
- }) as pg:
- updates = {
- 'name': 'test2',
- 'description': 'desc2',
- 'port_pairs': [pp2['port_pair']['id']]
- }
- req = self.new_update_request(
- 'port_pair_groups', {'port_pair_group': updates},
- pg['port_pair_group']['id']
- )
- res = self.deserialize(
- self.fmt,
- req.get_response(self.ext_api)
- )
- expected = pg['port_pair_group']
- expected.update(updates)
- for k, v in six.iteritems(expected):
- self.assertEqual(res['port_pair_group'][k], v)
- req = self.new_show_request(
- 'port_pair_groups', pg['port_pair_group']['id']
- )
- res = self.deserialize(
- self.fmt, req.get_response(self.ext_api)
- )
- for k, v in six.iteritems(expected):
- self.assertEqual(res['port_pair_group'][k], v)
-
- def test_delete_port_pair_group(self):
- with self.port_pair_group(port_pair_group={
- 'name': 'test1'
- }, do_delete=False) as pc:
- req = self.new_delete_request(
- 'port_pair_groups', pc['port_pair_group']['id']
- )
- res = req.get_response(self.ext_api)
- self.assertEqual(res.status_int, 204)
- req = self.new_show_request(
- 'port_pair_groups', pc['port_pair_group']['id']
- )
- res = req.get_response(self.ext_api)
- self.assertEqual(res.status_int, 404)
-
- def test_delete_port_pair_group_port_chain_exist(self):
- with self.port_pair_group(port_pair_group={
- 'name': 'test1'
- }) as pg:
- with self.port_chain(port_chain={
- 'port_pair_groups': [pg['port_pair_group']['id']]
- }):
- req = self.new_delete_request(
- 'port_pair_groups', pg['port_pair_group']['id']
- )
- res = req.get_response(self.ext_api)
- self.assertEqual(res.status_int, 409)
-
- def test_delete_port_pair_group_noexist(self):
- req = self.new_delete_request(
- 'port_pair_groups', '1'
- )
- res = req.get_response(self.ext_api)
- self.assertEqual(res.status_int, 404)
-
- def test_create_port_pair(self):
- with self.port(
- name='port1',
- device_id='default'
- ) as src_port, self.port(
- name='port2',
- device_id='default'
- ) as dst_port:
- self._test_create_port_pair({
- 'ingress': src_port['port']['id'],
- 'egress': dst_port['port']['id']
- })
-
- def test_quota_create_port_pair_quota(self):
- cfg.CONF.set_override('quota_port_pair', 3, group='QUOTAS')
- with self.port(
- name='port1',
- device_id='default'
- ) as src_port1, self.port(
- name='port2',
- device_id='default'
- ) as dst_port1, self.port(
- name='port3',
- device_id='default'
- ) as src_port2, self.port(
- name='port4',
- device_id='default'
- ) as dst_port2, self.port(
- name='port5',
- device_id='default'
- ) as src_port3, self.port(
- name='port6',
- device_id='default'
- ) as dst_port3, self.port(
- name='port7',
- device_id='default'
- ) as src_port4, self.port(
- name='port8',
- device_id='default'
- ) as dst_port4:
- self._create_port_pair(
- self.fmt, {
- 'ingress': src_port1['port']['id'],
- 'egress': dst_port1['port']['id']
- }, expected_res_status=201)
- self._create_port_pair(
- self.fmt, {
- 'ingress': src_port2['port']['id'],
- 'egress': dst_port2['port']['id']
- }, expected_res_status=201)
- self._create_port_pair(
- self.fmt, {
- 'ingress': src_port3['port']['id'],
- 'egress': dst_port3['port']['id']
- }, expected_res_status=201)
- self._create_port_pair(
- self.fmt, {
- 'ingress': src_port4['port']['id'],
- 'egress': dst_port4['port']['id']
- }, expected_res_status=409)
-
- def test_create_port_pair_all_fields(self):
- with self.port(
- name='port1',
- device_id='default'
- ) as src_port, self.port(
- name='port2',
- device_id='default'
- ) as dst_port:
- self._test_create_port_pair({
- 'name': 'test1',
- 'description': 'desc1',
- 'ingress': src_port['port']['id'],
- 'egress': dst_port['port']['id'],
- 'service_function_parameters': {'correlation': None}
- })
-
- def test_create_port_pair_none_service_function_parameters(self):
- with self.port(
- name='port1',
- device_id='default'
- ) as src_port, self.port(
- name='port2',
- device_id='default'
- ) as dst_port:
- self._test_create_port_pair({
- 'ingress': src_port['port']['id'],
- 'egress': dst_port['port']['id'],
- 'service_function_parameters': None
- })
-
- def test_create_port_pair_empty_service_function_parameters(self):
- with self.port(
- name='port1',
- device_id='default'
- ) as src_port, self.port(
- name='port2',
- device_id='default'
- ) as dst_port:
- self._test_create_port_pair({
- 'ingress': src_port['port']['id'],
- 'egress': dst_port['port']['id'],
- 'service_function_parameters': {}
- })
-
- def test_create_port_pair_with_src_dst_same_port(self):
- with self.port(
- name='port1',
- device_id='default'
- ) as src_dst_port:
- self._test_create_port_pair({
- 'ingress': src_dst_port['port']['id'],
- 'egress': src_dst_port['port']['id']
- })
-
- def test_create_port_pair_empty_input(self):
- self._create_port_pair(self.fmt, {}, expected_res_status=400)
-
- def test_create_port_pair_with_no_ingress(self):
- with self.port(
- name='port1',
- device_id='default'
- ) as dst_port:
- self._create_port_pair(
- self.fmt,
- {
- 'egress': dst_port['port']['id']
- },
- expected_res_status=400
- )
-
- def test_create_port_pair_with_no_egress(self):
- with self.port(
- name='port1',
- device_id='default'
- ) as src_port:
- self._create_port_pair(
- self.fmt,
- {
- 'ingress': src_port['port']['id']
- },
- expected_res_status=400
- )
-
- def test_create_port_pair_with_nouuid_ingress(self):
- with self.port(
- name='port1',
- device_id='default'
- ) as dst_port:
- self._create_port_pair(
- self.fmt,
- {
- 'ingress': '1',
- 'egress': dst_port['port']['id']
- },
- expected_res_status=400
- )
-
- def test_create_port_pair_with_unknown_ingress(self):
- with self.port(
- name='port1',
- device_id='default'
- ) as dst_port:
- self._create_port_pair(
- self.fmt,
- {
- 'ingress': uuidutils.generate_uuid(),
- 'egress': dst_port['port']['id']
- },
- expected_res_status=404
- )
-
- def test_create_port_pair_with_nouuid_egress(self):
- with self.port(
- name='port1',
- device_id='default'
- ) as src_port:
- self._create_port_pair(
- self.fmt,
- {
- 'ingress': src_port['port']['id'],
- 'egress': '1'
- },
- expected_res_status=400
- )
-
- def test_create_port_pair_with_unkown_egress(self):
- with self.port(
- name='port1',
- device_id='default'
- ) as src_port:
- self._create_port_pair(
- self.fmt,
- {
- 'ingress': src_port['port']['id'],
- 'egress': uuidutils.generate_uuid()
- },
- expected_res_status=404
- )
-
- def test_create_port_pair_ingress_egress_different_hosts(self):
- with self.port(
- name='port1',
- device_id='device1'
- ) as src_port, self.port(
- name='port2',
- device_id='device2'
- ) as dst_port:
- self._create_port_pair(
- self.fmt,
- {
- 'ingress': src_port['port']['id'],
- 'egress': dst_port['port']['id']
- },
- expected_res_status=400
- )
-
- def test_create_port_pair_with_invalid_service_function_parameters(self):
- with self.port(
- name='port1',
- device_id='default'
- ) as src_dst_port:
- self._create_port_pair(
- self.fmt,
- {
- 'ingress': src_dst_port['port']['id'],
- 'egress': src_dst_port['port']['id'],
- 'service_function_parameters': {'abc': 'def'}
- },
- expected_res_status=400
- )
-
- def test_list_port_pairs(self):
- with self.port(
- name='port1',
- device_id='default'
- ) as src_port, self.port(
- name='port2',
- device_id='default'
- ) as dst_port:
- with self.port_pair(port_pair={
- 'ingress': src_port['port']['id'],
- 'egress': dst_port['port']['id']
- }) as pc1, self.port_pair(port_pair={
- 'ingress': dst_port['port']['id'],
- 'egress': src_port['port']['id']
- }) as pc2:
- port_pairs = [pc1, pc2]
- self._test_list_resources(
- 'port_pair', port_pairs
- )
-
- def test_list_port_pairs_with_params(self):
- with self.port(
- name='port1',
- device_id='default'
- ) as src_port, self.port(
- name='port2',
- device_id='default'
- ) as dst_port:
- with self.port_pair(port_pair={
- 'name': 'test1',
- 'ingress': src_port['port']['id'],
- 'egress': dst_port['port']['id']
- }) as pc1, self.port_pair(port_pair={
- 'name': 'test2',
- 'ingress': dst_port['port']['id'],
- 'egress': src_port['port']['id']
- }) as pc2:
- self._test_list_resources(
- 'port_pair', [pc1],
- query_params='name=test1'
- )
- self._test_list_resources(
- 'port_pair', [pc2],
- query_params='name=test2'
- )
- self._test_list_resources(
- 'port_pair', [],
- query_params='name=test3'
- )
-
- def test_list_port_pairs_with_unknown_params(self):
- with self.port(
- name='port1',
- device_id='default'
- ) as src_port, self.port(
- name='port2',
- device_id='default'
- ) as dst_port:
- with self.port_pair(port_pair={
- 'name': 'test1',
- 'ingress': src_port['port']['id'],
- 'egress': dst_port['port']['id']
- }) as pc1, self.port_pair(port_pair={
- 'name': 'test2',
- 'ingress': dst_port['port']['id'],
- 'egress': src_port['port']['id']
- }) as pc2:
- port_pairs = [pc1, pc2]
- self._test_list_resources(
- 'port_pair', port_pairs,
- query_params='hello=test3'
- )
-
- def test_show_port_pair(self):
- with self.port(
- name='port1',
- device_id='default'
- ) as src_port, self.port(
- name='port2',
- device_id='default'
- ) as dst_port:
- with self.port_pair(port_pair={
- 'ingress': src_port['port']['id'],
- 'egress': dst_port['port']['id']
- }) as pc:
- req = self.new_show_request(
- 'port_pairs', pc['port_pair']['id']
- )
- res = self.deserialize(
- self.fmt, req.get_response(self.ext_api)
- )
- for k, v in six.iteritems(pc['port_pair']):
- self.assertEqual(res['port_pair'][k], v)
-
- def test_show_port_pair_noexist(self):
- req = self.new_show_request(
- 'port_pairs', '1'
- )
- res = req.get_response(self.ext_api)
- self.assertEqual(res.status_int, 404)
-
- def test_update_port_pair(self):
- with self.port(
- name='port1',
- device_id='default'
- ) as src_port, self.port(
- name='port2',
- device_id='default'
- ) as dst_port:
- with self.port_pair(port_pair={
- 'name': 'test1',
- 'description': 'desc1',
- 'ingress': src_port['port']['id'],
- 'egress': dst_port['port']['id']
- }) as pc:
- updates = {
- 'name': 'test2',
- 'description': 'desc2'
- }
- req = self.new_update_request(
- 'port_pairs', {'port_pair': updates},
- pc['port_pair']['id']
- )
- res = self.deserialize(
- self.fmt,
- req.get_response(self.ext_api)
- )
- expected = pc['port_pair']
- expected.update(updates)
- for k, v in six.iteritems(expected):
- self.assertEqual(res['port_pair'][k], v)
- req = self.new_show_request(
- 'port_pairs', pc['port_pair']['id']
- )
- res = self.deserialize(
- self.fmt, req.get_response(self.ext_api)
- )
- for k, v in six.iteritems(expected):
- self.assertEqual(res['port_pair'][k], v)
-
- def test_update_port_pair_service_function_parameters(self):
- with self.port(
- name='port1',
- device_id='default'
- ) as src_port, self.port(
- name='port2',
- device_id='default'
- ) as dst_port:
- with self.port_pair(port_pair={
- 'name': 'test1',
- 'description': 'desc1',
- 'ingress': src_port['port']['id'],
- 'egress': dst_port['port']['id']
- }) as pc:
- updates = {
- 'service_function_parameters': {
- 'correlation': None
- }
- }
- req = self.new_update_request(
- 'port_pairs', {'port_pair': updates},
- pc['port_pair']['id']
- )
- res = req.get_response(self.ext_api)
- self.assertEqual(res.status_int, 400)
-
- def test_update_port_pair_ingress(self):
- with self.port(
- name='port1',
- device_id='default'
- ) as src_port, self.port(
- name='port2',
- device_id='default'
- ) as dst_port:
- with self.port_pair(port_pair={
- 'name': 'test1',
- 'description': 'desc1',
- 'ingress': src_port['port']['id'],
- 'egress': dst_port['port']['id']
- }) as pc:
- updates = {
- 'ingress': dst_port['port']['id']
- }
- req = self.new_update_request(
- 'port_pairs', {'port_pair': updates},
- pc['port_pair']['id']
- )
- res = req.get_response(self.ext_api)
- self.assertEqual(res.status_int, 400)
-
- def test_update_port_pair_egress(self):
- with self.port(
- name='port1',
- device_id='default'
- ) as src_port, self.port(
- name='port2',
- device_id='default'
- ) as dst_port:
- with self.port_pair(port_pair={
- 'name': 'test1',
- 'description': 'desc1',
- 'ingress': src_port['port']['id'],
- 'egress': dst_port['port']['id']
- }) as pc:
- updates = {
- 'egress': src_port['port']['id']
- }
- req = self.new_update_request(
- 'port_pairs', {'port_pair': updates},
- pc['port_pair']['id']
- )
- res = req.get_response(self.ext_api)
- self.assertEqual(res.status_int, 400)
-
- def test_delete_port_pair(self):
- with self.port(
- name='port1',
- device_id='default'
- ) as src_port, self.port(
- name='port2',
- device_id='default'
- ) as dst_port:
- with self.port_pair(port_pair={
- 'ingress': src_port['port']['id'],
- 'egress': dst_port['port']['id']
- }, do_delete=False) as pc:
- req = self.new_delete_request(
- 'port_pairs', pc['port_pair']['id']
- )
- res = req.get_response(self.ext_api)
- self.assertEqual(res.status_int, 204)
- req = self.new_show_request(
- 'port_pairs', pc['port_pair']['id']
- )
- res = req.get_response(self.ext_api)
- self.assertEqual(res.status_int, 404)
-
- def test_delete_port_pair_noexist(self):
- req = self.new_delete_request(
- 'port_pairs', '1'
- )
- res = req.get_response(self.ext_api)
- self.assertEqual(res.status_int, 404)
-
- def test_delete_port_pair_port_pair_group_exist(self):
- with self.port(
- name='port1',
- device_id='default'
- ) as src_port, self.port(
- name='port2',
- device_id='default'
- ) as dst_port:
- with self.port_pair(port_pair={
- 'ingress': src_port['port']['id'],
- 'egress': dst_port['port']['id']
- }) as pp:
- with self.port_pair_group(port_pair_group={
- 'port_pairs': [pp['port_pair']['id']]
- }):
- req = self.new_delete_request(
- 'port_pairs', pp['port_pair']['id']
- )
- res = req.get_response(self.ext_api)
- self.assertEqual(res.status_int, 409)
-
- def test_delete_ingress_port_pair_exist(self):
- with self.port(
- name='port1',
- device_id='default'
- ) as src_port, self.port(
- name='port2',
- device_id='default'
- ) as dst_port:
- with self.port_pair(port_pair={
- 'ingress': src_port['port']['id'],
- 'egress': dst_port['port']['id']
- }):
- req = self.new_delete_request(
- 'ports', src_port['port']['id']
- )
- res = req.get_response(self.api)
- self.assertEqual(res.status_int, 500)
-
- def test_delete_egress_port_pair_exist(self):
- with self.port(
- name='port1',
- device_id='default'
- ) as src_port, self.port(
- name='port2',
- device_id='default'
- ) as dst_port:
- with self.port_pair(port_pair={
- 'ingress': src_port['port']['id'],
- 'egress': dst_port['port']['id']
- }):
- req = self.new_delete_request(
- 'ports', dst_port['port']['id']
- )
- res = req.get_response(self.api)
- self.assertEqual(res.status_int, 500)