@@ -22,6 +22,7 @@ import (
22
22
"io/ioutil"
23
23
"os"
24
24
"path/filepath"
25
+ "reflect"
25
26
"sort"
26
27
"testing"
27
28
@@ -2489,3 +2490,126 @@ func TestPodResourcesAreReclaimed(t *testing.T) {
2489
2490
})
2490
2491
}
2491
2492
}
2493
+
2494
+ func TestGenerateAPIPodStatusHostNetworkPodIPs (t * testing.T ) {
2495
+ testcases := []struct {
2496
+ name string
2497
+ dualStack bool
2498
+ nodeAddresses []v1.NodeAddress
2499
+ criPodIPs []string
2500
+ podIPs []v1.PodIP
2501
+ }{
2502
+ {
2503
+ name : "Simple" ,
2504
+ nodeAddresses : []v1.NodeAddress {
2505
+ {Type : v1 .NodeInternalIP , Address : "10.0.0.1" },
2506
+ },
2507
+ podIPs : []v1.PodIP {
2508
+ {IP : "10.0.0.1" },
2509
+ },
2510
+ },
2511
+ {
2512
+ name : "InternalIP is preferred over ExternalIP" ,
2513
+ nodeAddresses : []v1.NodeAddress {
2514
+ {Type : v1 .NodeExternalIP , Address : "192.168.0.1" },
2515
+ {Type : v1 .NodeInternalIP , Address : "10.0.0.1" },
2516
+ },
2517
+ podIPs : []v1.PodIP {
2518
+ {IP : "10.0.0.1" },
2519
+ },
2520
+ },
2521
+ {
2522
+ name : "Dual-stack addresses are ignored in single-stack cluster" ,
2523
+ nodeAddresses : []v1.NodeAddress {
2524
+ {Type : v1 .NodeInternalIP , Address : "10.0.0.1" },
2525
+ {Type : v1 .NodeInternalIP , Address : "fd01::1234" },
2526
+ },
2527
+ podIPs : []v1.PodIP {
2528
+ {IP : "10.0.0.1" },
2529
+ },
2530
+ },
2531
+ {
2532
+ name : "Single-stack addresses in dual-stack cluster" ,
2533
+ nodeAddresses : []v1.NodeAddress {
2534
+ {Type : v1 .NodeInternalIP , Address : "10.0.0.1" },
2535
+ },
2536
+ dualStack : true ,
2537
+ podIPs : []v1.PodIP {
2538
+ {IP : "10.0.0.1" },
2539
+ },
2540
+ },
2541
+ {
2542
+ name : "Multiple single-stack addresses in dual-stack cluster" ,
2543
+ nodeAddresses : []v1.NodeAddress {
2544
+ {Type : v1 .NodeInternalIP , Address : "10.0.0.1" },
2545
+ {Type : v1 .NodeInternalIP , Address : "10.0.0.2" },
2546
+ {Type : v1 .NodeExternalIP , Address : "192.168.0.1" },
2547
+ },
2548
+ dualStack : true ,
2549
+ podIPs : []v1.PodIP {
2550
+ {IP : "10.0.0.1" },
2551
+ },
2552
+ },
2553
+ {
2554
+ name : "Dual-stack addresses in dual-stack cluster" ,
2555
+ nodeAddresses : []v1.NodeAddress {
2556
+ {Type : v1 .NodeInternalIP , Address : "10.0.0.1" },
2557
+ {Type : v1 .NodeInternalIP , Address : "fd01::1234" },
2558
+ },
2559
+ dualStack : true ,
2560
+ podIPs : []v1.PodIP {
2561
+ {IP : "10.0.0.1" },
2562
+ {IP : "fd01::1234" },
2563
+ },
2564
+ },
2565
+ {
2566
+ name : "CRI PodIPs override NodeAddresses" ,
2567
+ nodeAddresses : []v1.NodeAddress {
2568
+ {Type : v1 .NodeInternalIP , Address : "10.0.0.1" },
2569
+ {Type : v1 .NodeInternalIP , Address : "fd01::1234" },
2570
+ },
2571
+ dualStack : true ,
2572
+ criPodIPs : []string {"192.168.0.1" },
2573
+ podIPs : []v1.PodIP {
2574
+ {IP : "192.168.0.1" },
2575
+ },
2576
+ },
2577
+ }
2578
+
2579
+ for _ , tc := range testcases {
2580
+ t .Run (tc .name , func (t * testing.T ) {
2581
+ testKubelet := newTestKubelet (t , false /* controllerAttachDetachEnabled */ )
2582
+ defer testKubelet .Cleanup ()
2583
+ kl := testKubelet .kubelet
2584
+
2585
+ defer featuregatetesting .SetFeatureGateDuringTest (t , utilfeature .DefaultFeatureGate , features .IPv6DualStack , tc .dualStack )()
2586
+
2587
+ kl .nodeLister = testNodeLister {nodes : []* v1.Node {
2588
+ {
2589
+ ObjectMeta : metav1.ObjectMeta {Name : string (kl .nodeName )},
2590
+ Status : v1.NodeStatus {
2591
+ Addresses : tc .nodeAddresses ,
2592
+ },
2593
+ },
2594
+ }}
2595
+
2596
+ pod := podWithUIDNameNs ("12345" , "test-pod" , "test-namespace" )
2597
+ pod .Spec .HostNetwork = true
2598
+
2599
+ criStatus := & kubecontainer.PodStatus {
2600
+ ID : pod .UID ,
2601
+ Name : pod .Name ,
2602
+ Namespace : pod .Namespace ,
2603
+ IPs : tc .criPodIPs ,
2604
+ }
2605
+
2606
+ status := kl .generateAPIPodStatus (pod , criStatus )
2607
+ if ! reflect .DeepEqual (status .PodIPs , tc .podIPs ) {
2608
+ t .Fatalf ("Expected PodIPs %#v, got %#v" , tc .podIPs , status .PodIPs )
2609
+ }
2610
+ if tc .criPodIPs == nil && status .HostIP != status .PodIPs [0 ].IP {
2611
+ t .Fatalf ("Expected HostIP %q to equal PodIPs[0].IP %q" , status .HostIP , status .PodIPs [0 ].IP )
2612
+ }
2613
+ })
2614
+ }
2615
+ }
0 commit comments