@@ -24,6 +24,7 @@ import (
2424 "testing"
2525
2626 "k8s.io/api/core/v1"
27+ "k8s.io/apimachinery/pkg/api/resource"
2728 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2829 "k8s.io/apimachinery/pkg/types"
2930 utiltesting "k8s.io/client-go/util/testing"
@@ -118,7 +119,22 @@ func doTestPlugin(t *testing.T, config pluginTestConfig) {
118119
119120 physicalMounter = mount.FakeMounter {}
120121 mountDetector = fakeMountDetector {}
121- pod = & v1.Pod {ObjectMeta : metav1.ObjectMeta {UID : types .UID ("poduid" )}}
122+ pod = & v1.Pod {
123+ ObjectMeta : metav1.ObjectMeta {
124+ UID : types .UID ("poduid" ),
125+ },
126+ Spec : v1.PodSpec {
127+ Containers : []v1.Container {
128+ {
129+ Resources : v1.ResourceRequirements {
130+ Requests : v1.ResourceList {
131+ v1 .ResourceName ("hugepages-2Mi" ): resource .MustParse ("100Mi" ),
132+ },
133+ },
134+ },
135+ },
136+ },
137+ }
122138 )
123139
124140 if config .idempotent {
@@ -285,3 +301,141 @@ func TestMetrics(t *testing.T) {
285301 t .Errorf ("Expected Available to be greater than 0" )
286302 }
287303}
304+
305+ func TestGetHugePagesMountOptions (t * testing.T ) {
306+ testCases := map [string ]struct {
307+ pod * v1.Pod
308+ shouldFail bool
309+ expectedResult string
310+ }{
311+ "testWithProperValues" : {
312+ pod : & v1.Pod {
313+ Spec : v1.PodSpec {
314+ Containers : []v1.Container {
315+ {
316+ Resources : v1.ResourceRequirements {
317+ Requests : v1.ResourceList {
318+ v1 .ResourceName ("hugepages-2Mi" ): resource .MustParse ("100Mi" ),
319+ },
320+ },
321+ },
322+ },
323+ },
324+ },
325+ shouldFail : false ,
326+ expectedResult : "pageSize=2Mi" ,
327+ },
328+ "testWithProperValuesAndDifferentPageSize" : {
329+ pod : & v1.Pod {
330+ Spec : v1.PodSpec {
331+ Containers : []v1.Container {
332+ {
333+ Resources : v1.ResourceRequirements {
334+ Requests : v1.ResourceList {
335+ v1 .ResourceName ("hugepages-1Gi" ): resource .MustParse ("2Gi" ),
336+ },
337+ },
338+ },
339+ {
340+ Resources : v1.ResourceRequirements {
341+ Requests : v1.ResourceList {
342+ v1 .ResourceName ("hugepages-1Gi" ): resource .MustParse ("4Gi" ),
343+ },
344+ },
345+ },
346+ },
347+ },
348+ },
349+ shouldFail : false ,
350+ expectedResult : "pageSize=1Gi" ,
351+ },
352+ "InitContainerAndContainerHasProperValues" : {
353+ pod : & v1.Pod {
354+ Spec : v1.PodSpec {
355+ InitContainers : []v1.Container {
356+ {
357+ Resources : v1.ResourceRequirements {
358+ Requests : v1.ResourceList {
359+ v1 .ResourceName ("hugepages-1Gi" ): resource .MustParse ("2Gi" ),
360+ },
361+ },
362+ },
363+ {
364+ Resources : v1.ResourceRequirements {
365+ Requests : v1.ResourceList {
366+ v1 .ResourceName ("hugepages-1Gi" ): resource .MustParse ("4Gi" ),
367+ },
368+ },
369+ },
370+ },
371+ },
372+ },
373+ shouldFail : false ,
374+ expectedResult : "pageSize=1Gi" ,
375+ },
376+ "InitContainerAndContainerHasDifferentPageSizes" : {
377+ pod : & v1.Pod {
378+ Spec : v1.PodSpec {
379+ InitContainers : []v1.Container {
380+ {
381+ Resources : v1.ResourceRequirements {
382+ Requests : v1.ResourceList {
383+ v1 .ResourceName ("hugepages-2Mi" ): resource .MustParse ("2Gi" ),
384+ },
385+ },
386+ },
387+ {
388+ Resources : v1.ResourceRequirements {
389+ Requests : v1.ResourceList {
390+ v1 .ResourceName ("hugepages-1Gi" ): resource .MustParse ("4Gi" ),
391+ },
392+ },
393+ },
394+ },
395+ },
396+ },
397+ shouldFail : true ,
398+ expectedResult : "" ,
399+ },
400+ "ContainersWithMultiplePageSizes" : {
401+ pod : & v1.Pod {
402+ Spec : v1.PodSpec {
403+ Containers : []v1.Container {
404+ {
405+ Resources : v1.ResourceRequirements {
406+ Requests : v1.ResourceList {
407+ v1 .ResourceName ("hugepages-1Gi" ): resource .MustParse ("2Gi" ),
408+ },
409+ },
410+ },
411+ {
412+ Resources : v1.ResourceRequirements {
413+ Requests : v1.ResourceList {
414+ v1 .ResourceName ("hugepages-2Mi" ): resource .MustParse ("100Mi" ),
415+ },
416+ },
417+ },
418+ },
419+ },
420+ },
421+ shouldFail : true ,
422+ expectedResult : "" ,
423+ },
424+ "PodWithNoHugePagesRequest" : {
425+ pod : & v1.Pod {},
426+ shouldFail : true ,
427+ expectedResult : "" ,
428+ },
429+ }
430+
431+ for testCaseName , testCase := range testCases {
432+ value , err := getPageSizeMountOptionFromPod (testCase .pod )
433+ if testCase .shouldFail && err == nil {
434+ t .Errorf ("Expected an error in %v" , testCaseName )
435+ } else if ! testCase .shouldFail && err != nil {
436+ t .Errorf ("Unexpected error in %v, got %v" , testCaseName , err )
437+ } else if testCase .expectedResult != value {
438+ t .Errorf ("Unexpected mountOptions for Pod. Expected %v, got %v" , testCase .expectedResult , value )
439+ }
440+ }
441+ }
0 commit comments