11from dataclasses import dataclass
22
33import pytest
4+ from neutron_lib .api .definitions import portbindings
45from neutron_lib .plugins .ml2 import api
56from oslo_config import cfg
67
@@ -13,6 +14,22 @@ def test_with_simple_port(self, understack_driver, port_context):
1314
1415 understack_driver .undersync .sync_devices .assert_called_once ()
1516
17+ def test_skips_non_baremetal_port (self , understack_driver , port_context ):
18+ port_context .current [portbindings .VNIC_TYPE ] = portbindings .VNIC_NORMAL
19+
20+ understack_driver .update_port_postcommit (port_context )
21+
22+ understack_driver .undersync .sync_devices .assert_not_called ()
23+
24+
25+ class TestDeletePortPostCommit :
26+ def test_skips_non_baremetal_port (self , understack_driver , port_context ):
27+ port_context .current [portbindings .VNIC_TYPE ] = portbindings .VNIC_NORMAL
28+
29+ understack_driver .delete_port_postcommit (port_context )
30+
31+ understack_driver .undersync .sync_devices .assert_not_called ()
32+
1633
1734@pytest .mark .usefixtures ("_ironic_baremetal_port_physical_network" )
1835class TestBindPort :
@@ -94,6 +111,31 @@ def test_with_no_trunk(
94111 next_segments_to_bind = [vlan_network_segment ],
95112 )
96113
114+ def test_refuses_unsupported_vnic_type (
115+ self , mocker , port_context , understack_driver
116+ ):
117+ port_context .current [portbindings .VNIC_TYPE ] = portbindings .VNIC_DIRECT
118+ mocker .patch .object (port_context , "continue_binding" )
119+ port_context ._prepare_to_bind (port_context .network .network_segments )
120+
121+ understack_driver .bind_port (port_context )
122+
123+ port_context .continue_binding .assert_not_called ()
124+
125+ @pytest .mark .usefixtures ("_ironic_baremetal_port_physical_network" )
126+ def test_does_not_bind_when_physical_network_not_found (
127+ self , mocker , port_context , understack_driver
128+ ):
129+ understack_driver .ironic_client .baremetal_port_physical_network .return_value = (
130+ None
131+ )
132+ mocker .patch .object (port_context , "continue_binding" )
133+ port_context ._prepare_to_bind (port_context .network .network_segments )
134+
135+ understack_driver .bind_port (port_context )
136+
137+ port_context .continue_binding .assert_not_called ()
138+
97139 @pytest .mark .parametrize ("port_dict" , [{"trunk" : True }], indirect = True )
98140 def test_with_trunk_details (
99141 self , mocker , understack_driver , port_context , understack_trunk_driver
0 commit comments