Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from dataclasses import dataclass

import pytest
from neutron_lib.api.definitions import portbindings
from neutron_lib.plugins.ml2 import api
from oslo_config import cfg

Expand All @@ -13,6 +14,22 @@ def test_with_simple_port(self, understack_driver, port_context):

understack_driver.undersync.sync_devices.assert_called_once()

def test_skips_non_baremetal_port(self, understack_driver, port_context):
port_context.current[portbindings.VNIC_TYPE] = portbindings.VNIC_NORMAL

understack_driver.update_port_postcommit(port_context)

understack_driver.undersync.sync_devices.assert_not_called()


class TestDeletePortPostCommit:
def test_skips_non_baremetal_port(self, understack_driver, port_context):
port_context.current[portbindings.VNIC_TYPE] = portbindings.VNIC_NORMAL

understack_driver.delete_port_postcommit(port_context)

understack_driver.undersync.sync_devices.assert_not_called()


@pytest.mark.usefixtures("_ironic_baremetal_port_physical_network")
class TestBindPort:
Expand Down Expand Up @@ -94,6 +111,31 @@ def test_with_no_trunk(
next_segments_to_bind=[vlan_network_segment],
)

def test_refuses_unsupported_vnic_type(
self, mocker, port_context, understack_driver
):
port_context.current[portbindings.VNIC_TYPE] = portbindings.VNIC_DIRECT
mocker.patch.object(port_context, "continue_binding")
port_context._prepare_to_bind(port_context.network.network_segments)

understack_driver.bind_port(port_context)

port_context.continue_binding.assert_not_called()

@pytest.mark.usefixtures("_ironic_baremetal_port_physical_network")
def test_does_not_bind_when_physical_network_not_found(
self, mocker, port_context, understack_driver
):
understack_driver.ironic_client.baremetal_port_physical_network.return_value = (
None
)
mocker.patch.object(port_context, "continue_binding")
port_context._prepare_to_bind(port_context.network.network_segments)

understack_driver.bind_port(port_context)

port_context.continue_binding.assert_not_called()

@pytest.mark.parametrize("port_dict", [{"trunk": True}], indirect=True)
def test_with_trunk_details(
self, mocker, understack_driver, port_context, understack_trunk_driver
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,13 +92,14 @@ def test_skips_unsupported_vnic_type(self, driver, vlan_segment):

ctx.set_binding.assert_not_called()

def test_normal_vnic_type_is_supported(self, driver, vlan_segment):
seg = vlan_segment()
ctx = _make_context(vnic_type=portbindings.VNIC_NORMAL, segments=[seg])
def test_normal_vnic_type_is_not_supported(self, driver, vlan_segment):
ctx = _make_context(
vnic_type=portbindings.VNIC_NORMAL, segments=[vlan_segment()]
)

driver.bind_port(ctx)

ctx.set_binding.assert_called_once()
ctx.set_binding.assert_not_called()

def test_binds_vlan_when_preceded_by_vxlan(
self, driver, vxlan_segment, vlan_segment
Expand All @@ -121,3 +122,22 @@ def test_empty_segments_to_bind(self, driver):
driver.bind_port(ctx)

ctx.set_binding.assert_not_called()

def test_skips_direct_vnic_type(self, driver, vlan_segment):
ctx = _make_context(
vnic_type=portbindings.VNIC_DIRECT, segments=[vlan_segment()]
)

driver.bind_port(ctx)

ctx.set_binding.assert_not_called()

def test_logs_warning_when_no_vlan_segment_found(
self, driver, vxlan_segment, caplog
):
ctx = _make_context(segments=[vxlan_segment()])

driver.bind_port(ctx)

assert "no VLAN segment found" in caplog.text
ctx.set_binding.assert_not_called()
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

LOG = logging.getLogger(__name__)

SUPPORTED_VNIC_TYPES = [portbindings.VNIC_BAREMETAL, portbindings.VNIC_NORMAL]
SUPPORTED_VNIC_TYPES = [portbindings.VNIC_BAREMETAL]


class UndersyncDriver(MechanismDriver):
Expand Down
Loading