Add missing unit test for resource resize policy defaulting
This commit is contained in:
		| @@ -33,6 +33,7 @@ import ( | |||||||
| 	featuregatetesting "k8s.io/component-base/featuregate/testing" | 	featuregatetesting "k8s.io/component-base/featuregate/testing" | ||||||
| 	"k8s.io/kubernetes/pkg/api/legacyscheme" | 	"k8s.io/kubernetes/pkg/api/legacyscheme" | ||||||
| 	corev1 "k8s.io/kubernetes/pkg/apis/core/v1" | 	corev1 "k8s.io/kubernetes/pkg/apis/core/v1" | ||||||
|  | 	"k8s.io/kubernetes/pkg/features" | ||||||
| 	utilpointer "k8s.io/utils/pointer" | 	utilpointer "k8s.io/utils/pointer" | ||||||
|  |  | ||||||
| 	// ensure types are installed | 	// ensure types are installed | ||||||
| @@ -1906,3 +1907,162 @@ func TestSetDefaultServiceInternalTrafficPolicy(t *testing.T) { | |||||||
| 		}) | 		}) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func TestSetDefaultResizePolicy(t *testing.T) { | ||||||
|  | 	// verify we default to NotRequired restart policy for resize when resources are specified | ||||||
|  | 	defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.InPlacePodVerticalScaling, true)() | ||||||
|  |  | ||||||
|  | 	for desc, tc := range map[string]struct { | ||||||
|  | 		testContainer        v1.Container | ||||||
|  | 		expectedResizePolicy []v1.ContainerResizePolicy | ||||||
|  | 	}{ | ||||||
|  | 		"CPU and memory limits are specified": { | ||||||
|  | 			testContainer: v1.Container{ | ||||||
|  | 				Resources: v1.ResourceRequirements{ | ||||||
|  | 					Limits: v1.ResourceList{ | ||||||
|  | 						v1.ResourceCPU:    resource.MustParse("100m"), | ||||||
|  | 						v1.ResourceMemory: resource.MustParse("200Mi"), | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 			expectedResizePolicy: []v1.ContainerResizePolicy{ | ||||||
|  | 				{ | ||||||
|  | 					ResourceName:  v1.ResourceCPU, | ||||||
|  | 					RestartPolicy: v1.NotRequired, | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					ResourceName:  v1.ResourceMemory, | ||||||
|  | 					RestartPolicy: v1.NotRequired, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 		}, | ||||||
|  | 		"CPU requests are specified": { | ||||||
|  | 			testContainer: v1.Container{ | ||||||
|  | 				Resources: v1.ResourceRequirements{ | ||||||
|  | 					Requests: v1.ResourceList{ | ||||||
|  | 						v1.ResourceCPU: resource.MustParse("100m"), | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 			expectedResizePolicy: []v1.ContainerResizePolicy{ | ||||||
|  | 				{ | ||||||
|  | 					ResourceName:  v1.ResourceCPU, | ||||||
|  | 					RestartPolicy: v1.NotRequired, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 		}, | ||||||
|  | 		"Memory limits are specified": { | ||||||
|  | 			testContainer: v1.Container{ | ||||||
|  | 				Resources: v1.ResourceRequirements{ | ||||||
|  | 					Limits: v1.ResourceList{ | ||||||
|  | 						v1.ResourceMemory: resource.MustParse("200Mi"), | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 			expectedResizePolicy: []v1.ContainerResizePolicy{ | ||||||
|  | 				{ | ||||||
|  | 					ResourceName:  v1.ResourceMemory, | ||||||
|  | 					RestartPolicy: v1.NotRequired, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 		}, | ||||||
|  | 		"No resources are specified": { | ||||||
|  | 			testContainer:        v1.Container{Name: "besteffort"}, | ||||||
|  | 			expectedResizePolicy: nil, | ||||||
|  | 		}, | ||||||
|  | 		"CPU and memory limits are specified with restartContainer resize policy for memory": { | ||||||
|  | 			testContainer: v1.Container{ | ||||||
|  | 				Resources: v1.ResourceRequirements{ | ||||||
|  | 					Limits: v1.ResourceList{ | ||||||
|  | 						v1.ResourceCPU:    resource.MustParse("100m"), | ||||||
|  | 						v1.ResourceMemory: resource.MustParse("200Mi"), | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 				ResizePolicy: []v1.ContainerResizePolicy{ | ||||||
|  | 					{ | ||||||
|  | 						ResourceName:  v1.ResourceMemory, | ||||||
|  | 						RestartPolicy: v1.RestartContainer, | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 			expectedResizePolicy: []v1.ContainerResizePolicy{ | ||||||
|  | 				{ | ||||||
|  | 					ResourceName:  v1.ResourceMemory, | ||||||
|  | 					RestartPolicy: v1.RestartContainer, | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					ResourceName:  v1.ResourceCPU, | ||||||
|  | 					RestartPolicy: v1.NotRequired, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 		}, | ||||||
|  | 		"CPU requests and memory limits are specified with restartContainer resize policy for CPU": { | ||||||
|  | 			testContainer: v1.Container{ | ||||||
|  | 				Resources: v1.ResourceRequirements{ | ||||||
|  | 					Limits: v1.ResourceList{ | ||||||
|  | 						v1.ResourceMemory: resource.MustParse("200Mi"), | ||||||
|  | 					}, | ||||||
|  | 					Requests: v1.ResourceList{ | ||||||
|  | 						v1.ResourceCPU: resource.MustParse("100m"), | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 				ResizePolicy: []v1.ContainerResizePolicy{ | ||||||
|  | 					{ | ||||||
|  | 						ResourceName:  v1.ResourceCPU, | ||||||
|  | 						RestartPolicy: v1.RestartContainer, | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 			expectedResizePolicy: []v1.ContainerResizePolicy{ | ||||||
|  | 				{ | ||||||
|  | 					ResourceName:  v1.ResourceCPU, | ||||||
|  | 					RestartPolicy: v1.RestartContainer, | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					ResourceName:  v1.ResourceMemory, | ||||||
|  | 					RestartPolicy: v1.NotRequired, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 		}, | ||||||
|  | 		"CPU and memory requests are specified with restartContainer resize policy for both": { | ||||||
|  | 			testContainer: v1.Container{ | ||||||
|  | 				Resources: v1.ResourceRequirements{ | ||||||
|  | 					Requests: v1.ResourceList{ | ||||||
|  | 						v1.ResourceCPU:    resource.MustParse("100m"), | ||||||
|  | 						v1.ResourceMemory: resource.MustParse("200Mi"), | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 				ResizePolicy: []v1.ContainerResizePolicy{ | ||||||
|  | 					{ | ||||||
|  | 						ResourceName:  v1.ResourceCPU, | ||||||
|  | 						RestartPolicy: v1.RestartContainer, | ||||||
|  | 					}, | ||||||
|  | 					{ | ||||||
|  | 						ResourceName:  v1.ResourceMemory, | ||||||
|  | 						RestartPolicy: v1.RestartContainer, | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 			expectedResizePolicy: []v1.ContainerResizePolicy{ | ||||||
|  | 				{ | ||||||
|  | 					ResourceName:  v1.ResourceCPU, | ||||||
|  | 					RestartPolicy: v1.RestartContainer, | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					ResourceName:  v1.ResourceMemory, | ||||||
|  | 					RestartPolicy: v1.RestartContainer, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 		}, | ||||||
|  | 	} { | ||||||
|  | 		t.Run(desc, func(t *testing.T) { | ||||||
|  | 			testPod := v1.Pod{} | ||||||
|  | 			testPod.Spec.Containers = append(testPod.Spec.Containers, tc.testContainer) | ||||||
|  | 			output := roundTrip(t, runtime.Object(&testPod)) | ||||||
|  | 			pod2 := output.(*v1.Pod) | ||||||
|  | 			if diff.ObjectDiff(pod2.Spec.Containers[0].ResizePolicy, tc.expectedResizePolicy) != "" { | ||||||
|  | 				t.Errorf("expected resize policy %+v, but got %+v", tc.expectedResizePolicy, pod2.Spec.Containers[0].ResizePolicy) | ||||||
|  | 			} | ||||||
|  | 		}) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 vinay kulkarni
					vinay kulkarni