# Copyright (c) 2017 Huawei Technologies India Pvt.Limited. # 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 argparse import copy from unittest import mock from osc_lib.tests import utils from oslo_utils import uuidutils class TestNeutronClientOSCV2(utils.TestCommand): def setUp(self): super(TestNeutronClientOSCV2, self).setUp() self.namespace = argparse.Namespace() self.app.client_manager.session = mock.Mock() self.app.client_manager.neutronclient = mock.Mock() self.neutronclient = self.app.client_manager.neutronclient self.neutronclient.find_resource = mock.Mock( side_effect=lambda resource, name_or_id, project_id=None, cmd_resource=None, parent_id=None, fields=None: {'id': name_or_id}) class FakeSfcPortPair(object): """Fake port pair attributes.""" @staticmethod def create_port_pair(attrs=None): """Create a fake port pair. :param Dictionary attrs: A dictionary with all attributes :return: A Dictionary with id, name, description, ingress, egress, service-function-parameter, project_id """ attrs = attrs or {} # Set default attributes. port_pair_attrs = { 'description': 'description', 'egress': uuidutils.generate_uuid(), 'id': uuidutils.generate_uuid(), 'ingress': uuidutils.generate_uuid(), 'name': 'port-pair-name', 'service_function_parameters': 'correlation=None,weight=1', 'project_id': uuidutils.generate_uuid(), } # Overwrite default attributes. port_pair_attrs.update(attrs) return copy.deepcopy(port_pair_attrs) @staticmethod def create_port_pairs(attrs=None, count=1): """Create multiple port_pairs. :param Dictionary attrs: A dictionary with all attributes :param int count: The number of port_pairs to fake :return: A list of dictionaries faking the port_pairs """ port_pairs = [] for _ in range(count): port_pairs.append(FakeSfcPortPair.create_port_pair(attrs)) return port_pairs class FakeSfcPortPairGroup(object): """Fake port pair group attributes.""" @staticmethod def create_port_pair_group(attrs=None): """Create a fake port pair group. :param Dictionary attrs: A dictionary with all attributes :return: A Dictionary with id, name, description, port_pairs, group_id port_pair_group_parameters, project_id """ attrs = attrs or {} # Set default attributes. port_pair_group_attrs = { 'id': uuidutils.generate_uuid(), 'group_id': uuidutils.generate_uuid(), 'name': 'port-pair-group-name', 'description': 'description', 'port_pairs': uuidutils.generate_uuid(), 'port_pair_group_parameters': '{"lb_fields": []}', 'project_id': uuidutils.generate_uuid(), 'tap_enabled': False } # port_pair_group_attrs default attributes. port_pair_group_attrs.update(attrs) return copy.deepcopy(port_pair_group_attrs) @staticmethod def create_port_pair_groups(attrs=None, count=1): """Create multiple port pair groups. :param Dictionary attrs: A dictionary with all attributes :param int count: The number of port_pair_groups to fake :return: A list of dictionaries faking the port pair groups """ port_pair_groups = [] for _ in range(count): port_pair_groups.append( FakeSfcPortPairGroup.create_port_pair_group(attrs)) return port_pair_groups class FakeSfcFlowClassifier(object): """Fake flow classifier attributes.""" @staticmethod def create_flow_classifier(attrs=None): """Create a fake flow classifier. :param Dictionary attrs: A dictionary with all attributes :return: A Dictionary with faking port chain attributes """ attrs = attrs or {} # Set default attributes. flow_classifier_attrs = { 'id': uuidutils.generate_uuid(), 'destination_ip_prefix': '2.2.2.2/32', 'destination_port_range_max': '90', 'destination_port_range_min': '80', 'ethertype': 'IPv4', 'logical_destination_port': uuidutils.generate_uuid(), 'logical_source_port': uuidutils.generate_uuid(), 'name': 'flow-classifier-name', 'description': 'fc_description', 'protocol': 'tcp', 'source_ip_prefix': '1.1.1.1/32', 'source_port_range_max': '20', 'source_port_range_min': '10', 'project_id': uuidutils.generate_uuid(), 'l7_parameters': '{}' } flow_classifier_attrs.update(attrs) return copy.deepcopy(flow_classifier_attrs) @staticmethod def create_flow_classifiers(attrs=None, count=1): """Create multiple flow classifiers. :param Dictionary attrs: A dictionary with all attributes :param int count: The number of flow classifiers to fake :return: A list of dictionaries faking the flow classifiers """ flow_classifiers = [] for _ in range(count): flow_classifiers.append( FakeSfcFlowClassifier.create_flow_classifier(attrs)) return flow_classifiers class FakeSfcPortChain(object): """Fake port chain attributes.""" @staticmethod def create_port_chain(attrs=None): """Create a fake port chain. :param Dictionary attrs: A dictionary with all attributes :return: A Dictionary with faking port chain attributes """ attrs = attrs or {} # Set default attributes. port_chain_attrs = { 'id': uuidutils.generate_uuid(), 'chain_id': uuidutils.generate_uuid(), 'name': 'port-chain-name', 'description': 'description', 'port_pair_groups': uuidutils.generate_uuid(), 'flow_classifiers': uuidutils.generate_uuid(), 'chain_parameters': '{"correlation": mpls}', 'project_id': uuidutils.generate_uuid(), } # port_pair_group_attrs default attributes. port_chain_attrs.update(attrs) return copy.deepcopy(port_chain_attrs) @staticmethod def create_port_chains(attrs=None, count=1): """Create multiple port chains. :param Dictionary attrs: A dictionary with all attributes :param int count: The number of port chains to fake :return: A list of dictionaries faking the port chains. """ port_chains = [] for _ in range(count): port_chains.append(FakeSfcPortChain.create_port_chain(attrs)) return port_chains class FakeSfcServiceGraph(object): """Fake service graph attributes.""" @staticmethod def create_sfc_service_graph(attrs=None): """Create a fake service graph. :param Dictionary attrs: A dictionary with all attributes :return: A Dictionary with faking service graph attributes """ attrs = attrs or {} # Set default attributes. service_graph_attrs = { 'id': uuidutils.generate_uuid(), 'name': 'port-pair-group-name', 'description': 'description', 'port_chains': {uuidutils.generate_uuid(): [ uuidutils.generate_uuid()]}, 'project_id': uuidutils.generate_uuid(), } service_graph_attrs.update(attrs) return copy.deepcopy(service_graph_attrs) @staticmethod def create_sfc_service_graphs(attrs=None, count=1): """Create multiple service graphs. :param Dictionary attrs: A dictionary with all attributes :param int count: The number of service graphs to fake :return: A list of dictionaries faking the service graphs. """ service_graphs = [] for _ in range(count): service_graphs.append( FakeSfcServiceGraph.create_sfc_service_graph(attrs)) return service_graphs