k8s.io/kubernetes@v1.29.3/pkg/kubelet/envvars/envvars_test.go (about) 1 /* 2 Copyright 2014 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 envvars_test 18 19 import ( 20 "reflect" 21 "testing" 22 23 "k8s.io/api/core/v1" 24 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 25 "k8s.io/kubernetes/pkg/kubelet/envvars" 26 ) 27 28 func TestFromServices(t *testing.T) { 29 sl := []*v1.Service{ 30 { 31 ObjectMeta: metav1.ObjectMeta{Name: "foo-bar"}, 32 Spec: v1.ServiceSpec{ 33 Selector: map[string]string{"bar": "baz"}, 34 ClusterIP: "1.2.3.4", 35 Ports: []v1.ServicePort{ 36 {Port: 8080, Protocol: "TCP"}, 37 }, 38 }, 39 }, 40 { 41 ObjectMeta: metav1.ObjectMeta{Name: "abc-123"}, 42 Spec: v1.ServiceSpec{ 43 Selector: map[string]string{"bar": "baz"}, 44 ClusterIP: "5.6.7.8", 45 Ports: []v1.ServicePort{ 46 {Name: "u-d-p", Port: 8081, Protocol: "UDP"}, 47 {Name: "t-c-p", Port: 8081, Protocol: "TCP"}, 48 }, 49 }, 50 }, 51 { 52 ObjectMeta: metav1.ObjectMeta{Name: "q-u-u-x"}, 53 Spec: v1.ServiceSpec{ 54 Selector: map[string]string{"bar": "baz"}, 55 ClusterIP: "9.8.7.6", 56 Ports: []v1.ServicePort{ 57 {Port: 8082, Protocol: "TCP"}, 58 {Name: "8083", Port: 8083, Protocol: "TCP"}, 59 }, 60 }, 61 }, 62 { 63 ObjectMeta: metav1.ObjectMeta{Name: "svrc-clusterip-none"}, 64 Spec: v1.ServiceSpec{ 65 Selector: map[string]string{"bar": "baz"}, 66 ClusterIP: "None", 67 Ports: []v1.ServicePort{ 68 {Port: 8082, Protocol: "TCP"}, 69 }, 70 }, 71 }, 72 { 73 ObjectMeta: metav1.ObjectMeta{Name: "svrc-clusterip-empty"}, 74 Spec: v1.ServiceSpec{ 75 Selector: map[string]string{"bar": "baz"}, 76 ClusterIP: "", 77 Ports: []v1.ServicePort{ 78 {Port: 8082, Protocol: "TCP"}, 79 }, 80 }, 81 }, 82 { 83 ObjectMeta: metav1.ObjectMeta{Name: "super-ipv6"}, 84 Spec: v1.ServiceSpec{ 85 Selector: map[string]string{"bar": "baz"}, 86 ClusterIP: "2001:DB8::", 87 Ports: []v1.ServicePort{ 88 {Name: "u-d-p", Port: 8084, Protocol: "UDP"}, 89 {Name: "t-c-p", Port: 8084, Protocol: "TCP"}, 90 }, 91 }, 92 }, 93 { 94 ObjectMeta: metav1.ObjectMeta{Name: "sctp-1"}, 95 Spec: v1.ServiceSpec{ 96 Selector: map[string]string{"bar": "sctp-sel"}, 97 ClusterIP: "1.2.3.4", 98 Ports: []v1.ServicePort{ 99 {Port: 777, Protocol: "SCTP"}, 100 }, 101 }, 102 }, 103 } 104 vars := envvars.FromServices(sl) 105 expected := []v1.EnvVar{ 106 {Name: "FOO_BAR_SERVICE_HOST", Value: "1.2.3.4"}, 107 {Name: "FOO_BAR_SERVICE_PORT", Value: "8080"}, 108 {Name: "FOO_BAR_PORT", Value: "tcp://1.2.3.4:8080"}, 109 {Name: "FOO_BAR_PORT_8080_TCP", Value: "tcp://1.2.3.4:8080"}, 110 {Name: "FOO_BAR_PORT_8080_TCP_PROTO", Value: "tcp"}, 111 {Name: "FOO_BAR_PORT_8080_TCP_PORT", Value: "8080"}, 112 {Name: "FOO_BAR_PORT_8080_TCP_ADDR", Value: "1.2.3.4"}, 113 {Name: "ABC_123_SERVICE_HOST", Value: "5.6.7.8"}, 114 {Name: "ABC_123_SERVICE_PORT", Value: "8081"}, 115 {Name: "ABC_123_SERVICE_PORT_U_D_P", Value: "8081"}, 116 {Name: "ABC_123_SERVICE_PORT_T_C_P", Value: "8081"}, 117 {Name: "ABC_123_PORT", Value: "udp://5.6.7.8:8081"}, 118 {Name: "ABC_123_PORT_8081_UDP", Value: "udp://5.6.7.8:8081"}, 119 {Name: "ABC_123_PORT_8081_UDP_PROTO", Value: "udp"}, 120 {Name: "ABC_123_PORT_8081_UDP_PORT", Value: "8081"}, 121 {Name: "ABC_123_PORT_8081_UDP_ADDR", Value: "5.6.7.8"}, 122 {Name: "ABC_123_PORT_8081_TCP", Value: "tcp://5.6.7.8:8081"}, 123 {Name: "ABC_123_PORT_8081_TCP_PROTO", Value: "tcp"}, 124 {Name: "ABC_123_PORT_8081_TCP_PORT", Value: "8081"}, 125 {Name: "ABC_123_PORT_8081_TCP_ADDR", Value: "5.6.7.8"}, 126 {Name: "Q_U_U_X_SERVICE_HOST", Value: "9.8.7.6"}, 127 {Name: "Q_U_U_X_SERVICE_PORT", Value: "8082"}, 128 {Name: "Q_U_U_X_SERVICE_PORT_8083", Value: "8083"}, 129 {Name: "Q_U_U_X_PORT", Value: "tcp://9.8.7.6:8082"}, 130 {Name: "Q_U_U_X_PORT_8082_TCP", Value: "tcp://9.8.7.6:8082"}, 131 {Name: "Q_U_U_X_PORT_8082_TCP_PROTO", Value: "tcp"}, 132 {Name: "Q_U_U_X_PORT_8082_TCP_PORT", Value: "8082"}, 133 {Name: "Q_U_U_X_PORT_8082_TCP_ADDR", Value: "9.8.7.6"}, 134 {Name: "Q_U_U_X_PORT_8083_TCP", Value: "tcp://9.8.7.6:8083"}, 135 {Name: "Q_U_U_X_PORT_8083_TCP_PROTO", Value: "tcp"}, 136 {Name: "Q_U_U_X_PORT_8083_TCP_PORT", Value: "8083"}, 137 {Name: "Q_U_U_X_PORT_8083_TCP_ADDR", Value: "9.8.7.6"}, 138 {Name: "SUPER_IPV6_SERVICE_HOST", Value: "2001:DB8::"}, 139 {Name: "SUPER_IPV6_SERVICE_PORT", Value: "8084"}, 140 {Name: "SUPER_IPV6_SERVICE_PORT_U_D_P", Value: "8084"}, 141 {Name: "SUPER_IPV6_SERVICE_PORT_T_C_P", Value: "8084"}, 142 {Name: "SUPER_IPV6_PORT", Value: "udp://[2001:DB8::]:8084"}, 143 {Name: "SUPER_IPV6_PORT_8084_UDP", Value: "udp://[2001:DB8::]:8084"}, 144 {Name: "SUPER_IPV6_PORT_8084_UDP_PROTO", Value: "udp"}, 145 {Name: "SUPER_IPV6_PORT_8084_UDP_PORT", Value: "8084"}, 146 {Name: "SUPER_IPV6_PORT_8084_UDP_ADDR", Value: "2001:DB8::"}, 147 {Name: "SUPER_IPV6_PORT_8084_TCP", Value: "tcp://[2001:DB8::]:8084"}, 148 {Name: "SUPER_IPV6_PORT_8084_TCP_PROTO", Value: "tcp"}, 149 {Name: "SUPER_IPV6_PORT_8084_TCP_PORT", Value: "8084"}, 150 {Name: "SUPER_IPV6_PORT_8084_TCP_ADDR", Value: "2001:DB8::"}, 151 {Name: "SCTP_1_SERVICE_HOST", Value: "1.2.3.4"}, 152 {Name: "SCTP_1_SERVICE_PORT", Value: "777"}, 153 {Name: "SCTP_1_PORT", Value: "sctp://1.2.3.4:777"}, 154 {Name: "SCTP_1_PORT_777_SCTP", Value: "sctp://1.2.3.4:777"}, 155 {Name: "SCTP_1_PORT_777_SCTP_PROTO", Value: "sctp"}, 156 {Name: "SCTP_1_PORT_777_SCTP_PORT", Value: "777"}, 157 {Name: "SCTP_1_PORT_777_SCTP_ADDR", Value: "1.2.3.4"}, 158 } 159 if len(vars) != len(expected) { 160 t.Errorf("Expected %d env vars, got: %+v", len(expected), vars) 161 return 162 } 163 for i := range expected { 164 if !reflect.DeepEqual(vars[i], expected[i]) { 165 t.Errorf("expected %#v, got %#v", vars[i], expected[i]) 166 } 167 } 168 }