def test_udate_subport_bindings_noretryerror(self):
        with self.port() as _parent_port:
            parent_port = _parent_port
        trunk = self._create_test_trunk(parent_port)
        port_data = {portbindings.HOST_ID: 'trunk_host_id'}
        self.core_plugin.update_port(self.context, parent_port['port']['id'],
                                     {'port': port_data})
        subports = []
        for vid in range(0, 3):
            with self.port() as new_port:
                new_port[portbindings.HOST_ID] = 'trunk_host_id'
                obj = trunk_obj.SubPort(context=self.context,
                                        trunk_id=trunk['id'],
                                        port_id=new_port['port']['id'],
                                        segmentation_type='vlan',
                                        segmentation_id=vid)
                subports.append(obj)

        test_obj = server.TrunkSkeleton()
        test_obj._trunk_plugin = self.trunk_plugin
        test_obj._core_plugin = self.core_plugin
        self.mock_update_port.return_value = {
            portbindings.VIF_TYPE: portbindings.VIF_TYPE_BINDING_FAILED
        }
        mock_trunk_obj = mock.Mock(port_id=parent_port['port']['id'])
        mock_trunk_obj.update.side_effect = KeyError

        with mock.patch.object(trunk_obj.Trunk,
                               'get_object',
                               return_value=mock_trunk_obj):
            self.assertRaises(KeyError,
                              test_obj.update_subport_bindings,
                              self.context,
                              subports=subports)
            self.assertEqual(1, mock_trunk_obj.update.call_count)
    def test_update_subport_bindings(self):
        with self.port() as _parent_port:
            parent_port = _parent_port
        trunk = self._create_test_trunk(parent_port)
        port_data = {portbindings.HOST_ID: 'trunk_host_id'}
        self.core_plugin.update_port(self.context, parent_port['port']['id'],
                                     {'port': port_data})
        subports = []
        mock_return_vals = []
        for vid in range(0, 3):
            with self.port() as new_port:
                new_port[portbindings.HOST_ID] = 'trunk_host_id'
                mock_return_vals.append(new_port)
                obj = trunk_obj.SubPort(context=self.context,
                                        trunk_id=trunk['id'],
                                        port_id=new_port['port']['id'],
                                        segmentation_type='vlan',
                                        segmentation_id=vid)
                subports.append(obj)

        self.mock_update_port.side_effect = mock_return_vals
        test_obj = server.TrunkSkeleton()
        test_obj._trunk_plugin = self.trunk_plugin
        test_obj._core_plugin = self.core_plugin
        updated_subports = test_obj.update_subport_bindings(self.context,
                                                            subports=subports)
        trunk = trunk_obj.Trunk.get_object(self.context, id=trunk['id'])

        self.assertEqual(trunk.status, constants.TRUNK_BUILD_STATUS)
        self.assertIn(trunk.id, updated_subports)
        for port in updated_subports[trunk['id']]:
            self.assertEqual('trunk_host_id', port[portbindings.HOST_ID])
Beispiel #3
0
    def test_update_subport_bindings(self):
        with self.port() as _parent_port:
            parent_port = _parent_port
        trunk = self._create_test_trunk(parent_port)
        port_data = {portbindings.HOST_ID: 'trunk_host_id'}
        self.core_plugin.update_port(self.context, parent_port['port']['id'],
                                     {'port': port_data})
        subports = []
        for vid in range(0, 3):
            with self.port() as new_port:
                obj = trunk_obj.SubPort(context=self.context,
                                        trunk_id=trunk['id'],
                                        port_id=new_port['port']['id'],
                                        segmentation_type='vlan',
                                        segmentation_id=vid)
                subports.append(obj)

        test_obj = server.TrunkSkeleton()
        test_obj._trunk_plugin = self.trunk_plugin
        test_obj._core_plugin = self.core_plugin
        updated_subports = test_obj.update_subport_bindings(self.context,
                                                            subports=subports)
        self.assertIn(trunk['id'], updated_subports)
        for port in updated_subports[trunk['id']]:
            self.assertEqual('trunk_host_id', port[portbindings.HOST_ID])
    def test_udate_subport_bindings_error(self):
        with self.port() as _parent_port:
            parent_port = _parent_port
        trunk = self._create_test_trunk(parent_port)
        port_data = {portbindings.HOST_ID: 'trunk_host_id'}
        self.core_plugin.update_port(self.context, parent_port['port']['id'],
                                     {'port': port_data})
        subports = []
        for vid in range(0, 3):
            with self.port() as new_port:
                new_port[portbindings.HOST_ID] = 'trunk_host_id'
                obj = trunk_obj.SubPort(context=self.context,
                                        trunk_id=trunk['id'],
                                        port_id=new_port['port']['id'],
                                        segmentation_type='vlan',
                                        segmentation_id=vid)
                subports.append(obj)

        test_obj = server.TrunkSkeleton()
        test_obj._trunk_plugin = self.trunk_plugin
        test_obj._core_plugin = self.core_plugin
        self.mock_update_port.return_value = {
            portbindings.VIF_TYPE: portbindings.VIF_TYPE_BINDING_FAILED
        }
        updated_subports = test_obj.update_subport_bindings(self.context,
                                                            subports=subports)
        trunk = trunk_obj.Trunk.get_object(self.context, id=trunk['id'])

        self.assertEqual(trunk.status, constants.TRUNK_ERROR_STATUS)
        self.assertEqual([], updated_subports[trunk.id])
