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  }