@@ -661,7 +661,7 @@ func TestUseOursIfLarger(t *testing.T) {
661661 },
662662 },
663663 {
664- name : "nothing in ours is larger " ,
664+ name : "ours are smaller - should reduce resources based on recent usage " ,
665665 ours : corev1.ResourceRequirements {
666666 Limits : corev1.ResourceList {
667667 corev1 .ResourceCPU : * resource .NewQuantity (10 , resource .DecimalSI ),
@@ -684,12 +684,16 @@ func TestUseOursIfLarger(t *testing.T) {
684684 },
685685 expected : corev1.ResourceRequirements {
686686 Limits : corev1.ResourceList {
687- corev1 .ResourceCPU : * resource .NewQuantity (200 , resource .DecimalSI ),
688- corev1 .ResourceMemory : * resource .NewQuantity (3e10 , resource .BinarySI ),
687+ // Ours: 10 * 1.2 = 12, Theirs: 200, Reduction: 94% > 25%, so limit to 25%: 200 * 0.75 = 150
688+ corev1 .ResourceCPU : * resource .NewQuantity (150 , resource .DecimalSI ),
689+ // Ours: 10 * 1.2 = 12, Theirs: 3e10, Reduction: >99% > 25%, so limit to 25%: 3e10 * 0.75 = 2.25e10
690+ corev1 .ResourceMemory : * resource .NewQuantity (225e8 , resource .BinarySI ),
689691 },
690692 Requests : corev1.ResourceList {
691- corev1 .ResourceCPU : * resource .NewQuantity (100 , resource .DecimalSI ),
692- corev1 .ResourceMemory : * resource .NewQuantity (2e10 , resource .BinarySI ),
693+ // Ours: 10 * 1.2 = 12, Theirs: 100, Reduction: 88% > 25%, so limit to 25%: 100 * 0.75 = 75
694+ corev1 .ResourceCPU : * resource .NewQuantity (75 , resource .DecimalSI ),
695+ // Ours: 10 * 1.2 = 12, Theirs: 2e10, Reduction: >99% > 25%, so limit to 25%: 2e10 * 0.75 = 1.5e10
696+ corev1 .ResourceMemory : * resource .NewQuantity (15e9 , resource .BinarySI ),
693697 },
694698 },
695699 },
@@ -717,19 +721,57 @@ func TestUseOursIfLarger(t *testing.T) {
717721 },
718722 expected : corev1.ResourceRequirements {
719723 Limits : corev1.ResourceList {
720- corev1 .ResourceCPU : * resource .NewQuantity (480 , resource .DecimalSI ),
721- corev1 .ResourceMemory : * resource .NewQuantity (3e10 , resource .BinarySI ),
724+ corev1 .ResourceCPU : * resource .NewQuantity (480 , resource .DecimalSI ),
725+ // Ours: 10 * 1.2 = 12, Theirs: 3e10, Reduction: >99% > 25%, so limit to 25%: 3e10 * 0.75 = 2.25e10
726+ corev1 .ResourceMemory : * resource .NewQuantity (225e8 , resource .BinarySI ),
722727 },
723728 Requests : corev1.ResourceList {
724729 corev1 .ResourceCPU : * resource .NewQuantity (1200 , resource .DecimalSI ),
725730 corev1 .ResourceMemory : * resource .NewQuantity (48e9 , resource .BinarySI ),
726731 },
727732 },
728733 },
734+ {
735+ name : "ours are smaller - should reduce resources based on recent usage" ,
736+ ours : corev1.ResourceRequirements {
737+ Limits : corev1.ResourceList {
738+ corev1 .ResourceCPU : * resource .NewQuantity (50 , resource .DecimalSI ),
739+ corev1 .ResourceMemory : * resource .NewQuantity (1e9 , resource .BinarySI ),
740+ },
741+ Requests : corev1.ResourceList {
742+ corev1 .ResourceCPU : * resource .NewQuantity (25 , resource .DecimalSI ),
743+ corev1 .ResourceMemory : * resource .NewQuantity (5e9 , resource .BinarySI ),
744+ },
745+ },
746+ theirs : corev1.ResourceRequirements {
747+ Limits : corev1.ResourceList {
748+ corev1 .ResourceCPU : * resource .NewQuantity (200 , resource .DecimalSI ),
749+ corev1 .ResourceMemory : * resource .NewQuantity (3e10 , resource .BinarySI ),
750+ },
751+ Requests : corev1.ResourceList {
752+ corev1 .ResourceCPU : * resource .NewQuantity (100 , resource .DecimalSI ),
753+ corev1 .ResourceMemory : * resource .NewQuantity (2e10 , resource .BinarySI ),
754+ },
755+ },
756+ expected : corev1.ResourceRequirements {
757+ Limits : corev1.ResourceList {
758+ // Ours: 50 * 1.2 = 60, Theirs: 200, Reduction: 70% > 25%, so limit to 25%: 200 * 0.75 = 150
759+ corev1 .ResourceCPU : * resource .NewQuantity (150 , resource .DecimalSI ),
760+ // Ours: 1e9 * 1.2 = 1.2e9, Theirs: 3e10, Reduction: 96% > 25%, so limit to 25%: 3e10 * 0.75 = 2.25e10
761+ corev1 .ResourceMemory : * resource .NewQuantity (225e8 , resource .BinarySI ),
762+ },
763+ Requests : corev1.ResourceList {
764+ // Ours: 25 * 1.2 = 30, Theirs: 100, Reduction: 70% > 25%, so limit to 25%: 100 * 0.75 = 75
765+ corev1 .ResourceCPU : * resource .NewQuantity (75 , resource .DecimalSI ),
766+ // Ours: 5e9 * 1.2 = 6e9, Theirs: 2e10, Reduction: 70% > 25%, so limit to 25%: 2e10 * 0.75 = 1.5e10
767+ corev1 .ResourceMemory : * resource .NewQuantity (15e9 , resource .BinarySI ),
768+ },
769+ },
770+ },
729771 }
730772 for _ , testCase := range testCases {
731773 t .Run (testCase .name , func (t * testing.T ) {
732- useOursIfLarger (& testCase .ours , & testCase .theirs , "test" , "build" , & defaultReporter , logrus .WithField ("test" , testCase .name ))
774+ applyRecommendationsBasedOnRecentData (& testCase .ours , & testCase .theirs , "test" , "build" , & defaultReporter , logrus .WithField ("test" , testCase .name ))
733775 if diff := cmp .Diff (testCase .theirs , testCase .expected ); diff != "" {
734776 t .Errorf ("%s: got incorrect resources after mutation: %v" , testCase .name , diff )
735777 }
@@ -814,7 +856,7 @@ func TestUseOursIsLarger_ReporterReports(t *testing.T) {
814856
815857 for _ , tc := range testCases {
816858 t .Run (tc .name , func (t * testing.T ) {
817- useOursIfLarger (& tc .ours , & tc .theirs , "test" , "build" , & tc .reporter , logrus .WithField ("test" , tc .name ))
859+ applyRecommendationsBasedOnRecentData (& tc .ours , & tc .theirs , "test" , "build" , & tc .reporter , logrus .WithField ("test" , tc .name ))
818860
819861 if diff := cmp .Diff (tc .reporter .called , tc .expected ); diff != "" {
820862 t .Errorf ("actual and expected reporter states don't match, : %v" , diff )
0 commit comments