@@ -22,14 +22,17 @@ package k8sutil
2222
2323import (
2424 "context"
25+ "fmt"
2526 "testing"
2627
2728 "github.com/stretchr/testify/assert"
2829 "github.com/stretchr/testify/require"
2930 core "k8s.io/api/core/v1"
31+ resource "k8s.io/apimachinery/pkg/api/resource"
3032 meta "k8s.io/apimachinery/pkg/apis/meta/v1"
3133
3234 "github.com/arangodb/kube-arangodb/pkg/handlers/utils"
35+ "github.com/arangodb/kube-arangodb/pkg/util"
3336 "github.com/arangodb/kube-arangodb/pkg/util/constants"
3437 "github.com/arangodb/kube-arangodb/pkg/util/kclient"
3538)
@@ -416,3 +419,61 @@ func Test_EnsureFinalizer(t *testing.T) {
416419 require .NotContains (t , pod .Finalizers , f )
417420 })
418421}
422+
423+ func Test_ExtractPodResourceRequirement (t * testing.T ) {
424+ v , err := resource .ParseQuantity ("1Gi" )
425+ require .NoError (t , err )
426+
427+ t .Run ("Filter Storage" , func (t * testing.T ) {
428+ in := core.ResourceRequirements {
429+ Limits : map [core.ResourceName ]resource.Quantity {
430+ core .ResourceCPU : v ,
431+ core .ResourceStorage : v ,
432+ },
433+ }
434+ require .Len (t , in .Limits , 2 )
435+ require .Len (t , in .Requests , 0 )
436+
437+ out := ExtractPodResourceRequirement (in )
438+ require .Len (t , out .Limits , 1 )
439+ require .Contains (t , out .Limits , core .ResourceCPU )
440+ require .NotContains (t , out .Limits , core .ResourceStorage )
441+ require .Len (t , out .Requests , 0 )
442+ })
443+
444+ t .Run ("Ensure that all required Resources are filtered" , func (t * testing.T ) {
445+ resources := map [core.ResourceName ]bool {
446+ core .ResourceCPU : true ,
447+ core .ResourceMemory : true ,
448+ core .ResourceStorage : false ,
449+ core .ResourceEphemeralStorage : true ,
450+ }
451+
452+ in := core.ResourceRequirements {
453+ Limits : core.ResourceList {},
454+ Requests : core.ResourceList {},
455+ }
456+
457+ for k := range resources {
458+ in .Limits [k ] = v
459+ in .Requests [k ] = v
460+ }
461+
462+ out := ExtractPodResourceRequirement (in )
463+
464+ for k , v := range resources {
465+ t .Run (fmt .Sprintf ("Resource %s should be %s" , k , util .BoolSwitch (v , "present" , "missing" )), func (t * testing.T ) {
466+ require .Contains (t , in .Requests , k )
467+ require .Contains (t , in .Limits , k )
468+
469+ if v {
470+ require .Contains (t , out .Requests , k )
471+ require .Contains (t , out .Limits , k )
472+ } else {
473+ require .NotContains (t , out .Requests , k )
474+ require .NotContains (t , out .Limits , k )
475+ }
476+ })
477+ }
478+ })
479+ }
0 commit comments