@@ -63,12 +63,14 @@ func TestNodeAddress(t *testing.T) {
63
63
cloudProviderExternal
64
64
cloudProviderNone
65
65
)
66
+
66
67
existingNodeAddress := v1.NodeAddress {Address : "10.1.1.2" }
67
68
cases := []struct {
68
69
name string
69
70
hostnameOverride bool
70
71
nodeIP net.IP
71
72
secondaryNodeIP net.IP
73
+ resolvedIP net.IP
72
74
cloudProviderType cloudProviderType
73
75
nodeAddresses []v1.NodeAddress
74
76
expectedAddresses []v1.NodeAddress
@@ -234,17 +236,120 @@ func TestNodeAddress(t *testing.T) {
234
236
shouldError : false ,
235
237
},
236
238
{
237
- name : "cloud provider is external and nodeIP unspecified" ,
239
+ name : "no cloud provider and nodeIP IPv4 unspecified" ,
240
+ nodeIP : netutils .ParseIPSloppy ("0.0.0.0" ),
241
+ resolvedIP : netutils .ParseIPSloppy ("10.0.0.2" ),
242
+ nodeAddresses : []v1.NodeAddress {},
243
+ cloudProviderType : cloudProviderNone ,
244
+ expectedAddresses : []v1.NodeAddress {
245
+ {Type : v1 .NodeInternalIP , Address : "10.0.0.2" },
246
+ {Type : v1 .NodeHostName , Address : testKubeletHostname },
247
+ },
248
+ shouldError : false ,
249
+ },
250
+ {
251
+ name : "no cloud provider and nodeIP IPv6 unspecified" ,
252
+ nodeIP : netutils .ParseIPSloppy ("::" ),
253
+ resolvedIP : netutils .ParseIPSloppy ("2001:db2::2" ),
254
+ nodeAddresses : []v1.NodeAddress {},
255
+ cloudProviderType : cloudProviderNone ,
256
+ expectedAddresses : []v1.NodeAddress {
257
+ {Type : v1 .NodeInternalIP , Address : "2001:db2::2" },
258
+ {Type : v1 .NodeHostName , Address : testKubeletHostname },
259
+ },
260
+ shouldError : false ,
261
+ },
262
+ {
263
+ name : "legacy cloud provider and nodeIP IPv4 unspecified" ,
264
+ nodeIP : netutils .ParseIPSloppy ("0.0.0.0" ),
265
+ resolvedIP : netutils .ParseIPSloppy ("10.0.0.2" ),
266
+ nodeAddresses : []v1.NodeAddress {},
267
+ cloudProviderType : cloudProviderLegacy ,
268
+ expectedAddresses : []v1.NodeAddress {
269
+ {Type : v1 .NodeHostName , Address : testKubeletHostname },
270
+ },
271
+ shouldError : true ,
272
+ },
273
+ {
274
+ name : "legacy cloud provider and nodeIP IPv6 unspecified" ,
275
+ nodeIP : netutils .ParseIPSloppy ("::" ),
276
+ resolvedIP : netutils .ParseIPSloppy ("2001:db2::2" ),
277
+ nodeAddresses : []v1.NodeAddress {},
278
+ cloudProviderType : cloudProviderLegacy ,
279
+ expectedAddresses : []v1.NodeAddress {
280
+ {Type : v1 .NodeHostName , Address : testKubeletHostname },
281
+ },
282
+ shouldError : true ,
283
+ },
284
+ {
285
+ name : "cloud provider is external and nodeIP IPv4 unspecified" ,
286
+ nodeIP : netutils .ParseIPSloppy ("0.0.0.0" ),
287
+ resolvedIP : netutils .ParseIPSloppy ("10.0.0.2" ),
288
+ nodeAddresses : []v1.NodeAddress {},
289
+ cloudProviderType : cloudProviderExternal ,
290
+ expectedAddresses : []v1.NodeAddress {
291
+ {Type : v1 .NodeInternalIP , Address : "10.0.0.2" },
292
+ {Type : v1 .NodeHostName , Address : testKubeletHostname },
293
+ },
294
+ shouldError : false ,
295
+ },
296
+ {
297
+ name : "cloud provider is external and nodeIP IPv6 unspecified" ,
238
298
nodeIP : netutils .ParseIPSloppy ("::" ),
299
+ resolvedIP : netutils .ParseIPSloppy ("2001:db2::2" ),
239
300
nodeAddresses : []v1.NodeAddress {},
240
301
cloudProviderType : cloudProviderExternal ,
241
302
expectedAddresses : []v1.NodeAddress {
303
+ {Type : v1 .NodeInternalIP , Address : "2001:db2::2" },
242
304
{Type : v1 .NodeHostName , Address : testKubeletHostname },
243
305
},
244
306
shouldError : false ,
245
307
},
246
308
{
247
- name : "cloud provider is external and no nodeIP" ,
309
+ name : "no cloud provider and no nodeIP resolve IPv4" ,
310
+ resolvedIP : netutils .ParseIPSloppy ("10.0.0.2" ),
311
+ nodeAddresses : []v1.NodeAddress {},
312
+ cloudProviderType : cloudProviderNone ,
313
+ expectedAddresses : []v1.NodeAddress {
314
+ {Type : v1 .NodeInternalIP , Address : "10.0.0.2" },
315
+ {Type : v1 .NodeHostName , Address : testKubeletHostname },
316
+ },
317
+ shouldError : false ,
318
+ },
319
+ {
320
+ name : "no cloud provider and no nodeIP resolve IPv6" ,
321
+ resolvedIP : netutils .ParseIPSloppy ("2001:db2::2" ),
322
+ nodeAddresses : []v1.NodeAddress {},
323
+ cloudProviderType : cloudProviderNone ,
324
+ expectedAddresses : []v1.NodeAddress {
325
+ {Type : v1 .NodeInternalIP , Address : "2001:db2::2" },
326
+ {Type : v1 .NodeHostName , Address : testKubeletHostname },
327
+ },
328
+ shouldError : false ,
329
+ },
330
+ {
331
+ name : "legacy cloud provider and no nodeIP" ,
332
+ resolvedIP : netutils .ParseIPSloppy ("10.0.0.2" ),
333
+ nodeAddresses : []v1.NodeAddress {},
334
+ cloudProviderType : cloudProviderLegacy ,
335
+ expectedAddresses : []v1.NodeAddress {
336
+ {Type : v1 .NodeHostName , Address : testKubeletHostname },
337
+ },
338
+ shouldError : true ,
339
+ },
340
+ {
341
+ name : "cloud provider is external and no nodeIP resolve IPv4" ,
342
+ resolvedIP : netutils .ParseIPSloppy ("10.0.0.2" ),
343
+ nodeAddresses : []v1.NodeAddress {},
344
+ cloudProviderType : cloudProviderExternal ,
345
+ expectedAddresses : []v1.NodeAddress {
346
+ {Type : v1 .NodeHostName , Address : testKubeletHostname },
347
+ },
348
+ shouldError : false ,
349
+ },
350
+ {
351
+ name : "cloud provider is external and no nodeIP resolve IPv6" ,
352
+ resolvedIP : netutils .ParseIPSloppy ("2001:db2::2" ),
248
353
nodeAddresses : []v1.NodeAddress {},
249
354
cloudProviderType : cloudProviderExternal ,
250
355
expectedAddresses : []v1.NodeAddress {
@@ -638,6 +743,20 @@ func TestNodeAddress(t *testing.T) {
638
743
return testCase .nodeAddresses , nil
639
744
}
640
745
746
+ net .DefaultResolver = & net.Resolver {
747
+ PreferGo : true ,
748
+ Dial : func (ctx context.Context , network string , address string ) (net.Conn , error ) {
749
+ return nil , fmt .Errorf ("error" )
750
+ },
751
+ }
752
+ defer func () {
753
+ net .DefaultResolver = & net.Resolver {}
754
+ }()
755
+
756
+ resolveAddressFunc := func (net.IP ) (net.IP , error ) {
757
+ return testCase .resolvedIP , nil
758
+ }
759
+
641
760
// cloud provider is expected to be nil if external provider is set or there is no cloud provider
642
761
var cloud cloudprovider.Interface
643
762
if testCase .cloudProviderType == cloudProviderLegacy {
@@ -659,7 +778,9 @@ func TestNodeAddress(t *testing.T) {
659
778
testCase .hostnameOverride ,
660
779
testCase .cloudProviderType == cloudProviderExternal ,
661
780
cloud ,
662
- nodeAddressesFunc )
781
+ nodeAddressesFunc ,
782
+ resolveAddressFunc ,
783
+ )
663
784
664
785
// call setter on existing node
665
786
err := setter (ctx , existingNode )
@@ -739,6 +860,9 @@ func TestNodeAddress_NoCloudProvider(t *testing.T) {
739
860
nodeAddressesFunc := func () ([]v1.NodeAddress , error ) {
740
861
return nil , fmt .Errorf ("not reached" )
741
862
}
863
+ resolvedAddressesFunc := func (net.IP ) (net.IP , error ) {
864
+ return nil , fmt .Errorf ("not reached" )
865
+ }
742
866
743
867
// construct setter
744
868
setter := NodeAddress (testCase .nodeIPs ,
@@ -747,7 +871,8 @@ func TestNodeAddress_NoCloudProvider(t *testing.T) {
747
871
false , // hostnameOverridden
748
872
false , // externalCloudProvider
749
873
nil , // cloud
750
- nodeAddressesFunc )
874
+ nodeAddressesFunc ,
875
+ resolvedAddressesFunc )
751
876
752
877
// call setter on existing node
753
878
err := setter (ctx , existingNode )
0 commit comments