github.com/bradfeehan/terraform@v0.7.0-rc3.0.20170529055808-34b45c5ad841/builtin/providers/kubernetes/resource_kubernetes_horizontal_pod_autoscaler_test.go (about) 1 package kubernetes 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/hashicorp/terraform/helper/acctest" 8 "github.com/hashicorp/terraform/helper/resource" 9 "github.com/hashicorp/terraform/terraform" 10 api "k8s.io/kubernetes/pkg/apis/autoscaling/v1" 11 kubernetes "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5" 12 ) 13 14 func TestAccKubernetesHorizontalPodAutoscaler_basic(t *testing.T) { 15 var conf api.HorizontalPodAutoscaler 16 name := fmt.Sprintf("tf-acc-test-%s", acctest.RandString(10)) 17 18 resource.Test(t, resource.TestCase{ 19 PreCheck: func() { testAccPreCheck(t) }, 20 IDRefreshName: "kubernetes_horizontal_pod_autoscaler.test", 21 Providers: testAccProviders, 22 CheckDestroy: testAccCheckKubernetesHorizontalPodAutoscalerDestroy, 23 Steps: []resource.TestStep{ 24 { 25 Config: testAccKubernetesHorizontalPodAutoscalerConfig_basic(name), 26 Check: resource.ComposeAggregateTestCheckFunc( 27 testAccCheckKubernetesHorizontalPodAutoscalerExists("kubernetes_horizontal_pod_autoscaler.test", &conf), 28 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.annotations.%", "1"), 29 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.annotations.TestAnnotationOne", "one"), 30 testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{"TestAnnotationOne": "one"}), 31 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.labels.%", "3"), 32 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.labels.TestLabelOne", "one"), 33 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.labels.TestLabelThree", "three"), 34 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.labels.TestLabelFour", "four"), 35 testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{"TestLabelOne": "one", "TestLabelThree": "three", "TestLabelFour": "four"}), 36 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.name", name), 37 resource.TestCheckResourceAttrSet("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.generation"), 38 resource.TestCheckResourceAttrSet("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.resource_version"), 39 resource.TestCheckResourceAttrSet("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.self_link"), 40 resource.TestCheckResourceAttrSet("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.uid"), 41 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.#", "1"), 42 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.max_replicas", "10"), 43 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.min_replicas", "1"), 44 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.scale_target_ref.#", "1"), 45 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.scale_target_ref.0.kind", "ReplicationController"), 46 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.scale_target_ref.0.name", "TerraformAccTest"), 47 ), 48 }, 49 { 50 Config: testAccKubernetesHorizontalPodAutoscalerConfig_metaModified(name), 51 Check: resource.ComposeAggregateTestCheckFunc( 52 testAccCheckKubernetesHorizontalPodAutoscalerExists("kubernetes_horizontal_pod_autoscaler.test", &conf), 53 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.annotations.%", "2"), 54 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.annotations.TestAnnotationOne", "one"), 55 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.annotations.TestAnnotationTwo", "two"), 56 testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{"TestAnnotationOne": "one", "TestAnnotationTwo": "two"}), 57 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.labels.%", "3"), 58 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.labels.TestLabelOne", "one"), 59 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.labels.TestLabelTwo", "two"), 60 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.labels.TestLabelThree", "three"), 61 testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{"TestLabelOne": "one", "TestLabelTwo": "two", "TestLabelThree": "three"}), 62 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.name", name), 63 resource.TestCheckResourceAttrSet("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.generation"), 64 resource.TestCheckResourceAttrSet("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.resource_version"), 65 resource.TestCheckResourceAttrSet("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.self_link"), 66 resource.TestCheckResourceAttrSet("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.uid"), 67 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.#", "1"), 68 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.max_replicas", "10"), 69 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.min_replicas", "1"), 70 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.scale_target_ref.#", "1"), 71 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.scale_target_ref.0.kind", "ReplicationController"), 72 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.scale_target_ref.0.name", "TerraformAccTest"), 73 ), 74 }, 75 { 76 Config: testAccKubernetesHorizontalPodAutoscalerConfig_specModified(name), 77 Check: resource.ComposeAggregateTestCheckFunc( 78 testAccCheckKubernetesHorizontalPodAutoscalerExists("kubernetes_horizontal_pod_autoscaler.test", &conf), 79 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.annotations.%", "0"), 80 testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{}), 81 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.labels.%", "0"), 82 testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{}), 83 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.name", name), 84 resource.TestCheckResourceAttrSet("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.generation"), 85 resource.TestCheckResourceAttrSet("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.resource_version"), 86 resource.TestCheckResourceAttrSet("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.self_link"), 87 resource.TestCheckResourceAttrSet("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.uid"), 88 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.#", "1"), 89 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.max_replicas", "8"), 90 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.min_replicas", "1"), 91 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.scale_target_ref.#", "1"), 92 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.scale_target_ref.0.kind", "ReplicationController"), 93 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.scale_target_ref.0.name", "TerraformAccTestModified"), 94 ), 95 }, 96 }, 97 }) 98 } 99 100 func TestAccKubernetesHorizontalPodAutoscaler_generatedName(t *testing.T) { 101 var conf api.HorizontalPodAutoscaler 102 prefix := "tf-acc-test-" 103 104 resource.Test(t, resource.TestCase{ 105 PreCheck: func() { testAccPreCheck(t) }, 106 IDRefreshName: "kubernetes_horizontal_pod_autoscaler.test", 107 Providers: testAccProviders, 108 CheckDestroy: testAccCheckKubernetesHorizontalPodAutoscalerDestroy, 109 Steps: []resource.TestStep{ 110 { 111 Config: testAccKubernetesHorizontalPodAutoscalerConfig_generatedName(prefix), 112 Check: resource.ComposeAggregateTestCheckFunc( 113 testAccCheckKubernetesHorizontalPodAutoscalerExists("kubernetes_horizontal_pod_autoscaler.test", &conf), 114 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.annotations.%", "0"), 115 testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{}), 116 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.labels.%", "0"), 117 testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{}), 118 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.generate_name", prefix), 119 resource.TestCheckResourceAttrSet("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.generation"), 120 resource.TestCheckResourceAttrSet("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.resource_version"), 121 resource.TestCheckResourceAttrSet("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.self_link"), 122 resource.TestCheckResourceAttrSet("kubernetes_horizontal_pod_autoscaler.test", "metadata.0.uid"), 123 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.#", "1"), 124 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.max_replicas", "1"), 125 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.min_replicas", "1"), 126 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.scale_target_ref.#", "1"), 127 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.scale_target_ref.0.kind", "ReplicationController"), 128 resource.TestCheckResourceAttr("kubernetes_horizontal_pod_autoscaler.test", "spec.0.scale_target_ref.0.name", "TerraformAccTestGeneratedName"), 129 ), 130 }, 131 }, 132 }) 133 } 134 135 func TestAccKubernetesHorizontalPodAutoscaler_importBasic(t *testing.T) { 136 resourceName := "kubernetes_horizontal_pod_autoscaler.test" 137 name := fmt.Sprintf("tf-acc-test-%s", acctest.RandString(10)) 138 139 resource.Test(t, resource.TestCase{ 140 PreCheck: func() { testAccPreCheck(t) }, 141 Providers: testAccProviders, 142 CheckDestroy: testAccCheckKubernetesHorizontalPodAutoscalerDestroy, 143 Steps: []resource.TestStep{ 144 { 145 Config: testAccKubernetesHorizontalPodAutoscalerConfig_basic(name), 146 }, 147 { 148 ResourceName: resourceName, 149 ImportState: true, 150 ImportStateVerify: true, 151 }, 152 }, 153 }) 154 } 155 156 func testAccCheckKubernetesHorizontalPodAutoscalerDestroy(s *terraform.State) error { 157 conn := testAccProvider.Meta().(*kubernetes.Clientset) 158 159 for _, rs := range s.RootModule().Resources { 160 if rs.Type != "kubernetes_horizontal_pod_autoscaler" { 161 continue 162 } 163 namespace, name := idParts(rs.Primary.ID) 164 resp, err := conn.AutoscalingV1().HorizontalPodAutoscalers(namespace).Get(name) 165 if err == nil { 166 if resp.Namespace == namespace && resp.Name == name { 167 return fmt.Errorf("Horizontal Pod Autoscaler still exists: %s", rs.Primary.ID) 168 } 169 } 170 } 171 172 return nil 173 } 174 175 func testAccCheckKubernetesHorizontalPodAutoscalerExists(n string, obj *api.HorizontalPodAutoscaler) resource.TestCheckFunc { 176 return func(s *terraform.State) error { 177 rs, ok := s.RootModule().Resources[n] 178 if !ok { 179 return fmt.Errorf("Not found: %s", n) 180 } 181 182 conn := testAccProvider.Meta().(*kubernetes.Clientset) 183 namespace, name := idParts(rs.Primary.ID) 184 out, err := conn.AutoscalingV1().HorizontalPodAutoscalers(namespace).Get(name) 185 if err != nil { 186 return err 187 } 188 189 *obj = *out 190 return nil 191 } 192 } 193 194 func testAccKubernetesHorizontalPodAutoscalerConfig_basic(name string) string { 195 return fmt.Sprintf(` 196 resource "kubernetes_horizontal_pod_autoscaler" "test" { 197 metadata { 198 annotations { 199 TestAnnotationOne = "one" 200 } 201 labels { 202 TestLabelOne = "one" 203 TestLabelThree = "three" 204 TestLabelFour = "four" 205 } 206 name = "%s" 207 } 208 spec { 209 max_replicas = 10 210 scale_target_ref { 211 kind = "ReplicationController" 212 name = "TerraformAccTest" 213 } 214 } 215 } 216 `, name) 217 } 218 219 func testAccKubernetesHorizontalPodAutoscalerConfig_metaModified(name string) string { 220 return fmt.Sprintf(` 221 resource "kubernetes_horizontal_pod_autoscaler" "test" { 222 metadata { 223 annotations { 224 TestAnnotationOne = "one" 225 TestAnnotationTwo = "two" 226 } 227 labels { 228 TestLabelOne = "one" 229 TestLabelTwo = "two" 230 TestLabelThree = "three" 231 } 232 name = "%s" 233 } 234 spec { 235 max_replicas = 10 236 scale_target_ref { 237 kind = "ReplicationController" 238 name = "TerraformAccTest" 239 } 240 } 241 } 242 `, name) 243 } 244 245 func testAccKubernetesHorizontalPodAutoscalerConfig_specModified(name string) string { 246 return fmt.Sprintf(` 247 resource "kubernetes_horizontal_pod_autoscaler" "test" { 248 metadata { 249 name = "%s" 250 } 251 spec { 252 max_replicas = 8 253 scale_target_ref { 254 kind = "ReplicationController" 255 name = "TerraformAccTestModified" 256 } 257 } 258 } 259 `, name) 260 } 261 262 func testAccKubernetesHorizontalPodAutoscalerConfig_generatedName(prefix string) string { 263 return fmt.Sprintf(` 264 resource "kubernetes_horizontal_pod_autoscaler" "test" { 265 metadata { 266 generate_name = "%s" 267 } 268 spec { 269 max_replicas = 1 270 scale_target_ref { 271 kind = "ReplicationController" 272 name = "TerraformAccTestGeneratedName" 273 } 274 } 275 } 276 `, prefix) 277 }