123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- /*
- Copyright 2017 The Kubernetes Authors.
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
- package v2beta2_test
- import (
- "testing"
- autoscalingv2 "k8s.io/api/autoscaling/v2beta2"
- . "k8s.io/kubernetes/pkg/apis/autoscaling/v2beta2"
- utilpointer "k8s.io/utils/pointer"
- "github.com/stretchr/testify/assert"
- )
- func TestGenerateScaleDownRules(t *testing.T) {
- type TestCase struct {
- rateDownPods int32
- rateDownPodsPeriodSeconds int32
- rateDownPercent int32
- rateDownPercentPeriodSeconds int32
- stabilizationSeconds *int32
- selectPolicy *autoscalingv2.ScalingPolicySelect
- expectedPolicies []autoscalingv2.HPAScalingPolicy
- expectedStabilization *int32
- expectedSelectPolicy string
- annotation string
- }
- maxPolicy := autoscalingv2.MaxPolicySelect
- minPolicy := autoscalingv2.MinPolicySelect
- tests := []TestCase{
- {
- annotation: "Default values",
- expectedPolicies: []autoscalingv2.HPAScalingPolicy{
- {Type: autoscalingv2.PercentScalingPolicy, Value: 100, PeriodSeconds: 15},
- },
- expectedStabilization: nil,
- expectedSelectPolicy: string(autoscalingv2.MaxPolicySelect),
- },
- {
- annotation: "All parameters are specified",
- rateDownPods: 1,
- rateDownPodsPeriodSeconds: 2,
- rateDownPercent: 3,
- rateDownPercentPeriodSeconds: 4,
- stabilizationSeconds: utilpointer.Int32Ptr(25),
- selectPolicy: &maxPolicy,
- expectedPolicies: []autoscalingv2.HPAScalingPolicy{
- {Type: autoscalingv2.PodsScalingPolicy, Value: 1, PeriodSeconds: 2},
- {Type: autoscalingv2.PercentScalingPolicy, Value: 3, PeriodSeconds: 4},
- },
- expectedStabilization: utilpointer.Int32Ptr(25),
- expectedSelectPolicy: string(autoscalingv2.MaxPolicySelect),
- },
- {
- annotation: "Percent policy is specified",
- rateDownPercent: 1,
- rateDownPercentPeriodSeconds: 2,
- selectPolicy: &minPolicy,
- expectedPolicies: []autoscalingv2.HPAScalingPolicy{
- {Type: autoscalingv2.PercentScalingPolicy, Value: 1, PeriodSeconds: 2},
- },
- expectedStabilization: nil,
- expectedSelectPolicy: string(autoscalingv2.MinPolicySelect),
- },
- {
- annotation: "Pods policy is specified",
- rateDownPods: 3,
- rateDownPodsPeriodSeconds: 4,
- expectedPolicies: []autoscalingv2.HPAScalingPolicy{
- {Type: autoscalingv2.PodsScalingPolicy, Value: 3, PeriodSeconds: 4},
- },
- expectedStabilization: nil,
- expectedSelectPolicy: string(autoscalingv2.MaxPolicySelect),
- },
- }
- for _, tc := range tests {
- t.Run(tc.annotation, func(t *testing.T) {
- scaleDownRules := &autoscalingv2.HPAScalingRules{
- StabilizationWindowSeconds: tc.stabilizationSeconds,
- SelectPolicy: tc.selectPolicy,
- }
- if tc.rateDownPods != 0 || tc.rateDownPodsPeriodSeconds != 0 {
- scaleDownRules.Policies = append(scaleDownRules.Policies, autoscalingv2.HPAScalingPolicy{
- Type: autoscalingv2.PodsScalingPolicy, Value: tc.rateDownPods, PeriodSeconds: tc.rateDownPodsPeriodSeconds,
- })
- }
- if tc.rateDownPercent != 0 || tc.rateDownPercentPeriodSeconds != 0 {
- scaleDownRules.Policies = append(scaleDownRules.Policies, autoscalingv2.HPAScalingPolicy{
- Type: autoscalingv2.PercentScalingPolicy, Value: tc.rateDownPercent, PeriodSeconds: tc.rateDownPercentPeriodSeconds,
- })
- }
- down := GenerateHPAScaleDownRules(scaleDownRules)
- assert.EqualValues(t, tc.expectedPolicies, down.Policies)
- if tc.expectedStabilization != nil {
- assert.Equal(t, *tc.expectedStabilization, *down.StabilizationWindowSeconds)
- } else {
- assert.Equal(t, tc.expectedStabilization, down.StabilizationWindowSeconds)
- }
- assert.Equal(t, autoscalingv2.ScalingPolicySelect(tc.expectedSelectPolicy), *down.SelectPolicy)
- })
- }
- }
- func TestGenerateScaleUpRules(t *testing.T) {
- type TestCase struct {
- rateUpPods int32
- rateUpPodsPeriodSeconds int32
- rateUpPercent int32
- rateUpPercentPeriodSeconds int32
- stabilizationSeconds *int32
- selectPolicy *autoscalingv2.ScalingPolicySelect
- expectedPolicies []autoscalingv2.HPAScalingPolicy
- expectedStabilization *int32
- expectedSelectPolicy string
- annotation string
- }
- maxPolicy := autoscalingv2.MaxPolicySelect
- minPolicy := autoscalingv2.MinPolicySelect
- tests := []TestCase{
- {
- annotation: "Default values",
- expectedPolicies: []autoscalingv2.HPAScalingPolicy{
- {Type: autoscalingv2.PodsScalingPolicy, Value: 4, PeriodSeconds: 15},
- {Type: autoscalingv2.PercentScalingPolicy, Value: 100, PeriodSeconds: 15},
- },
- expectedStabilization: utilpointer.Int32Ptr(0),
- expectedSelectPolicy: string(autoscalingv2.MaxPolicySelect),
- },
- {
- annotation: "All parameters are specified",
- rateUpPods: 1,
- rateUpPodsPeriodSeconds: 2,
- rateUpPercent: 3,
- rateUpPercentPeriodSeconds: 4,
- stabilizationSeconds: utilpointer.Int32Ptr(25),
- selectPolicy: &maxPolicy,
- expectedPolicies: []autoscalingv2.HPAScalingPolicy{
- {Type: autoscalingv2.PodsScalingPolicy, Value: 1, PeriodSeconds: 2},
- {Type: autoscalingv2.PercentScalingPolicy, Value: 3, PeriodSeconds: 4},
- },
- expectedStabilization: utilpointer.Int32Ptr(25),
- expectedSelectPolicy: string(autoscalingv2.MaxPolicySelect),
- },
- {
- annotation: "Pod policy is specified",
- rateUpPods: 1,
- rateUpPodsPeriodSeconds: 2,
- selectPolicy: &minPolicy,
- expectedPolicies: []autoscalingv2.HPAScalingPolicy{
- {Type: autoscalingv2.PodsScalingPolicy, Value: 1, PeriodSeconds: 2},
- },
- expectedStabilization: utilpointer.Int32Ptr(0),
- expectedSelectPolicy: string(autoscalingv2.MinPolicySelect),
- },
- {
- annotation: "Percent policy is specified",
- rateUpPercent: 7,
- rateUpPercentPeriodSeconds: 10,
- expectedPolicies: []autoscalingv2.HPAScalingPolicy{
- {Type: autoscalingv2.PercentScalingPolicy, Value: 7, PeriodSeconds: 10},
- },
- expectedStabilization: utilpointer.Int32Ptr(0),
- expectedSelectPolicy: string(autoscalingv2.MaxPolicySelect),
- },
- {
- annotation: "Pod policy and stabilization window are specified",
- rateUpPodsPeriodSeconds: 2,
- stabilizationSeconds: utilpointer.Int32Ptr(25),
- rateUpPods: 4,
- expectedPolicies: []autoscalingv2.HPAScalingPolicy{
- {Type: autoscalingv2.PodsScalingPolicy, Value: 4, PeriodSeconds: 2},
- },
- expectedStabilization: utilpointer.Int32Ptr(25),
- expectedSelectPolicy: string(autoscalingv2.MaxPolicySelect),
- },
- {
- annotation: "Percent policy and stabilization window are specified",
- rateUpPercent: 7,
- rateUpPercentPeriodSeconds: 60,
- stabilizationSeconds: utilpointer.Int32Ptr(25),
- expectedPolicies: []autoscalingv2.HPAScalingPolicy{
- {Type: autoscalingv2.PercentScalingPolicy, Value: 7, PeriodSeconds: 60},
- },
- expectedStabilization: utilpointer.Int32Ptr(25),
- expectedSelectPolicy: string(autoscalingv2.MaxPolicySelect),
- },
- }
- for _, tc := range tests {
- t.Run(tc.annotation, func(t *testing.T) {
- scaleUpRules := &autoscalingv2.HPAScalingRules{
- StabilizationWindowSeconds: tc.stabilizationSeconds,
- SelectPolicy: tc.selectPolicy,
- }
- if tc.rateUpPods != 0 || tc.rateUpPodsPeriodSeconds != 0 {
- scaleUpRules.Policies = append(scaleUpRules.Policies, autoscalingv2.HPAScalingPolicy{
- Type: autoscalingv2.PodsScalingPolicy, Value: tc.rateUpPods, PeriodSeconds: tc.rateUpPodsPeriodSeconds,
- })
- }
- if tc.rateUpPercent != 0 || tc.rateUpPercentPeriodSeconds != 0 {
- scaleUpRules.Policies = append(scaleUpRules.Policies, autoscalingv2.HPAScalingPolicy{
- Type: autoscalingv2.PercentScalingPolicy, Value: tc.rateUpPercent, PeriodSeconds: tc.rateUpPercentPeriodSeconds,
- })
- }
- up := GenerateHPAScaleUpRules(scaleUpRules)
- assert.Equal(t, tc.expectedPolicies, up.Policies)
- if tc.expectedStabilization != nil {
- assert.Equal(t, *tc.expectedStabilization, *up.StabilizationWindowSeconds)
- } else {
- assert.Equal(t, tc.expectedStabilization, up.StabilizationWindowSeconds)
- }
- assert.Equal(t, autoscalingv2.ScalingPolicySelect(tc.expectedSelectPolicy), *up.SelectPolicy)
- })
- }
- }
|