k8s.io/kubernetes@v1.29.3/pkg/proxy/apis/config/v1alpha1/defaults_test.go (about) 1 /* 2 Copyright 2020 The Kubernetes Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package v1alpha1 18 19 import ( 20 "testing" 21 "time" 22 23 "k8s.io/utils/ptr" 24 25 "github.com/google/go-cmp/cmp" 26 27 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 28 componentbaseconfig "k8s.io/component-base/config/v1alpha1" 29 logsapi "k8s.io/component-base/logs/api/v1" 30 kubeproxyconfigv1alpha1 "k8s.io/kube-proxy/config/v1alpha1" 31 ) 32 33 func TestDefaultsKubeProxyConfiguration(t *testing.T) { 34 oomScore := int32(-999) 35 ctMaxPerCore := int32(32768) 36 ctMin := int32(131072) 37 testCases := []struct { 38 name string 39 original *kubeproxyconfigv1alpha1.KubeProxyConfiguration 40 expected *kubeproxyconfigv1alpha1.KubeProxyConfiguration 41 }{ 42 { 43 name: "empty-config", 44 original: &kubeproxyconfigv1alpha1.KubeProxyConfiguration{}, 45 expected: &kubeproxyconfigv1alpha1.KubeProxyConfiguration{ 46 FeatureGates: map[string]bool{}, 47 BindAddress: "0.0.0.0", 48 HealthzBindAddress: "0.0.0.0:10256", 49 MetricsBindAddress: "127.0.0.1:10249", 50 ClientConnection: componentbaseconfig.ClientConnectionConfiguration{ 51 ContentType: "application/vnd.kubernetes.protobuf", 52 QPS: 5, 53 Burst: 10, 54 }, 55 IPTables: kubeproxyconfigv1alpha1.KubeProxyIPTablesConfiguration{ 56 MasqueradeBit: ptr.To[int32](14), 57 MasqueradeAll: false, 58 LocalhostNodePorts: ptr.To(true), 59 SyncPeriod: metav1.Duration{Duration: 30 * time.Second}, 60 MinSyncPeriod: metav1.Duration{Duration: 1 * time.Second}, 61 }, 62 IPVS: kubeproxyconfigv1alpha1.KubeProxyIPVSConfiguration{ 63 SyncPeriod: metav1.Duration{Duration: 30 * time.Second}, 64 }, 65 NFTables: kubeproxyconfigv1alpha1.KubeProxyNFTablesConfiguration{ 66 MasqueradeBit: ptr.To[int32](14), 67 MasqueradeAll: false, 68 SyncPeriod: metav1.Duration{Duration: 30 * time.Second}, 69 MinSyncPeriod: metav1.Duration{Duration: 1 * time.Second}, 70 }, 71 OOMScoreAdj: &oomScore, 72 Conntrack: kubeproxyconfigv1alpha1.KubeProxyConntrackConfiguration{ 73 MaxPerCore: &ctMaxPerCore, 74 Min: &ctMin, 75 TCPEstablishedTimeout: &metav1.Duration{Duration: 24 * time.Hour}, 76 TCPCloseWaitTimeout: &metav1.Duration{Duration: 1 * time.Hour}, 77 }, 78 ConfigSyncPeriod: metav1.Duration{Duration: 15 * time.Minute}, 79 Logging: logsapi.LoggingConfiguration{ 80 Format: "text", 81 FlushFrequency: logsapi.TimeOrMetaDuration{Duration: metav1.Duration{Duration: 5 * time.Second}, SerializeAsString: true}, 82 }, 83 }, 84 }, 85 { 86 name: "metrics and healthz address with no port", 87 original: &kubeproxyconfigv1alpha1.KubeProxyConfiguration{ 88 MetricsBindAddress: "127.0.0.1", 89 HealthzBindAddress: "127.0.0.1", 90 }, 91 expected: &kubeproxyconfigv1alpha1.KubeProxyConfiguration{ 92 FeatureGates: map[string]bool{}, 93 BindAddress: "0.0.0.0", 94 HealthzBindAddress: "127.0.0.1:10256", 95 MetricsBindAddress: "127.0.0.1:10249", 96 ClientConnection: componentbaseconfig.ClientConnectionConfiguration{ 97 ContentType: "application/vnd.kubernetes.protobuf", 98 QPS: 5, 99 Burst: 10, 100 }, 101 IPTables: kubeproxyconfigv1alpha1.KubeProxyIPTablesConfiguration{ 102 MasqueradeBit: ptr.To[int32](14), 103 MasqueradeAll: false, 104 LocalhostNodePorts: ptr.To(true), 105 SyncPeriod: metav1.Duration{Duration: 30 * time.Second}, 106 MinSyncPeriod: metav1.Duration{Duration: 1 * time.Second}, 107 }, 108 IPVS: kubeproxyconfigv1alpha1.KubeProxyIPVSConfiguration{ 109 SyncPeriod: metav1.Duration{Duration: 30 * time.Second}, 110 }, 111 NFTables: kubeproxyconfigv1alpha1.KubeProxyNFTablesConfiguration{ 112 MasqueradeBit: ptr.To[int32](14), 113 MasqueradeAll: false, 114 SyncPeriod: metav1.Duration{Duration: 30 * time.Second}, 115 MinSyncPeriod: metav1.Duration{Duration: 1 * time.Second}, 116 }, 117 OOMScoreAdj: &oomScore, 118 Conntrack: kubeproxyconfigv1alpha1.KubeProxyConntrackConfiguration{ 119 MaxPerCore: &ctMaxPerCore, 120 Min: &ctMin, 121 TCPEstablishedTimeout: &metav1.Duration{Duration: 24 * time.Hour}, 122 TCPCloseWaitTimeout: &metav1.Duration{Duration: 1 * time.Hour}, 123 }, 124 ConfigSyncPeriod: metav1.Duration{Duration: 15 * time.Minute}, 125 Logging: logsapi.LoggingConfiguration{ 126 Format: "text", 127 FlushFrequency: logsapi.TimeOrMetaDuration{Duration: metav1.Duration{Duration: 5 * time.Second}, SerializeAsString: true}, 128 }, 129 }, 130 }, 131 } 132 for _, tc := range testCases { 133 t.Run(tc.name, func(t *testing.T) { 134 SetDefaults_KubeProxyConfiguration(tc.original) 135 if diff := cmp.Diff(tc.expected, tc.original); diff != "" { 136 t.Errorf("Got unexpected defaults (-want, +got):\n%s", diff) 137 } 138 }) 139 } 140 }