@@ -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 (
@@ -4192,3 +4193,94 @@ func Test_renderOVNKubernetes(t *testing.T) {
4192
4193
})
4193
4194
}
4194
4195
}
4196
+
4197
+ func TestOVNKubernetesScriptLibGatewayInterface (t * testing.T ) {
4198
+ g := NewGomegaWithT (t )
4199
+
4200
+ testCases := []struct {
4201
+ name string
4202
+ ovnNodeMode string
4203
+ expectedGatewayInterface string
4204
+ }{
4205
+ {
4206
+ name : "dpu-host mode uses derive-from-mgmt-port" ,
4207
+ ovnNodeMode : "dpu-host" ,
4208
+ expectedGatewayInterface : "derive-from-mgmt-port" ,
4209
+ },
4210
+ {
4211
+ name : "non-dpu-host mode uses br-ex" ,
4212
+ ovnNodeMode : "full" ,
4213
+ expectedGatewayInterface : "br-ex" ,
4214
+ },
4215
+ }
4216
+
4217
+ for _ , tc := range testCases {
4218
+ t .Run (tc .name , func (t * testing.T ) {
4219
+ // Create render data
4220
+ data := render .MakeRenderData ()
4221
+ data .Data ["OVN_NODE_MODE" ] = tc .ovnNodeMode
4222
+ data .Data ["OVN_GATEWAY_MODE" ] = "shared"
4223
+
4224
+ // Set all required template variables for 008-script-lib.yaml
4225
+ data .Data ["ReleaseVersion" ] = "4.15.0"
4226
+ data .Data ["OVNPolicyAuditDestination" ] = "null"
4227
+ data .Data ["OVNPolicyAuditSyslogFacility" ] = "local0"
4228
+ data .Data ["OVN_LOG_PATTERN_CONSOLE" ] = "%D{%Y-%m-%dT%H:%M:%S.###Z}|%05N|%c%T|%p|%m"
4229
+ data .Data ["NorthdThreads" ] = "1"
4230
+ data .Data ["OVNPolicyAuditMaxFileSize" ] = "50"
4231
+ data .Data ["OVNPolicyAuditMaxLogFiles" ] = "5"
4232
+ data .Data ["OVN_NB_INACTIVITY_PROBE" ] = "60000"
4233
+ data .Data ["OVN_NORTHD_BACKOFF_MS" ] = "300"
4234
+ data .Data ["PlatformType" ] = "AWS"
4235
+ data .Data ["OVN_CONTROLLER_INACTIVITY_PROBE" ] = "30000"
4236
+ data .Data ["GenevePort" ] = "8061"
4237
+ data .Data ["OVNHybridOverlayVXLANPort" ] = ""
4238
+ data .Data ["OVN_MULTI_NETWORK_ENABLE" ] = "false"
4239
+ data .Data ["OVN_NETWORK_SEGMENTATION_ENABLE" ] = "false"
4240
+ data .Data ["OVN_ROUTE_ADVERTISEMENTS_ENABLE" ] = "false"
4241
+ data .Data ["OVN_OBSERVABILITY_ENABLE" ] = "false"
4242
+ data .Data ["OVN_MULTI_NETWORK_POLICY_ENABLE" ] = "false"
4243
+ data .Data ["OVN_ADMIN_NETWORK_POLICY_ENABLE" ] = "false"
4244
+ data .Data ["DNS_NAME_RESOLVER_ENABLE" ] = "false"
4245
+ data .Data ["IP_FORWARDING_MODE" ] = "Restricted"
4246
+ data .Data ["NETWORK_NODE_IDENTITY_ENABLE" ] = "false"
4247
+ data .Data ["NodeIdentityCertDuration" ] = "24h"
4248
+ data .Data ["V4JoinSubnet" ] = ""
4249
+ data .Data ["V6JoinSubnet" ] = ""
4250
+ data .Data ["V4MasqueradeSubnet" ] = ""
4251
+ data .Data ["V6MasqueradeSubnet" ] = ""
4252
+ data .Data ["V4TransitSwitchSubnet" ] = ""
4253
+ data .Data ["V6TransitSwitchSubnet" ] = ""
4254
+ data .Data ["OVNPolicyAuditRateLimit" ] = "20"
4255
+ data .Data ["IsNetworkTypeLiveMigration" ] = false
4256
+ data .Data ["OVNIPsecEnable" ] = false
4257
+ data .Data ["OVNIPsecEncap" ] = "Auto"
4258
+
4259
+ // Render the script-lib template
4260
+ scriptLibPath := "../../bindata/network/ovn-kubernetes/common/008-script-lib.yaml"
4261
+ objs , err := render .RenderTemplate (scriptLibPath , & data )
4262
+ g .Expect (err ).NotTo (HaveOccurred (), "Template rendering should succeed for %s" , tc .name )
4263
+ g .Expect (objs ).To (HaveLen (1 ), "Should render exactly one object" )
4264
+
4265
+ // Verify it's a ConfigMap with the expected name
4266
+ obj := objs [0 ]
4267
+ g .Expect (obj .GetKind ()).To (Equal ("ConfigMap" ))
4268
+ g .Expect (obj .GetName ()).To (Equal ("ovnkube-script-lib" ))
4269
+
4270
+ // Extract the script content from the ConfigMap
4271
+ scriptData , found , err := uns .NestedString (obj .Object , "data" , "ovnkube-lib.sh" )
4272
+ g .Expect (err ).NotTo (HaveOccurred ())
4273
+ g .Expect (found ).To (BeTrue (), "Should find ovnkube-lib.sh in ConfigMap data" )
4274
+
4275
+ // Validate gateway interface assignment
4276
+ expectedGatewayAssignment := fmt .Sprintf ("gateway_interface=%s" , tc .expectedGatewayInterface )
4277
+ g .Expect (scriptData ).To (ContainSubstring (expectedGatewayAssignment ),
4278
+ "Script should contain correct gateway interface assignment for %s mode" , tc .ovnNodeMode )
4279
+
4280
+ // Validate that gateway_mode_flags uses the variable
4281
+ g .Expect (scriptData ).To (ContainSubstring ("--gateway-interface ${gateway_interface}" ),
4282
+ "Script should use gateway_interface variable in gateway_mode_flags" )
4283
+
4284
+ })
4285
+ }
4286
+ }
0 commit comments