@@ -21,6 +21,10 @@ import (
21
21
"testing"
22
22
23
23
"github.com/stretchr/testify/assert"
24
+ v1 "k8s.io/api/core/v1"
25
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
26
+ "k8s.io/apimachinery/pkg/types"
27
+ cloudproviderapi "k8s.io/cloud-provider/api"
24
28
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
25
29
)
26
30
@@ -132,3 +136,180 @@ func TestHandlerSupportsUserNamespaces(t *testing.T) {
132
136
assert .False (t , got )
133
137
assert .Error (t , err )
134
138
}
139
+
140
+ func Test_getLastObservedNodeAddresses (t * testing.T ) {
141
+ testCases := []struct {
142
+ name string
143
+ nodeName types.NodeName
144
+ node * v1.Node
145
+ externalCloudProvider bool
146
+ expectedAddrs []v1.NodeAddress
147
+ }{
148
+ {
149
+ name : "node not found" ,
150
+ nodeName : "test-node" ,
151
+ node : nil ,
152
+ expectedAddrs : nil ,
153
+ },
154
+ {
155
+ name : "empty addresses" ,
156
+ nodeName : "test-node" ,
157
+ node : & v1.Node {
158
+ ObjectMeta : metav1.ObjectMeta {Name : "test-node" },
159
+ Status : v1.NodeStatus {Addresses : []v1.NodeAddress {}},
160
+ },
161
+ expectedAddrs : nil ,
162
+ },
163
+ {
164
+ name : "no taints" ,
165
+ nodeName : "test-node" ,
166
+ node : & v1.Node {
167
+ ObjectMeta : metav1.ObjectMeta {Name : "test-node" },
168
+ Status : v1.NodeStatus {
169
+ Addresses : []v1.NodeAddress {
170
+ {Type : v1 .NodeInternalIP , Address : "10.0.0.1" },
171
+ {Type : v1 .NodeHostName , Address : "test-node" },
172
+ },
173
+ },
174
+ },
175
+ expectedAddrs : []v1.NodeAddress {
176
+ {Type : v1 .NodeInternalIP , Address : "10.0.0.1" },
177
+ {Type : v1 .NodeHostName , Address : "test-node" },
178
+ },
179
+ },
180
+ {
181
+ name : "other taints" ,
182
+ nodeName : "test-node" ,
183
+ node : & v1.Node {
184
+ ObjectMeta : metav1.ObjectMeta {Name : "test-node" },
185
+ Spec : v1.NodeSpec {
186
+ Taints : []v1.Taint {
187
+ {Key : "other-taint" , Effect : v1 .TaintEffectNoSchedule },
188
+ },
189
+ },
190
+ Status : v1.NodeStatus {
191
+ Addresses : []v1.NodeAddress {
192
+ {Type : v1 .NodeInternalIP , Address : "10.0.0.1" },
193
+ {Type : v1 .NodeHostName , Address : "test-node" },
194
+ },
195
+ },
196
+ },
197
+ expectedAddrs : []v1.NodeAddress {
198
+ {Type : v1 .NodeInternalIP , Address : "10.0.0.1" },
199
+ {Type : v1 .NodeHostName , Address : "test-node" },
200
+ },
201
+ },
202
+ {
203
+ name : "external cloud provider no taints" ,
204
+ nodeName : "test-node" ,
205
+ externalCloudProvider : true ,
206
+ node : & v1.Node {
207
+ ObjectMeta : metav1.ObjectMeta {Name : "test-node" },
208
+ Status : v1.NodeStatus {
209
+ Addresses : []v1.NodeAddress {
210
+ {Type : v1 .NodeInternalIP , Address : "10.0.0.1" },
211
+ {Type : v1 .NodeHostName , Address : "test-node" },
212
+ },
213
+ },
214
+ },
215
+ expectedAddrs : []v1.NodeAddress {
216
+ {Type : v1 .NodeInternalIP , Address : "10.0.0.1" },
217
+ {Type : v1 .NodeHostName , Address : "test-node" },
218
+ },
219
+ },
220
+ {
221
+ name : "no external cloud provider with external cloud provider taint" ,
222
+ nodeName : "test-node" ,
223
+ externalCloudProvider : false ,
224
+ node : & v1.Node {
225
+ ObjectMeta : metav1.ObjectMeta {Name : "test-node" },
226
+ Spec : v1.NodeSpec {
227
+ Taints : []v1.Taint {
228
+ {Key : cloudproviderapi .TaintExternalCloudProvider , Effect : v1 .TaintEffectNoSchedule },
229
+ },
230
+ },
231
+ Status : v1.NodeStatus {
232
+ Addresses : []v1.NodeAddress {
233
+ {Type : v1 .NodeInternalIP , Address : "10.0.0.1" },
234
+ {Type : v1 .NodeHostName , Address : "test-node" },
235
+ },
236
+ },
237
+ },
238
+ expectedAddrs : []v1.NodeAddress {
239
+ {Type : v1 .NodeInternalIP , Address : "10.0.0.1" },
240
+ {Type : v1 .NodeHostName , Address : "test-node" },
241
+ },
242
+ },
243
+ {
244
+ name : "external cloud provider taint" ,
245
+ nodeName : "test-node" ,
246
+ externalCloudProvider : true ,
247
+ node : & v1.Node {
248
+ ObjectMeta : metav1.ObjectMeta {Name : "test-node" },
249
+ Spec : v1.NodeSpec {
250
+ Taints : []v1.Taint {
251
+ {Key : cloudproviderapi .TaintExternalCloudProvider , Effect : v1 .TaintEffectNoSchedule },
252
+ },
253
+ },
254
+ Status : v1.NodeStatus {
255
+ Addresses : []v1.NodeAddress {
256
+ {Type : v1 .NodeInternalIP , Address : "10.0.0.1" },
257
+ {Type : v1 .NodeHostName , Address : "test-node" },
258
+ },
259
+ },
260
+ },
261
+ expectedAddrs : []v1.NodeAddress {
262
+ {Type : v1 .NodeInternalIP , Address : "10.0.0.1" },
263
+ {Type : v1 .NodeHostName , Address : "test-node" },
264
+ }},
265
+ {
266
+ name : "external cloud provider other taint" ,
267
+ nodeName : "test-node" ,
268
+ externalCloudProvider : true ,
269
+ node : & v1.Node {
270
+ ObjectMeta : metav1.ObjectMeta {Name : "test-node" },
271
+ Spec : v1.NodeSpec {
272
+ Taints : []v1.Taint {
273
+ {Key : "other-taint" , Effect : v1 .TaintEffectNoSchedule },
274
+ },
275
+ },
276
+ Status : v1.NodeStatus {
277
+ Addresses : []v1.NodeAddress {
278
+ {Type : v1 .NodeInternalIP , Address : "10.0.0.1" },
279
+ {Type : v1 .NodeHostName , Address : "test-node" },
280
+ },
281
+ },
282
+ },
283
+ expectedAddrs : []v1.NodeAddress {
284
+ {Type : v1 .NodeInternalIP , Address : "10.0.0.1" },
285
+ {Type : v1 .NodeHostName , Address : "test-node" },
286
+ },
287
+ },
288
+ }
289
+
290
+ for _ , tc := range testCases {
291
+ t .Run (tc .name , func (t * testing.T ) {
292
+ testKubelet := newTestKubelet (t , false /* controllerAttachDetachEnabled */ )
293
+ defer testKubelet .Cleanup ()
294
+ kl := testKubelet .kubelet
295
+ kl .nodeName = types .NodeName (tc .nodeName )
296
+ kl .externalCloudProvider = tc .externalCloudProvider
297
+ nodeLister := testNodeLister {}
298
+ if tc .node != nil {
299
+ nodeLister .nodes = append (nodeLister .nodes , tc .node )
300
+ }
301
+ kl .nodeLister = nodeLister
302
+ addrs := kl .getLastObservedNodeAddresses ()
303
+
304
+ if len (addrs ) != len (tc .expectedAddrs ) {
305
+ t .Errorf ("expected %d addresses, got %d" , len (tc .expectedAddrs ), len (addrs ))
306
+ } else {
307
+ for i := range addrs {
308
+ if addrs [i ] != tc .expectedAddrs [i ] {
309
+ t .Errorf ("expected address %v, got %v" , tc .expectedAddrs [i ], addrs [i ])
310
+ }
311
+ }
312
+ }
313
+ })
314
+ }
315
+ }
0 commit comments