...

Source file src/k8s.io/kubernetes/pkg/proxy/apis/config/v1alpha1/defaults_test.go

Documentation: k8s.io/kubernetes/pkg/proxy/apis/config/v1alpha1

     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  }
   141  

View as plain text