Beispiel #5
0
 def test___init__(self, mocked_get_server, mocked_registered):
     test_obj = server.TrunkSkeleton()
     self.mock_registry_provide.assert_called_with(
         server.trunk_by_port_provider, resources.TRUNK)
     trunk_target = oslo_messaging.Target(topic=rpc_consts.TRUNK_BASE_TOPIC,
                                          server=cfg.CONF.host,
                                          fanout=False)
     mocked_get_server.assert_called_with(trunk_target, [test_obj])
Beispiel #6
0
 def test___init__(self, mocked_get_server):
     mock_conn = mock.MagicMock()
     with mock.patch.object(n_rpc.Connection, 'create_consumer',
                            new_callable=mock_conn):
         test_obj = server.TrunkSkeleton()
         self.mock_registry_provide.assert_called_with(
             server.trunk_by_port_provider,
             resources.TRUNK)
         self.assertCountEqual(('trunk', [test_obj],),
                               mock_conn.mock_calls[1][1])
Beispiel #7
0
    def __init__(self):
        """Initialize an RPC backend for the Neutron Server."""
        self._skeleton = server.TrunkSkeleton()
        self._stub = server.TrunkStub()

        LOG.debug("RPC backend initialized for trunk plugin")

        for event_type in (events.AFTER_CREATE, events.AFTER_DELETE):
            registry.subscribe(self.process_event,
                               resources.TRUNK, event_type)
            registry.subscribe(self.process_event,
                               resources.SUBPORTS, event_type)
 def test__handle_port_binding_binding_error(self):
     with self.port() as _trunk_port:
         trunk = self._create_test_trunk(_trunk_port)
         trunk_host = 'test-host'
         test_obj = server.TrunkSkeleton()
         self.mock_update_port.return_value = {
             portbindings.VIF_TYPE: portbindings.VIF_TYPE_BINDING_FAILED
         }
         self.assertRaises(
             trunk_exc.SubPortBindingError, test_obj._handle_port_binding,
             self.context, _trunk_port['port']['id'],
             trunk_obj.Trunk.get_object(self.context,
                                        id=trunk['id']), trunk_host)
Beispiel #9
0
    def test_update_trunk_status(self, _):
        with self.port() as _parent_port:
            parent_port = _parent_port
        trunk = self._create_test_trunk(parent_port)
        trunk_id = trunk['id']

        test_obj = server.TrunkSkeleton()
        test_obj._trunk_plugin = self.trunk_plugin
        self.assertEqual(constants.PENDING_STATUS, trunk['status'])
        test_obj.update_trunk_status(self.context, trunk_id,
                                     constants.ACTIVE_STATUS)
        updated_trunk = self.trunk_plugin.get_trunk(self.context, trunk_id)
        self.assertEqual(constants.ACTIVE_STATUS, updated_trunk['status'])
Beispiel #10
0
    def __init__(self):
        """Initialize an RPC backend for the Neutron Server."""
        self._skeleton = server.TrunkSkeleton()
        self._stub = server.TrunkStub()

        # Set up listeners to trunk events: they dispatch RPC messages
        # to agents as needed. These are designed to work with any
        # agent-based driver that may integrate with the trunk service
        # plugin, e.g. linux bridge or ovs.
        for event in (events.AFTER_CREATE, events.AFTER_DELETE):
            registry.subscribe(self.process_event, trunk_consts.TRUNK, event)
            registry.subscribe(self.process_event, trunk_consts.SUBPORTS,
                               event)
        LOG.debug("RPC backend initialized for trunk plugin")
Beispiel #11
0
    def test_update_subport_bindings_during_migration(self):
        with self.port() as _parent_port:
            parent_port = _parent_port
        trunk = self._create_test_trunk(parent_port)
        subports = []
        for vid in range(0, 3):
            with self.port() as new_port:
                obj = trunk_obj.SubPort(context=self.context,
                                        trunk_id=trunk['id'],
                                        port_id=new_port['port']['id'],
                                        segmentation_type='vlan',
                                        segmentation_id=vid)
                subports.append(obj)

        expected_calls = [
            mock.call(
                mock.ANY, subport['port_id'], {
                    'port': {
                        portbindings.HOST_ID: 'new_trunk_host_id',
                        'device_owner': constants.TRUNK_SUBPORT_OWNER
                    }
                }) for subport in subports
        ]

        test_obj = server.TrunkSkeleton()
        test_obj._trunk_plugin = self.trunk_plugin
        test_obj._core_plugin = self.core_plugin
        port_data = {
            portbindings.HOST_ID: 'trunk_host_id',
            portbindings.PROFILE: {
                'migrating_to': 'new_trunk_host_id'
            }
        }
        with mock.patch.object(
                self.core_plugin, "get_port",
                return_value=port_data), \
            mock.patch.object(
                test_obj, "_safe_update_trunk"):
            test_obj.update_subport_bindings(self.context, subports=subports)
        for expected_call in expected_calls:
            self.assertIn(expected_call, self.mock_update_port.mock_calls)
Beispiel #12
0
    def __init__(self):
        """Initialize an RPC backend for the Neutron Server."""
        self._skeleton = server.TrunkSkeleton()
        self._stub = server.TrunkStub()

        LOG.debug("RPC backend initialized for trunk plugin")