Skip to content

Commit d264650

Browse files
committed
Add Test case
1 parent 8d6e67a commit d264650

File tree

3 files changed

+66
-32
lines changed

3 files changed

+66
-32
lines changed

internal/controller/provisioner/objects.go

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,21 @@ const (
4242

4343
var emptyDirVolumeSource = corev1.VolumeSource{EmptyDir: &corev1.EmptyDirVolumeSource{}}
4444

45+
func autoscalingEnabled(dep *ngfAPIv1alpha2.DeploymentSpec) bool {
46+
return dep != nil && dep.Autoscaling.Enabled
47+
}
48+
49+
func cloneHPAAnnotationMap(src map[string]string) map[string]string {
50+
if src == nil {
51+
return nil
52+
}
53+
annotations := make(map[string]string, len(src))
54+
for k, v := range src {
55+
annotations[k] = v
56+
}
57+
return annotations
58+
}
59+
4560
func (p *NginxProvisioner) buildNginxResourceObjects(
4661
resourceName string,
4762
gateway *gatewayv1.Gateway,
@@ -164,25 +179,20 @@ func (p *NginxProvisioner) buildNginxResourceObjects(
164179
objects = append(objects, openshiftObjs...)
165180
}
166181

167-
if nProxyCfg.Kubernetes.Deployment.Autoscaling.Enabled {
168-
hpaAnnotations := make(map[string]string)
169-
if nProxyCfg.Kubernetes.Deployment.Autoscaling.HPAAnnotations != nil {
170-
for key, value := range nProxyCfg.Kubernetes.Deployment.Autoscaling.HPAAnnotations {
171-
hpaAnnotations[key] = value
172-
}
182+
if nProxyCfg != nil && nProxyCfg.Kubernetes != nil {
183+
if autoscalingEnabled(nProxyCfg.Kubernetes.Deployment) {
184+
objectMeta.Annotations = cloneHPAAnnotationMap(nProxyCfg.Kubernetes.Deployment.Autoscaling.HPAAnnotations)
185+
hpa := buildNginxDeploymentHPA(
186+
objectMeta,
187+
nProxyCfg,
188+
)
189+
objects = append(objects, service, deployment, hpa)
190+
return objects, nil
173191
}
174-
175-
objectMeta.Annotations = hpaAnnotations
176-
177-
hpa := buildNginxDeploymentHPA(
178-
objectMeta,
179-
nProxyCfg,
180-
)
181-
objects = append(objects, service, deployment, hpa)
182-
} else {
183-
objects = append(objects, service, deployment)
184192
}
185193

194+
objects = append(objects, service, deployment)
195+
186196
return objects, err
187197
}
188198

@@ -946,6 +956,10 @@ func buildNginxDeploymentHPA(
946956
objectMeta metav1.ObjectMeta,
947957
nProxyCfg *graph.EffectiveNginxProxy,
948958
) *autoscalingv2.HorizontalPodAutoscaler {
959+
dep := nProxyCfg.Kubernetes.Deployment
960+
if dep == nil || !dep.Autoscaling.Enabled {
961+
return nil
962+
}
949963
var metrics []autoscalingv2.MetricSpec
950964

951965
cpuUtil := nProxyCfg.Kubernetes.Deployment.Autoscaling.TargetCPUUtilizationPercentage

internal/controller/provisioner/objects_test.go

Lines changed: 34 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66

77
. "github.com/onsi/gomega"
88
appsv1 "k8s.io/api/apps/v1"
9+
autoscalingv2 "k8s.io/api/autoscaling/v2"
910
corev1 "k8s.io/api/core/v1"
1011
rbacv1 "k8s.io/api/rbac/v1"
1112
"k8s.io/apimachinery/pkg/api/resource"
@@ -279,6 +280,13 @@ func TestBuildNginxResourceObjects_NginxProxyConfig(t *testing.T) {
279280
},
280281
Deployment: &ngfAPIv1alpha2.DeploymentSpec{
281282
Replicas: helpers.GetPointer[int32](3),
283+
Autoscaling: ngfAPIv1alpha2.HPASpec{
284+
Enabled: true,
285+
MinReplicas: 1,
286+
MaxReplicas: 5,
287+
TargetMemoryUtilizationPercentage: helpers.GetPointer[int32](60),
288+
// Behavior, AutoscalingTemplate, HPAAnnotations 등은 필요하면 채우고
289+
},
282290
Pod: ngfAPIv1alpha2.PodSpec{
283291
TerminationGracePeriodSeconds: helpers.GetPointer[int64](25),
284292
},
@@ -301,7 +309,7 @@ func TestBuildNginxResourceObjects_NginxProxyConfig(t *testing.T) {
301309
objects, err := provisioner.buildNginxResourceObjects(resourceName, gateway, nProxyCfg)
302310
g.Expect(err).ToNot(HaveOccurred())
303311

304-
g.Expect(objects).To(HaveLen(6))
312+
g.Expect(objects).To(HaveLen(7))
305313

306314
cmObj := objects[1]
307315
cm, ok := cmObj.(*corev1.ConfigMap)
@@ -803,7 +811,7 @@ func TestBuildNginxResourceObjectsForDeletion(t *testing.T) {
803811

804812
objects := provisioner.buildNginxResourceObjectsForDeletion(deploymentNSName)
805813

806-
g.Expect(objects).To(HaveLen(7))
814+
g.Expect(objects).To(HaveLen(8))
807815

808816
validateMeta := func(obj client.Object, name string) {
809817
g.Expect(obj.GetName()).To(Equal(name))
@@ -825,17 +833,22 @@ func TestBuildNginxResourceObjectsForDeletion(t *testing.T) {
825833
g.Expect(ok).To(BeTrue())
826834
validateMeta(svc, deploymentNSName.Name)
827835

828-
svcAcctObj := objects[3]
836+
hpaObj := objects[3]
837+
hpa, ok := hpaObj.(*autoscalingv2.HorizontalPodAutoscaler)
838+
g.Expect(ok).To(BeTrue())
839+
validateMeta(hpa, deploymentNSName.Name)
840+
841+
svcAcctObj := objects[4]
829842
svcAcct, ok := svcAcctObj.(*corev1.ServiceAccount)
830843
g.Expect(ok).To(BeTrue())
831844
validateMeta(svcAcct, deploymentNSName.Name)
832845

833-
cmObj := objects[4]
846+
cmObj := objects[5]
834847
cm, ok := cmObj.(*corev1.ConfigMap)
835848
g.Expect(ok).To(BeTrue())
836849
validateMeta(cm, controller.CreateNginxResourceName(deploymentNSName.Name, nginxIncludesConfigMapNameSuffix))
837850

838-
cmObj = objects[5]
851+
cmObj = objects[6]
839852
cm, ok = cmObj.(*corev1.ConfigMap)
840853
g.Expect(ok).To(BeTrue())
841854
validateMeta(cm, controller.CreateNginxResourceName(deploymentNSName.Name, nginxAgentConfigMapNameSuffix))
@@ -865,7 +878,7 @@ func TestBuildNginxResourceObjectsForDeletion_Plus(t *testing.T) {
865878

866879
objects := provisioner.buildNginxResourceObjectsForDeletion(deploymentNSName)
867880

868-
g.Expect(objects).To(HaveLen(11))
881+
g.Expect(objects).To(HaveLen(12))
869882

870883
validateMeta := func(obj client.Object, name string) {
871884
g.Expect(obj.GetName()).To(Equal(name))
@@ -887,46 +900,51 @@ func TestBuildNginxResourceObjectsForDeletion_Plus(t *testing.T) {
887900
g.Expect(ok).To(BeTrue())
888901
validateMeta(svc, deploymentNSName.Name)
889902

890-
svcAcctObj := objects[3]
903+
hpaObj := objects[3]
904+
hpa, ok := hpaObj.(*autoscalingv2.HorizontalPodAutoscaler)
905+
g.Expect(ok).To(BeTrue())
906+
validateMeta(hpa, deploymentNSName.Name)
907+
908+
svcAcctObj := objects[4]
891909
svcAcct, ok := svcAcctObj.(*corev1.ServiceAccount)
892910
g.Expect(ok).To(BeTrue())
893911
validateMeta(svcAcct, deploymentNSName.Name)
894912

895-
cmObj := objects[4]
913+
cmObj := objects[5]
896914
cm, ok := cmObj.(*corev1.ConfigMap)
897915
g.Expect(ok).To(BeTrue())
898916
validateMeta(cm, controller.CreateNginxResourceName(deploymentNSName.Name, nginxIncludesConfigMapNameSuffix))
899917

900-
cmObj = objects[5]
918+
cmObj = objects[6]
901919
cm, ok = cmObj.(*corev1.ConfigMap)
902920
g.Expect(ok).To(BeTrue())
903921
validateMeta(cm, controller.CreateNginxResourceName(deploymentNSName.Name, nginxAgentConfigMapNameSuffix))
904922

905-
secretObj := objects[6]
923+
secretObj := objects[7]
906924
secret, ok := secretObj.(*corev1.Secret)
907925
g.Expect(ok).To(BeTrue())
908926
validateMeta(secret, controller.CreateNginxResourceName(
909927
deploymentNSName.Name,
910928
provisioner.cfg.AgentTLSSecretName,
911929
))
912930

913-
secretObj = objects[7]
931+
secretObj = objects[8]
914932
secret, ok = secretObj.(*corev1.Secret)
915933
g.Expect(ok).To(BeTrue())
916934
validateMeta(secret, controller.CreateNginxResourceName(
917935
deploymentNSName.Name,
918936
provisioner.cfg.NginxDockerSecretNames[0],
919937
))
920938

921-
secretObj = objects[8]
939+
secretObj = objects[9]
922940
secret, ok = secretObj.(*corev1.Secret)
923941
g.Expect(ok).To(BeTrue())
924942
validateMeta(secret, controller.CreateNginxResourceName(
925943
deploymentNSName.Name,
926944
provisioner.cfg.PlusUsageConfig.CASecretName,
927945
))
928946

929-
secretObj = objects[9]
947+
secretObj = objects[10]
930948
secret, ok = secretObj.(*corev1.Secret)
931949
g.Expect(ok).To(BeTrue())
932950
validateMeta(secret, controller.CreateNginxResourceName(
@@ -948,19 +966,19 @@ func TestBuildNginxResourceObjectsForDeletion_OpenShift(t *testing.T) {
948966

949967
objects := provisioner.buildNginxResourceObjectsForDeletion(deploymentNSName)
950968

951-
g.Expect(objects).To(HaveLen(9))
969+
g.Expect(objects).To(HaveLen(10))
952970

953971
validateMeta := func(obj client.Object, name string) {
954972
g.Expect(obj.GetName()).To(Equal(name))
955973
g.Expect(obj.GetNamespace()).To(Equal(deploymentNSName.Namespace))
956974
}
957975

958-
roleObj := objects[3]
976+
roleObj := objects[4]
959977
role, ok := roleObj.(*rbacv1.Role)
960978
g.Expect(ok).To(BeTrue())
961979
validateMeta(role, deploymentNSName.Name)
962980

963-
roleBindingObj := objects[4]
981+
roleBindingObj := objects[5]
964982
roleBinding, ok := roleBindingObj.(*rbacv1.RoleBinding)
965983
g.Expect(ok).To(BeTrue())
966984
validateMeta(roleBinding, deploymentNSName.Name)

internal/controller/provisioner/provisioner_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"github.com/go-logr/logr"
88
. "github.com/onsi/gomega"
99
appsv1 "k8s.io/api/apps/v1"
10+
autoscalingv2 "k8s.io/api/autoscaling/v2"
1011
corev1 "k8s.io/api/core/v1"
1112
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1213
"k8s.io/apimachinery/pkg/runtime"
@@ -43,6 +44,7 @@ func createScheme() *runtime.Scheme {
4344
utilruntime.Must(gatewayv1.Install(scheme))
4445
utilruntime.Must(corev1.AddToScheme(scheme))
4546
utilruntime.Must(appsv1.AddToScheme(scheme))
47+
utilruntime.Must(autoscalingv2.AddToScheme(scheme))
4648

4749
return scheme
4850
}

0 commit comments

Comments
 (0)