mirror of
https://github.com/optim-enterprises-bv/kubernetes.git
synced 2025-12-02 14:23:54 +00:00
Add support to size memory backed volumes
This commit is contained in:
@@ -25,7 +25,7 @@ import (
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"k8s.io/api/core/v1"
|
||||
v1 "k8s.io/api/core/v1"
|
||||
"k8s.io/apimachinery/pkg/api/resource"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/types"
|
||||
@@ -918,3 +918,109 @@ func TestGetPageSize(t *testing.T) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestCalculateEmptyDirMemorySize(t *testing.T) {
|
||||
testCases := map[string]struct {
|
||||
pod *v1.Pod
|
||||
nodeAllocatableMemory resource.Quantity
|
||||
emptyDirSizeLimit resource.Quantity
|
||||
expectedResult resource.Quantity
|
||||
featureGateEnabled bool
|
||||
}{
|
||||
"SizeMemoryBackedVolumesDisabled": {
|
||||
pod: &v1.Pod{
|
||||
Spec: v1.PodSpec{
|
||||
Containers: []v1.Container{
|
||||
{
|
||||
Resources: v1.ResourceRequirements{
|
||||
Requests: v1.ResourceList{
|
||||
v1.ResourceName("memory"): resource.MustParse("10Gi"),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
nodeAllocatableMemory: resource.MustParse("16Gi"),
|
||||
emptyDirSizeLimit: resource.MustParse("1Gi"),
|
||||
expectedResult: resource.MustParse("0"),
|
||||
featureGateEnabled: false,
|
||||
},
|
||||
"EmptyDirLocalLimit": {
|
||||
pod: &v1.Pod{
|
||||
Spec: v1.PodSpec{
|
||||
Containers: []v1.Container{
|
||||
{
|
||||
Resources: v1.ResourceRequirements{
|
||||
Limits: v1.ResourceList{
|
||||
v1.ResourceName("memory"): resource.MustParse("10Gi"),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
nodeAllocatableMemory: resource.MustParse("16Gi"),
|
||||
emptyDirSizeLimit: resource.MustParse("1Gi"),
|
||||
expectedResult: resource.MustParse("1Gi"),
|
||||
featureGateEnabled: true,
|
||||
},
|
||||
"PodLocalLimit": {
|
||||
pod: &v1.Pod{
|
||||
Spec: v1.PodSpec{
|
||||
Containers: []v1.Container{
|
||||
{
|
||||
Resources: v1.ResourceRequirements{
|
||||
Limits: v1.ResourceList{
|
||||
v1.ResourceName("memory"): resource.MustParse("10Gi"),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
nodeAllocatableMemory: resource.MustParse("16Gi"),
|
||||
emptyDirSizeLimit: resource.MustParse("0"),
|
||||
expectedResult: resource.MustParse("10Gi"),
|
||||
featureGateEnabled: true,
|
||||
},
|
||||
"NodeAllocatableLimit": {
|
||||
pod: &v1.Pod{
|
||||
Spec: v1.PodSpec{
|
||||
Containers: []v1.Container{
|
||||
{
|
||||
Resources: v1.ResourceRequirements{
|
||||
Requests: v1.ResourceList{
|
||||
v1.ResourceName("memory"): resource.MustParse("10Gi"),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
nodeAllocatableMemory: resource.MustParse("16Gi"),
|
||||
emptyDirSizeLimit: resource.MustParse("0"),
|
||||
expectedResult: resource.MustParse("16Gi"),
|
||||
featureGateEnabled: true,
|
||||
},
|
||||
}
|
||||
|
||||
for testCaseName, testCase := range testCases {
|
||||
t.Run(testCaseName, func(t *testing.T) {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.SizeMemoryBackedVolumes, testCase.featureGateEnabled)()
|
||||
spec := &volume.Spec{
|
||||
Volume: &v1.Volume{
|
||||
VolumeSource: v1.VolumeSource{
|
||||
EmptyDir: &v1.EmptyDirVolumeSource{
|
||||
Medium: v1.StorageMediumMemory,
|
||||
SizeLimit: &testCase.emptyDirSizeLimit,
|
||||
},
|
||||
},
|
||||
}}
|
||||
result := calculateEmptyDirMemorySize(&testCase.nodeAllocatableMemory, spec, testCase.pod)
|
||||
if result.Cmp(testCase.expectedResult) != 0 {
|
||||
t.Errorf("%s: Unexpected result. Expected %v, got %v", testCaseName, testCase.expectedResult.String(), result.String())
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user