1
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 }
169
View as plain text