github.com/gocrane/crane@v0.11.0/pkg/utils/pod_test.go (about) 1 package utils 2 3 import ( 4 "testing" 5 6 v1 "k8s.io/api/core/v1" 7 "k8s.io/apimachinery/pkg/api/resource" 8 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 9 ) 10 11 func TestCalculatePodRequests(t *testing.T) { 12 pods := []v1.Pod{ 13 { 14 ObjectMeta: metav1.ObjectMeta{ 15 Name: "pod1", 16 }, 17 Spec: v1.PodSpec{ 18 Containers: []v1.Container{{ 19 Name: "container1", 20 Resources: v1.ResourceRequirements{ 21 Requests: map[v1.ResourceName]resource.Quantity{ 22 v1.ResourceCPU: *resource.NewQuantity(1, resource.DecimalSI), 23 v1.ResourceMemory: *resource.NewQuantity(10, resource.DecimalSI), 24 }, 25 }, 26 }, { 27 Name: "container2", 28 Resources: v1.ResourceRequirements{ 29 Requests: map[v1.ResourceName]resource.Quantity{ 30 v1.ResourceCPU: *resource.NewQuantity(1, resource.DecimalSI), 31 v1.ResourceMemory: *resource.NewQuantity(10, resource.DecimalSI), 32 }, 33 }, 34 }}, 35 }, 36 }, 37 { 38 ObjectMeta: metav1.ObjectMeta{ 39 Name: "pod2", 40 }, 41 Spec: v1.PodSpec{ 42 Containers: []v1.Container{{ 43 Name: "container1", 44 Resources: v1.ResourceRequirements{ 45 Requests: map[v1.ResourceName]resource.Quantity{ 46 v1.ResourceCPU: *resource.NewQuantity(2, resource.DecimalSI), 47 v1.ResourceMemory: *resource.NewQuantity(20, resource.DecimalSI), 48 }, 49 }, 50 }, { 51 Name: "container2", 52 Resources: v1.ResourceRequirements{ 53 Requests: map[v1.ResourceName]resource.Quantity{ 54 v1.ResourceCPU: *resource.NewQuantity(2, resource.DecimalSI), 55 v1.ResourceMemory: *resource.NewQuantity(20, resource.DecimalSI), 56 }, 57 }, 58 }}, 59 }, 60 }, 61 } 62 63 tests := []struct { 64 description string 65 resource v1.ResourceName 66 expect int64 67 }{ 68 { 69 description: "calculate cpu request total", 70 resource: v1.ResourceCPU, 71 expect: 6000, 72 }, 73 { 74 description: "calculate memory request total", 75 resource: v1.ResourceMemory, 76 expect: 60000, 77 }, 78 } 79 80 for _, test := range tests { 81 requests, err := CalculatePodRequests(pods, test.resource) 82 if err != nil { 83 t.Errorf("Failed to calculatePodRequests: %v", err) 84 } 85 if requests != test.expect { 86 t.Errorf("expect requests %d actual requests %d", test.expect, requests) 87 } 88 } 89 90 } 91 92 func TestCalculatePodTemplateRequests(t *testing.T) { 93 podTemplate := &v1.PodTemplateSpec{ 94 ObjectMeta: metav1.ObjectMeta{ 95 Name: "podTemplateTest", 96 }, 97 Spec: v1.PodSpec{ 98 Containers: []v1.Container{{ 99 Name: "container1", 100 Resources: v1.ResourceRequirements{ 101 Requests: map[v1.ResourceName]resource.Quantity{ 102 v1.ResourceCPU: *resource.NewQuantity(1, resource.DecimalSI), 103 v1.ResourceMemory: *resource.NewQuantity(10, resource.DecimalSI), 104 }, 105 }, 106 }, { 107 Name: "container2", 108 Resources: v1.ResourceRequirements{ 109 Requests: map[v1.ResourceName]resource.Quantity{ 110 v1.ResourceCPU: *resource.NewQuantity(1, resource.DecimalSI), 111 v1.ResourceMemory: *resource.NewQuantity(10, resource.DecimalSI), 112 }, 113 }, 114 }}, 115 }, 116 } 117 118 tests := []struct { 119 description string 120 resource v1.ResourceName 121 expect int64 122 }{ 123 { 124 description: "calculate cpu request total", 125 resource: v1.ResourceCPU, 126 expect: 2000, 127 }, 128 { 129 description: "calculate memory request total", 130 resource: v1.ResourceMemory, 131 expect: 20000, 132 }, 133 } 134 135 for _, test := range tests { 136 requests, err := CalculatePodTemplateRequests(podTemplate, test.resource) 137 if err != nil { 138 t.Errorf("Failed to CalculatePodTemplateRequests: %v", err) 139 } 140 if requests != test.expect { 141 t.Errorf("expect requests %d actual requests %d", test.expect, requests) 142 } 143 } 144 145 }