1
16
17 package metricsutil
18
19 import (
20 "testing"
21
22 corev1 "k8s.io/api/core/v1"
23 "k8s.io/apimachinery/pkg/api/resource"
24 "k8s.io/metrics/pkg/apis/metrics"
25 )
26
27 func getResourceQuantity(t *testing.T, quantityStr string) resource.Quantity {
28 t.Helper()
29 var err error
30 quantity, err := resource.ParseQuantity("0")
31 if err != nil {
32 t.Errorf("failed when parsing 0 into resource.Quantity")
33 }
34 if quantityStr != "" {
35 quantity, err = resource.ParseQuantity(quantityStr)
36 if err != nil {
37 t.Errorf("%s is not a valid resource value", quantityStr)
38 }
39 }
40 return quantity
41 }
42
43 func addContainerMetricsToPodMetrics(t *testing.T, podMetrics *metrics.PodMetrics, cpuUsage, memUsage string) {
44 t.Helper()
45 containerMetrics := metrics.ContainerMetrics{
46 Usage: corev1.ResourceList{},
47 }
48
49 containerMetrics.Usage["cpu"] = getResourceQuantity(t, cpuUsage)
50 containerMetrics.Usage["memory"] = getResourceQuantity(t, memUsage)
51
52 podMetrics.Containers = append(podMetrics.Containers, containerMetrics)
53 }
54
55 func initResourceAdder() *ResourceAdder {
56 resources := []corev1.ResourceName{
57 corev1.ResourceCPU,
58 corev1.ResourceMemory,
59 }
60 return NewResourceAdder(resources)
61 }
62
63 func TestAddPodMetrics(t *testing.T) {
64 resourceAdder := initResourceAdder()
65
66 tests := []struct {
67 name string
68 cpuUsage string
69 memUsage string
70 expectedCpuUsage resource.Quantity
71 expectedMemUsage resource.Quantity
72 }{
73 {
74 name: "initial value",
75 cpuUsage: "0",
76 memUsage: "0",
77 expectedCpuUsage: getResourceQuantity(t, "0"),
78 expectedMemUsage: getResourceQuantity(t, "0"),
79 },
80 {
81 name: "add first container metric",
82 cpuUsage: "1m",
83 memUsage: "10Mi",
84 expectedCpuUsage: getResourceQuantity(t, "1m"),
85 expectedMemUsage: getResourceQuantity(t, "10Mi"),
86 },
87 {
88 name: "add second container metric",
89 cpuUsage: "5m",
90 memUsage: "25Mi",
91 expectedCpuUsage: getResourceQuantity(t, "6m"),
92 expectedMemUsage: getResourceQuantity(t, "35Mi"),
93 },
94 {
95 name: "add third container zero metric",
96 cpuUsage: "0m",
97 memUsage: "0Mi",
98 expectedCpuUsage: getResourceQuantity(t, "6m"),
99 expectedMemUsage: getResourceQuantity(t, "35Mi"),
100 },
101 }
102 for _, test := range tests {
103 t.Run(test.name, func(t *testing.T) {
104 podMetrics := metrics.PodMetrics{}
105 addContainerMetricsToPodMetrics(t, &podMetrics, test.cpuUsage, test.memUsage)
106
107 resourceAdder.AddPodMetrics(&podMetrics)
108 cpuUsage := resourceAdder.total["cpu"]
109 memUsage := resourceAdder.total["memory"]
110
111 if !test.expectedCpuUsage.Equal(cpuUsage) {
112 t.Errorf("expecting cpu usage %s but getting %s", test.expectedCpuUsage.String(), cpuUsage.String())
113 }
114 if !test.expectedMemUsage.Equal(memUsage) {
115 t.Errorf("expecting memeory usage %s but getting %s", test.expectedMemUsage.String(), memUsage.String())
116 }
117 })
118 }
119 }
120
View as plain text