@@ -7,13 +7,16 @@ import (
77 "fmt"
88 "io"
99 "net/http"
10+ "os"
1011 "reflect"
1112 "strings"
1213 "testing"
1314
1415 "github.com/golang/mock/gomock"
1516 "github.com/hashicorp/go-cty/cty"
1617 "github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
18+ "github.com/hashicorp/terraform-plugin-testing/helper/acctest"
19+ "github.com/hashicorp/terraform-plugin-testing/helper/resource"
1720 "github.com/samber/lo"
1821 "github.com/stretchr/testify/require"
1922
@@ -968,3 +971,114 @@ func JSONBytesEqual(a, b []byte) (bool, error) {
968971 }
969972 return reflect .DeepEqual (j2 , j ), nil
970973}
974+
975+ func TestAccEKS_ResourceAutoscaler_basic (t * testing.T ) {
976+ rName := fmt .Sprintf ("%v-autoscaler-%v" , ResourcePrefix , acctest .RandString (8 ))
977+ clusterName , _ := lo .Coalesce (os .Getenv ("CLUSTER_NAME" ), "cost-terraform" )
978+
979+ resource .Test (t , resource.TestCase {
980+ PreCheck : func () { testAccPreCheck (t ) },
981+
982+ ProviderFactories : providerFactories ,
983+ Steps : []resource.TestStep {
984+ // Step 1: Create autoscaler with initial settings
985+ {
986+ Config : testAccAutoscalerConfig (rName , clusterName , true , false ),
987+ Check : resource .ComposeTestCheckFunc (
988+ resource .TestCheckResourceAttr ("castai_autoscaler.test" , "autoscaler_settings.0.enabled" , "true" ),
989+ resource .TestCheckResourceAttr ("castai_autoscaler.test" , "autoscaler_settings.0.is_scoped_mode" , "false" ),
990+ resource .TestCheckResourceAttr ("castai_autoscaler.test" , "autoscaler_settings.0.node_templates_partial_matching_enabled" , "false" ),
991+ resource .TestCheckResourceAttr ("castai_autoscaler.test" , "autoscaler_settings.0.unschedulable_pods.0.enabled" , "true" ),
992+ resource .TestCheckResourceAttr ("castai_autoscaler.test" , "autoscaler_settings.0.cluster_limits.0.enabled" , "true" ),
993+ resource .TestCheckResourceAttr ("castai_autoscaler.test" , "autoscaler_settings.0.cluster_limits.0.cpu.0.min_cores" , "1" ),
994+ resource .TestCheckResourceAttr ("castai_autoscaler.test" , "autoscaler_settings.0.cluster_limits.0.cpu.0.max_cores" , "100" ),
995+ resource .TestCheckResourceAttr ("castai_autoscaler.test" , "autoscaler_settings.0.node_downscaler.0.enabled" , "true" ),
996+ resource .TestCheckResourceAttr ("castai_autoscaler.test" , "autoscaler_settings.0.node_downscaler.0.empty_nodes.0.enabled" , "true" ),
997+ resource .TestCheckResourceAttr ("castai_autoscaler.test" , "autoscaler_settings.0.node_downscaler.0.empty_nodes.0.delay_seconds" , "120" ),
998+ ),
999+ },
1000+ // Step 2: Update autoscaler settings
1001+ {
1002+ Config : testAccAutoscalerConfig (rName , clusterName , false , true ),
1003+ Check : resource .ComposeTestCheckFunc (
1004+ resource .TestCheckResourceAttr ("castai_autoscaler.test" , "autoscaler_settings.0.enabled" , "false" ),
1005+ resource .TestCheckResourceAttr ("castai_autoscaler.test" , "autoscaler_settings.0.is_scoped_mode" , "true" ),
1006+ resource .TestCheckResourceAttr ("castai_autoscaler.test" , "autoscaler_settings.0.node_templates_partial_matching_enabled" , "true" ),
1007+ resource .TestCheckResourceAttr ("castai_autoscaler.test" , "autoscaler_settings.0.unschedulable_pods.0.enabled" , "false" ),
1008+ resource .TestCheckResourceAttr ("castai_autoscaler.test" , "autoscaler_settings.0.cluster_limits.0.enabled" , "false" ),
1009+ resource .TestCheckResourceAttr ("castai_autoscaler.test" , "autoscaler_settings.0.cluster_limits.0.cpu.0.min_cores" , "2" ),
1010+ resource .TestCheckResourceAttr ("castai_autoscaler.test" , "autoscaler_settings.0.cluster_limits.0.cpu.0.max_cores" , "200" ),
1011+ resource .TestCheckResourceAttr ("castai_autoscaler.test" , "autoscaler_settings.0.node_downscaler.0.enabled" , "false" ),
1012+ resource .TestCheckResourceAttr ("castai_autoscaler.test" , "autoscaler_settings.0.node_downscaler.0.empty_nodes.0.enabled" , "false" ),
1013+ resource .TestCheckResourceAttr ("castai_autoscaler.test" , "autoscaler_settings.0.node_downscaler.0.empty_nodes.0.delay_seconds" , "300" ),
1014+ ),
1015+ },
1016+ },
1017+ ExternalProviders : map [string ]resource.ExternalProvider {
1018+ "aws" : {
1019+ Source : "hashicorp/aws" ,
1020+ VersionConstraint : "~> 5.0" ,
1021+ },
1022+ },
1023+ })
1024+ }
1025+
1026+ func testAccAutoscalerConfig (rName , clusterName string , enabled bool , updated bool ) string {
1027+ isScopedMode := "false"
1028+ nodeTemplatesPartialMatchingEnabled := "false"
1029+ unschedulablePodsEnabled := "true"
1030+ clusterLimitsEnabled := "true"
1031+ minCores := 1
1032+ maxCores := 100
1033+ nodeDownscalerEnabled := "true"
1034+ emptyNodesEnabled := "true"
1035+ delaySeconds := 120
1036+
1037+ if updated {
1038+ isScopedMode = "true"
1039+ nodeTemplatesPartialMatchingEnabled = "true"
1040+ unschedulablePodsEnabled = "false"
1041+ clusterLimitsEnabled = "false"
1042+ minCores = 2
1043+ maxCores = 200
1044+ nodeDownscalerEnabled = "false"
1045+ emptyNodesEnabled = "false"
1046+ delaySeconds = 300
1047+ }
1048+
1049+ return ConfigCompose (testAccEKSClusterConfig (rName , clusterName ), fmt .Sprintf (`
1050+ resource "castai_autoscaler" "test" {
1051+ cluster_id = castai_eks_cluster.test.id
1052+
1053+ autoscaler_settings {
1054+ enabled = %t
1055+ is_scoped_mode = %s
1056+ node_templates_partial_matching_enabled = %s
1057+
1058+ unschedulable_pods {
1059+ enabled = %s
1060+ }
1061+
1062+ cluster_limits {
1063+ enabled = %s
1064+
1065+ cpu {
1066+ min_cores = %d
1067+ max_cores = %d
1068+ }
1069+ }
1070+
1071+ node_downscaler {
1072+ enabled = %s
1073+
1074+ empty_nodes {
1075+ enabled = %s
1076+ delay_seconds = %d
1077+ }
1078+ }
1079+ }
1080+ }
1081+ ` , enabled , isScopedMode , nodeTemplatesPartialMatchingEnabled ,
1082+ unschedulablePodsEnabled , clusterLimitsEnabled , minCores , maxCores ,
1083+ nodeDownscalerEnabled , emptyNodesEnabled , delaySeconds ))
1084+ }
0 commit comments