@@ -36,6 +36,7 @@ import (
36
36
cnofake "github.com/openshift/cluster-network-operator/pkg/client/fake"
37
37
"github.com/openshift/cluster-network-operator/pkg/hypershift"
38
38
"github.com/openshift/cluster-network-operator/pkg/names"
39
+ "github.com/openshift/cluster-network-operator/pkg/render"
39
40
)
40
41
41
42
var (
@@ -4110,3 +4111,94 @@ func Test_renderOVNKubernetes(t *testing.T) {
4110
4111
})
4111
4112
}
4112
4113
}
4114
+
4115
+ func TestOVNKubernetesScriptLibGatewayInterface (t * testing.T ) {
4116
+ g := NewGomegaWithT (t )
4117
+
4118
+ testCases := []struct {
4119
+ name string
4120
+ ovnNodeMode string
4121
+ expectedGatewayInterface string
4122
+ }{
4123
+ {
4124
+ name : "dpu-host mode uses derive-from-mgmt-port" ,
4125
+ ovnNodeMode : "dpu-host" ,
4126
+ expectedGatewayInterface : "derive-from-mgmt-port" ,
4127
+ },
4128
+ {
4129
+ name : "non-dpu-host mode uses br-ex" ,
4130
+ ovnNodeMode : "full" ,
4131
+ expectedGatewayInterface : "br-ex" ,
4132
+ },
4133
+ }
4134
+
4135
+ for _ , tc := range testCases {
4136
+ t .Run (tc .name , func (t * testing.T ) {
4137
+ // Create render data
4138
+ data := render .MakeRenderData ()
4139
+ data .Data ["OVN_NODE_MODE" ] = tc .ovnNodeMode
4140
+ data .Data ["OVN_GATEWAY_MODE" ] = "shared"
4141
+
4142
+ // Set all required template variables for 008-script-lib.yaml
4143
+ data .Data ["ReleaseVersion" ] = "4.15.0"
4144
+ data .Data ["OVNPolicyAuditDestination" ] = "null"
4145
+ data .Data ["OVNPolicyAuditSyslogFacility" ] = "local0"
4146
+ data .Data ["OVN_LOG_PATTERN_CONSOLE" ] = "%D{%Y-%m-%dT%H:%M:%S.###Z}|%05N|%c%T|%p|%m"
4147
+ data .Data ["NorthdThreads" ] = "1"
4148
+ data .Data ["OVNPolicyAuditMaxFileSize" ] = "50"
4149
+ data .Data ["OVNPolicyAuditMaxLogFiles" ] = "5"
4150
+ data .Data ["OVN_NB_INACTIVITY_PROBE" ] = "60000"
4151
+ data .Data ["OVN_NORTHD_BACKOFF_MS" ] = "300"
4152
+ data .Data ["PlatformType" ] = "AWS"
4153
+ data .Data ["OVN_CONTROLLER_INACTIVITY_PROBE" ] = "30000"
4154
+ data .Data ["GenevePort" ] = "8061"
4155
+ data .Data ["OVNHybridOverlayVXLANPort" ] = ""
4156
+ data .Data ["OVN_MULTI_NETWORK_ENABLE" ] = "false"
4157
+ data .Data ["OVN_NETWORK_SEGMENTATION_ENABLE" ] = "false"
4158
+ data .Data ["OVN_ROUTE_ADVERTISEMENTS_ENABLE" ] = "false"
4159
+ data .Data ["OVN_OBSERVABILITY_ENABLE" ] = "false"
4160
+ data .Data ["OVN_MULTI_NETWORK_POLICY_ENABLE" ] = "false"
4161
+ data .Data ["OVN_ADMIN_NETWORK_POLICY_ENABLE" ] = "false"
4162
+ data .Data ["DNS_NAME_RESOLVER_ENABLE" ] = "false"
4163
+ data .Data ["IP_FORWARDING_MODE" ] = "Restricted"
4164
+ data .Data ["NETWORK_NODE_IDENTITY_ENABLE" ] = "false"
4165
+ data .Data ["NodeIdentityCertDuration" ] = "24h"
4166
+ data .Data ["V4JoinSubnet" ] = ""
4167
+ data .Data ["V6JoinSubnet" ] = ""
4168
+ data .Data ["V4MasqueradeSubnet" ] = ""
4169
+ data .Data ["V6MasqueradeSubnet" ] = ""
4170
+ data .Data ["V4TransitSwitchSubnet" ] = ""
4171
+ data .Data ["V6TransitSwitchSubnet" ] = ""
4172
+ data .Data ["OVNPolicyAuditRateLimit" ] = "20"
4173
+ data .Data ["IsNetworkTypeLiveMigration" ] = false
4174
+ data .Data ["OVNIPsecEnable" ] = false
4175
+ data .Data ["OVNIPsecEncap" ] = "Auto"
4176
+
4177
+ // Render the script-lib template
4178
+ scriptLibPath := "../../bindata/network/ovn-kubernetes/common/008-script-lib.yaml"
4179
+ objs , err := render .RenderTemplate (scriptLibPath , & data )
4180
+ g .Expect (err ).NotTo (HaveOccurred (), "Template rendering should succeed for %s" , tc .name )
4181
+ g .Expect (objs ).To (HaveLen (1 ), "Should render exactly one object" )
4182
+
4183
+ // Verify it's a ConfigMap with the expected name
4184
+ obj := objs [0 ]
4185
+ g .Expect (obj .GetKind ()).To (Equal ("ConfigMap" ))
4186
+ g .Expect (obj .GetName ()).To (Equal ("ovnkube-script-lib" ))
4187
+
4188
+ // Extract the script content from the ConfigMap
4189
+ scriptData , found , err := uns .NestedString (obj .Object , "data" , "ovnkube-lib.sh" )
4190
+ g .Expect (err ).NotTo (HaveOccurred ())
4191
+ g .Expect (found ).To (BeTrue (), "Should find ovnkube-lib.sh in ConfigMap data" )
4192
+
4193
+ // Validate gateway interface assignment
4194
+ expectedGatewayAssignment := fmt .Sprintf ("gateway_interface=%s" , tc .expectedGatewayInterface )
4195
+ g .Expect (scriptData ).To (ContainSubstring (expectedGatewayAssignment ),
4196
+ "Script should contain correct gateway interface assignment for %s mode" , tc .ovnNodeMode )
4197
+
4198
+ // Validate that gateway_mode_flags uses the variable
4199
+ g .Expect (scriptData ).To (ContainSubstring ("--gateway-interface ${gateway_interface}" ),
4200
+ "Script should use gateway_interface variable in gateway_mode_flags" )
4201
+
4202
+ })
4203
+ }
4204
+ }
0 commit comments