¡@

Home 

OpenStack Study: test_mech_mlnx.py

OpenStack Index

**** CubicPower OpenStack Study ****

# Copyright (c) 2014 OpenStack Foundation

# 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 mock

from oslo.config import cfg

from neutron.common import constants

from neutron.extensions import portbindings

from neutron.plugins.ml2 import driver_api as api

from neutron.plugins.ml2.drivers.mlnx import mech_mlnx

from neutron.tests.unit.ml2 import _test_mech_agent as base

**** CubicPower OpenStack Study ****

class MlnxMechanismBaseTestCase(base.AgentMechanismBaseTestCase):

VIF_TYPE = portbindings.VIF_TYPE_MLNX_DIRECT

CAP_PORT_FILTER = False

AGENT_TYPE = constants.AGENT_TYPE_MLNX

GOOD_MAPPINGS = {'fake_physical_network': 'fake_bridge'}

GOOD_CONFIGS = {'interface_mappings': GOOD_MAPPINGS}

BAD_MAPPINGS = {'wrong_physical_network': 'wrong_bridge'}

BAD_CONFIGS = {'interface_mappings': BAD_MAPPINGS}

AGENTS = [{'alive': True,

'configurations': GOOD_CONFIGS}]

AGENTS_DEAD = [{'alive': False,

'configurations': GOOD_CONFIGS}]

AGENTS_BAD = [{'alive': False,

'configurations': GOOD_CONFIGS},

{'alive': True,

'configurations': BAD_CONFIGS}]

**** CubicPower OpenStack Study ****

    def setUp(self):

        super(MlnxMechanismBaseTestCase, self).setUp()

        self.driver = mech_mlnx.MlnxMechanismDriver()

        self.driver.initialize()

**** CubicPower OpenStack Study ****

class MlnxMechanismGenericTestCase(MlnxMechanismBaseTestCase, base.AgentMechanismGenericTestCase):

pass

**** CubicPower OpenStack Study ****

class MlnxMechanismLocalTestCase(MlnxMechanismBaseTestCase, base.AgentMechanismLocalTestCase):

pass

**** CubicPower OpenStack Study ****

class MlnxMechanismFlatTestCase(MlnxMechanismBaseTestCase, base.AgentMechanismFlatTestCase):

pass

**** CubicPower OpenStack Study ****

class MlnxMechanismVlanTestCase(MlnxMechanismBaseTestCase, base.AgentMechanismVlanTestCase):

pass

**** CubicPower OpenStack Study ****

class MlnxMechanismVnicTypeTestCase(MlnxMechanismBaseTestCase, base.AgentMechanismVlanTestCase):

**** CubicPower OpenStack Study ****

    def _check_vif_type_for_vnic_type(self, vnic_type,

                                      expected_vif_type):

        context = base.FakePortContext(self.AGENT_TYPE,

                                       self.AGENTS,

                                       self.VLAN_SEGMENTS,

                                       vnic_type)

        self.driver.bind_port(context)

        self.assertEqual(expected_vif_type, context._bound_vif_type)

**** CubicPower OpenStack Study ****

    def test_vnic_type_direct(self):

        self._check_vif_type_for_vnic_type(portbindings.VNIC_DIRECT,

                                           portbindings.VIF_TYPE_MLNX_HOSTDEV)

**** CubicPower OpenStack Study ****

    def test_vnic_type_macvtap(self):

        self._check_vif_type_for_vnic_type(portbindings.VNIC_MACVTAP,

                                           portbindings.VIF_TYPE_MLNX_DIRECT)

**** CubicPower OpenStack Study ****

    def test_vnic_type_normal(self):

        self._check_vif_type_for_vnic_type(portbindings.VNIC_NORMAL,

                                           self.VIF_TYPE)

**** CubicPower OpenStack Study ****

class MlnxMechanismProfileTestCase(MlnxMechanismBaseTestCase):

**** CubicPower OpenStack Study ****

    def setUp(self):

        cfg.CONF.set_override('apply_profile_patch', True, 'ESWITCH')

        super(MlnxMechanismProfileTestCase, self).setUp()

**** CubicPower OpenStack Study ****

    def test_profile_contains_physical_net(self):

        VLAN_SEGMENTS = [{api.ID: 'vlan_segment_id',

                          api.NETWORK_TYPE: 'vlan',

                          api.PHYSICAL_NETWORK: 'fake_physical_network',

                          api.SEGMENTATION_ID: 1234}]

        context = base.FakePortContext(self.AGENT_TYPE,

                                       self.AGENTS,

                                       VLAN_SEGMENTS,

                                       portbindings.VNIC_DIRECT)

        context._binding = mock.Mock()

        context._binding.profile = {}

        segment = VLAN_SEGMENTS[0]

        agent = self.AGENTS[0]

        self.driver.try_to_bind_segment_for_agent(context, segment, agent)

        self.assertEqual('{"physical_network": "fake_physical_network"}',

                         context._binding.profile)