github.com/argoproj-labs/argocd-operator@v0.10.0/controllers/argocd/hpa_test.go (about)

     1  package argocd
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  	autoscaling "k8s.io/api/autoscaling/v1"
     9  	"k8s.io/apimachinery/pkg/api/errors"
    10  	"k8s.io/apimachinery/pkg/runtime"
    11  	"k8s.io/apimachinery/pkg/types"
    12  	"sigs.k8s.io/controller-runtime/pkg/client"
    13  	logf "sigs.k8s.io/controller-runtime/pkg/log"
    14  
    15  	argoproj "github.com/argoproj-labs/argocd-operator/api/v1beta1"
    16  )
    17  
    18  var (
    19  	min     int32 = 5
    20  	max     int32 = 8
    21  	cpuUtil int32 = 45
    22  )
    23  
    24  func TestReconcileHPA(t *testing.T) {
    25  
    26  	logf.SetLogger(ZapLogger(true))
    27  	a := makeTestArgoCD()
    28  
    29  	resObjs := []client.Object{a}
    30  	subresObjs := []client.Object{a}
    31  	runtimeObjs := []runtime.Object{}
    32  	sch := makeTestReconcilerScheme(argoproj.AddToScheme)
    33  	cl := makeTestReconcilerClient(sch, resObjs, subresObjs, runtimeObjs)
    34  	r := makeTestReconciler(cl, sch)
    35  
    36  	existingHPA := newHorizontalPodAutoscalerWithSuffix("server", a)
    37  
    38  	defaultHPASpec := autoscaling.HorizontalPodAutoscalerSpec{
    39  		MaxReplicas:                    maxReplicas,
    40  		MinReplicas:                    &minReplicas,
    41  		TargetCPUUtilizationPercentage: &tcup,
    42  		ScaleTargetRef: autoscaling.CrossVersionObjectReference{
    43  			APIVersion: "apps/v1",
    44  			Kind:       "Deployment",
    45  			Name:       nameWithSuffix("server", a),
    46  		},
    47  	}
    48  
    49  	updatedHPASpec := autoscaling.HorizontalPodAutoscalerSpec{
    50  		MaxReplicas:                    max,
    51  		MinReplicas:                    &min,
    52  		TargetCPUUtilizationPercentage: &cpuUtil,
    53  		ScaleTargetRef: autoscaling.CrossVersionObjectReference{
    54  			APIVersion: "apps/v1",
    55  			Kind:       "Deployment",
    56  			Name:       nameWithSuffix("server", a),
    57  		},
    58  	}
    59  
    60  	err := r.Client.Get(context.TODO(), types.NamespacedName{
    61  		Name:      "argocd-server",
    62  		Namespace: testNamespace,
    63  	}, existingHPA)
    64  	assert.True(t, errors.IsNotFound(err))
    65  
    66  	a.Spec.Server.Autoscale.Enabled = true
    67  
    68  	err = r.reconcileServerHPA(a)
    69  	assert.NoError(t, err)
    70  
    71  	err = r.Client.Get(context.TODO(), types.NamespacedName{
    72  		Name:      "argocd-server",
    73  		Namespace: testNamespace,
    74  	}, existingHPA)
    75  	assert.NoError(t, err)
    76  	assert.Equal(t, defaultHPASpec, existingHPA.Spec)
    77  
    78  	a.Spec.Server.Autoscale.HPA = &updatedHPASpec
    79  
    80  	err = r.reconcileServerHPA(a)
    81  	assert.NoError(t, err)
    82  
    83  	err = r.Client.Get(context.TODO(), types.NamespacedName{
    84  		Name:      "argocd-server",
    85  		Namespace: testNamespace,
    86  	}, existingHPA)
    87  	assert.NoError(t, err)
    88  	assert.Equal(t, updatedHPASpec, existingHPA.Spec)
    89  
    90  	a.Spec.Server.Autoscale.Enabled = false
    91  
    92  	err = r.reconcileServerHPA(a)
    93  	assert.NoError(t, err)
    94  
    95  	err = r.Client.Get(context.TODO(), types.NamespacedName{
    96  		Name:      "argocd-server",
    97  		Namespace: testNamespace,
    98  	}, existingHPA)
    99  	assert.True(t, errors.IsNotFound(err))
   100  
   101  }