@@ -383,6 +383,82 @@ func TestBuildNginxResourceObjects_NginxProxyConfig(t *testing.T) {
383383 g .Expect (hpa .Spec .MaxReplicas ).To (Equal (int32 (5 )))
384384}
385385
386+ func TestBuildNginxResourceObjects_DeploymentReplicasFromHPA (t * testing.T ) {
387+ t .Parallel ()
388+ g := NewWithT (t )
389+
390+ // Create a fake HPA with status.desiredReplicas set
391+ hpa := & autoscalingv2.HorizontalPodAutoscaler {
392+ ObjectMeta : metav1.ObjectMeta {
393+ Name : "gw-nginx" ,
394+ Namespace : "default" ,
395+ },
396+ Status : autoscalingv2.HorizontalPodAutoscalerStatus {
397+ DesiredReplicas : 7 ,
398+ },
399+ }
400+
401+ agentTLSSecret := & corev1.Secret {
402+ ObjectMeta : metav1.ObjectMeta {
403+ Name : agentTLSTestSecretName ,
404+ Namespace : ngfNamespace ,
405+ },
406+ Data : map [string ][]byte {"tls.crt" : []byte ("tls" )},
407+ }
408+
409+ fakeClient := fake .NewFakeClient (agentTLSSecret , hpa )
410+
411+ provisioner := & NginxProvisioner {
412+ cfg : Config {
413+ GatewayPodConfig : & config.GatewayPodConfig {
414+ Namespace : ngfNamespace ,
415+ Version : "1.0.0" ,
416+ Image : "ngf-image" ,
417+ },
418+ AgentTLSSecretName : agentTLSTestSecretName ,
419+ },
420+ baseLabelSelector : metav1.LabelSelector {
421+ MatchLabels : map [string ]string {"app" : "nginx" },
422+ },
423+ k8sClient : fakeClient ,
424+ }
425+
426+ gateway := & gatewayv1.Gateway {
427+ ObjectMeta : metav1.ObjectMeta {
428+ Name : "gw" ,
429+ Namespace : "default" ,
430+ },
431+ Spec : gatewayv1.GatewaySpec {
432+ Listeners : []gatewayv1.Listener {{Port : 80 }},
433+ },
434+ }
435+
436+ resourceName := "gw-nginx"
437+ nProxyCfg := & graph.EffectiveNginxProxy {
438+ Kubernetes : & ngfAPIv1alpha2.KubernetesSpec {
439+ Deployment : & ngfAPIv1alpha2.DeploymentSpec {
440+ Replicas : nil , // Should be overridden by HPA
441+ Autoscaling : ngfAPIv1alpha2.HPASpec {Enabled : true },
442+ },
443+ },
444+ }
445+
446+ objects , err := provisioner .buildNginxResourceObjects (resourceName , gateway , nProxyCfg )
447+ g .Expect (err ).ToNot (HaveOccurred ())
448+
449+ // Find the deployment object
450+ var deployment * appsv1.Deployment
451+ for _ , obj := range objects {
452+ if d , ok := obj .(* appsv1.Deployment ); ok {
453+ deployment = d
454+ break
455+ }
456+ }
457+ g .Expect (deployment ).ToNot (BeNil ())
458+ g .Expect (deployment .Spec .Replicas ).ToNot (BeNil ())
459+ g .Expect (* deployment .Spec .Replicas ).To (Equal (int32 (7 )))
460+ }
461+
386462func TestBuildNginxResourceObjects_Plus (t * testing.T ) {
387463 t .Parallel ()
388464 g := NewWithT (t )
@@ -1121,8 +1197,8 @@ func TestBuildNginxResourceObjectsForDeletion_DataplaneKeySecret(t *testing.T) {
11211197 objects := provisioner .buildNginxResourceObjectsForDeletion (deploymentNSName )
11221198
11231199 // Should include the dataplane key secret in the objects list
1124- // Default: deployment, daemonset, service, serviceaccount, 2 configmaps, agentTLSSecret, dataplaneKeySecret
1125- g .Expect (objects ).To (HaveLen (8 ))
1200+ // Default: deployment, daemonset, service, hpa, serviceaccount, 2 configmaps, agentTLSSecret, dataplaneKeySecret
1201+ g .Expect (objects ).To (HaveLen (9 ))
11261202
11271203 validateMeta := func (obj client.Object , name string ) {
11281204 g .Expect (obj .GetName ()).To (Equal (name ))
0 commit comments