44 "context"
55 "errors"
66 "reflect"
7+ "regexp"
78 "testing"
89 "time"
910
@@ -344,32 +345,79 @@ func TestComputeResourceCeilings_updateAll(t *testing.T) {
344345
345346func TestGetComputeResourceAndQuantityRequested (t * testing.T ) {
346347 type args struct {
347- err error
348+ err error
349+ regexp * regexp.Regexp
348350 }
349351 tests := []struct {
350352 name string
351353 args args
352354 want v1.ResourceList
353355 }{
354- {name : "Memory request " , args : args {err : apiErrors .NewForbidden (
356+ {name : "Limited memory limits " , args : args {err : apiErrors .NewForbidden (
355357 schema.GroupResource {}, "" , errors .New ("is forbidden: " +
356- "exceeded quota: project-quota, requested: limits.memory=3Gi, " +
357- "used: limits.memory=7976Gi, limited: limits.memory=8000Gi" ))},
358+ "exceeded quota: project-quota, requested: limits.memory=3Gi, used: limits.memory=7976Gi, limited: limits.memory=8000Gi" )),
359+ regexp : limitedLimitsRegexp },
360+ want : v1.ResourceList {v1 .ResourceMemory : resource .MustParse ("8000Gi" )}},
361+ {name : "Limited CPU limits" , args : args {err : apiErrors .NewForbidden (
362+ schema.GroupResource {}, "" , errors .New ("is forbidden: " +
363+ "exceeded quota: project-quota, requested: limits.cpu=3640m, used: limits.cpu=6000m, limited: limits.cpu=8000m" )),
364+ regexp : limitedLimitsRegexp },
365+ want : v1.ResourceList {v1 .ResourceCPU : resource .MustParse ("8000m" )}},
366+ {name : "Limited multiple limits " , args : args {err : apiErrors .NewForbidden (
367+ schema.GroupResource {}, "" , errors .New ("is forbidden: " +
368+ "exceeded quota: project-quota, requested: limits.cpu=7,limits.memory=64Gi, used: limits.cpu=249,limits.memory=2012730Mi, limited: limits.cpu=250,limits.memory=2000Gi" )),
369+ regexp : limitedLimitsRegexp },
370+ want : v1.ResourceList {v1 .ResourceCPU : resource .MustParse ("250" ), v1 .ResourceMemory : resource .MustParse ("2000Gi" )}},
371+ {name : "Limited memory requests" , args : args {err : apiErrors .NewForbidden (
372+ schema.GroupResource {}, "" , errors .New ("is forbidden: " +
373+ "exceeded quota: project-quota, requested: requests.memory=3Gi, used: requests.memory=7976Gi, limited: requests.memory=8000Gi" )),
374+ regexp : limitedRequestsRegexp },
375+ want : v1.ResourceList {v1 .ResourceMemory : resource .MustParse ("8000Gi" )}},
376+ {name : "Limited CPU requests" , args : args {err : apiErrors .NewForbidden (
377+ schema.GroupResource {}, "" , errors .New ("is forbidden: " +
378+ "exceeded quota: project-quota, requested: requests.cpu=3640m, used: requests.cpu=6000m, limited: requests.cpu=8000m" )),
379+ regexp : limitedRequestsRegexp },
380+ want : v1.ResourceList {v1 .ResourceCPU : resource .MustParse ("8000m" )}},
381+ {name : "Limited multiple requests " , args : args {err : apiErrors .NewForbidden (
382+ schema.GroupResource {}, "" , errors .New ("is forbidden: " +
383+ "exceeded quota: project-quota, requested: requests.cpu=7,requests.memory=64Gi, used: requests.cpu=249,requests.memory=2012730Mi, limited: requests.cpu=250,requests.memory=2000Gi" )),
384+ regexp : limitedRequestsRegexp },
385+ want : v1.ResourceList {v1 .ResourceCPU : resource .MustParse ("250" ), v1 .ResourceMemory : resource .MustParse ("2000Gi" )}},
386+ {name : "Requested memory limits" , args : args {err : apiErrors .NewForbidden (
387+ schema.GroupResource {}, "" , errors .New ("is forbidden: " +
388+ "exceeded quota: project-quota, requested: limits.memory=3Gi, used: limits.memory=7976Gi, limited: limits.memory=8000Gi" )),
389+ regexp : requestedLimitsRegexp },
390+ want : v1.ResourceList {v1 .ResourceMemory : resource .MustParse ("3Gi" )}},
391+ {name : "Requested CPU limits" , args : args {err : apiErrors .NewForbidden (
392+ schema.GroupResource {}, "" , errors .New ("is forbidden: " +
393+ "exceeded quota: project-quota, requested: limits.cpu=3640m, used: limits.cpu=6000m, limited: limits.cpu=8000m" )),
394+ regexp : requestedLimitsRegexp },
395+ want : v1.ResourceList {v1 .ResourceCPU : resource .MustParse ("3640m" )}},
396+ {name : "Requested multiple limits " , args : args {err : apiErrors .NewForbidden (
397+ schema.GroupResource {}, "" , errors .New ("is forbidden: " +
398+ "exceeded quota: project-quota, requested: limits.cpu=7,limits.memory=64Gi, used: limits.cpu=249,limits.memory=2012730Mi, limited: limits.cpu=250,limits.memory=2000Gi" )),
399+ regexp : requestedLimitsRegexp },
400+ want : v1.ResourceList {v1 .ResourceCPU : resource .MustParse ("7" ), v1 .ResourceMemory : resource .MustParse ("64Gi" )}},
401+ {name : "Requested memory requests" , args : args {err : apiErrors .NewForbidden (
402+ schema.GroupResource {}, "" , errors .New ("is forbidden: " +
403+ "exceeded quota: project-quota, requested: requests.memory=3Gi, used: requests.memory=7976Gi, limited: requests.memory=8000Gi" )),
404+ regexp : requestedRequestsRegexp },
358405 want : v1.ResourceList {v1 .ResourceMemory : resource .MustParse ("3Gi" )}},
359- {name : "CPU request " , args : args {err : apiErrors .NewForbidden (
406+ {name : "Requested CPU requests " , args : args {err : apiErrors .NewForbidden (
360407 schema.GroupResource {}, "" , errors .New ("is forbidden: " +
361- "exceeded quota: project-quota, requested: limits .cpu=3640m, " +
362- "used: limits.cpu=6000m, limited: limits.cpu=8000m" )) },
408+ "exceeded quota: project-quota, requested: requests .cpu=3640m, used: requests.cpu=6000m, limited: requests.cpu=8000m" )),
409+ regexp : requestedRequestsRegexp },
363410 want : v1.ResourceList {v1 .ResourceCPU : resource .MustParse ("3640m" )}},
364- {name : "Multiple resources " , args : args {err : apiErrors .NewForbidden (
411+ {name : "Requested multiple requests " , args : args {err : apiErrors .NewForbidden (
365412 schema.GroupResource {}, "" , errors .New ("is forbidden: " +
366- "exceeded quota: project-quota, requested: limits.cpu=7,limits.memory=64Gi, used: limits.cpu=249,limits.memory=2012730Mi, limited: limits.cpu=250,limits.memory=2000Gi" ))},
413+ "exceeded quota: project-quota, requested: requests.cpu=7,requests.memory=64Gi, used: requests.cpu=249,requests.memory=2012730Mi, limited: requests.cpu=250,requests.memory=2000Gi" )),
414+ regexp : requestedRequestsRegexp },
367415 want : v1.ResourceList {v1 .ResourceCPU : resource .MustParse ("7" ), v1 .ResourceMemory : resource .MustParse ("64Gi" )}},
368416 }
369417 for _ , tt := range tests {
370418 t .Run (tt .name , func (t * testing.T ) {
371- if got := GetComputeResourceAndQuantityRequested (tt .args .err ); ! reflect .DeepEqual (got , tt .want ) {
372- t .Errorf ("GetComputeResourceAndQuantityRequested () = %v, want %v" , got , tt .want )
419+ if got := GetComputeResourceAndQuantity (tt .args .err , tt . args . regexp ); ! reflect .DeepEqual (got , tt .want ) {
420+ t .Errorf ("GetComputeResourceAndQuantity () = %v, want %v" , got , tt .want )
373421 }
374422 })
375423 }
@@ -390,7 +438,7 @@ func TestIsBackoffError(t *testing.T) {
390438 }
391439 for _ , tt := range tests {
392440 t .Run (tt .name , func (t * testing.T ) {
393- if got := IsBackoffError (tt .args .err ); got != tt .want {
441+ if got := stdlibErrors . IsCausedBy (tt .args .err , taskErrors . BackOffError ); got != tt .want {
394442 t .Errorf ("IsBackoffError() = %v, want %v" , got , tt .want )
395443 }
396444 })
@@ -516,3 +564,56 @@ func TestErrorTypes(t *testing.T) {
516564 assert .True (t , res )
517565 })
518566}
567+
568+ func TestIsEligible (t * testing.T ) {
569+ type args struct {
570+ requested v1.ResourceList
571+ quota v1.ResourceList
572+ }
573+ tests := []struct {
574+ name string
575+ args args
576+ want bool
577+ }{
578+ {
579+ name : "CPUElgible" ,
580+ args : args {
581+ requested : v1.ResourceList {v1 .ResourceCPU : resource .MustParse ("1" )},
582+ quota : v1.ResourceList {v1 .ResourceCPU : resource .MustParse ("2" )},
583+ },
584+ want : true ,
585+ },
586+ {
587+ name : "CPUInelgible" ,
588+ args : args {
589+ requested : v1.ResourceList {v1 .ResourceCPU : resource .MustParse ("1" )},
590+ quota : v1.ResourceList {v1 .ResourceCPU : resource .MustParse ("200m" )},
591+ },
592+ want : false ,
593+ },
594+ {
595+ name : "MemoryElgible" ,
596+ args : args {
597+ requested : v1.ResourceList {v1 .ResourceMemory : resource .MustParse ("32Gi" )},
598+ quota : v1.ResourceList {v1 .ResourceMemory : resource .MustParse ("64Gi" )},
599+ },
600+ want : true ,
601+ },
602+ {
603+ name : "MemoryInelgible" ,
604+ args : args {
605+ requested : v1.ResourceList {v1 .ResourceMemory : resource .MustParse ("64Gi" )},
606+ quota : v1.ResourceList {v1 .ResourceMemory : resource .MustParse ("64Gi" )},
607+ },
608+ want : false ,
609+ },
610+ }
611+
612+ for _ , tt := range tests {
613+ t .Run (tt .name , func (t * testing.T ) {
614+ if got := isEligible (tt .args .requested , tt .args .quota ); got != tt .want {
615+ t .Errorf ("isEligible() = %v, want %v" , got , tt .want )
616+ }
617+ })
618+ }
619+ }
0 commit comments