github.com/nathanielks/terraform@v0.6.1-0.20170509030759-13e1a62319dc/builtin/providers/kubernetes/resource_kubernetes_resource_quota_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/api/v1" 11 kubernetes "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5" 12 ) 13 14 func TestAccKubernetesResourceQuota_basic(t *testing.T) { 15 var conf api.ResourceQuota 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_resource_quota.test", 21 Providers: testAccProviders, 22 CheckDestroy: testAccCheckKubernetesResourceQuotaDestroy, 23 Steps: []resource.TestStep{ 24 { 25 Config: testAccKubernetesResourceQuotaConfig_basic(name), 26 Check: resource.ComposeAggregateTestCheckFunc( 27 testAccCheckKubernetesResourceQuotaExists("kubernetes_resource_quota.test", &conf), 28 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.%", "1"), 29 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.TestAnnotationOne", "one"), 30 testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{"TestAnnotationOne": "one"}), 31 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.%", "3"), 32 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.TestLabelOne", "one"), 33 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.TestLabelThree", "three"), 34 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.TestLabelFour", "four"), 35 testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{"TestLabelOne": "one", "TestLabelThree": "three", "TestLabelFour": "four"}), 36 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.name", name), 37 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.generation"), 38 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.resource_version"), 39 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.self_link"), 40 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.uid"), 41 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.%", "3"), 42 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.limits.cpu", "2"), 43 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.limits.memory", "2Gi"), 44 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.pods", "4"), 45 ), 46 }, 47 { 48 Config: testAccKubernetesResourceQuotaConfig_metaModified(name), 49 Check: resource.ComposeAggregateTestCheckFunc( 50 testAccCheckKubernetesResourceQuotaExists("kubernetes_resource_quota.test", &conf), 51 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.%", "2"), 52 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.TestAnnotationOne", "one"), 53 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.TestAnnotationTwo", "two"), 54 testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{"TestAnnotationOne": "one", "TestAnnotationTwo": "two"}), 55 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.%", "3"), 56 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.TestLabelOne", "one"), 57 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.TestLabelTwo", "two"), 58 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.TestLabelThree", "three"), 59 testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{"TestLabelOne": "one", "TestLabelTwo": "two", "TestLabelThree": "three"}), 60 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.name", name), 61 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.generation"), 62 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.resource_version"), 63 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.self_link"), 64 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.uid"), 65 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.%", "3"), 66 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.limits.cpu", "2"), 67 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.limits.memory", "2Gi"), 68 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.pods", "4"), 69 ), 70 }, 71 { 72 Config: testAccKubernetesResourceQuotaConfig_specModified(name), 73 Check: resource.ComposeAggregateTestCheckFunc( 74 testAccCheckKubernetesResourceQuotaExists("kubernetes_resource_quota.test", &conf), 75 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.%", "0"), 76 testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{}), 77 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.%", "0"), 78 testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{}), 79 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.name", name), 80 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.generation"), 81 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.resource_version"), 82 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.self_link"), 83 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.uid"), 84 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.%", "4"), 85 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.limits.cpu", "4"), 86 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.requests.cpu", "1"), 87 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.limits.memory", "4Gi"), 88 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.pods", "10"), 89 ), 90 }, 91 }, 92 }) 93 } 94 95 func TestAccKubernetesResourceQuota_generatedName(t *testing.T) { 96 var conf api.ResourceQuota 97 prefix := "tf-acc-test-" 98 99 resource.Test(t, resource.TestCase{ 100 PreCheck: func() { testAccPreCheck(t) }, 101 IDRefreshName: "kubernetes_resource_quota.test", 102 Providers: testAccProviders, 103 CheckDestroy: testAccCheckKubernetesResourceQuotaDestroy, 104 Steps: []resource.TestStep{ 105 { 106 Config: testAccKubernetesResourceQuotaConfig_generatedName(prefix), 107 Check: resource.ComposeAggregateTestCheckFunc( 108 testAccCheckKubernetesResourceQuotaExists("kubernetes_resource_quota.test", &conf), 109 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.%", "0"), 110 testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{}), 111 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.%", "0"), 112 testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{}), 113 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.generate_name", prefix), 114 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.generation"), 115 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.resource_version"), 116 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.self_link"), 117 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.uid"), 118 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.%", "1"), 119 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.pods", "10"), 120 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.scopes.#", "0"), 121 ), 122 }, 123 }, 124 }) 125 } 126 127 func TestAccKubernetesResourceQuota_withScopes(t *testing.T) { 128 var conf api.ResourceQuota 129 name := fmt.Sprintf("tf-acc-test-%s", acctest.RandString(10)) 130 131 resource.Test(t, resource.TestCase{ 132 PreCheck: func() { testAccPreCheck(t) }, 133 IDRefreshName: "kubernetes_resource_quota.test", 134 Providers: testAccProviders, 135 CheckDestroy: testAccCheckKubernetesResourceQuotaDestroy, 136 Steps: []resource.TestStep{ 137 { 138 Config: testAccKubernetesResourceQuotaConfig_withScopes(name), 139 Check: resource.ComposeAggregateTestCheckFunc( 140 testAccCheckKubernetesResourceQuotaExists("kubernetes_resource_quota.test", &conf), 141 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.%", "0"), 142 testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{}), 143 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.%", "0"), 144 testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{}), 145 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.name", name), 146 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.generation"), 147 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.resource_version"), 148 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.self_link"), 149 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.uid"), 150 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.%", "1"), 151 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.pods", "10"), 152 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.scopes.#", "1"), 153 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.scopes.193563370", "BestEffort"), 154 ), 155 }, 156 { 157 Config: testAccKubernetesResourceQuotaConfig_withScopesModified(name), 158 Check: resource.ComposeAggregateTestCheckFunc( 159 testAccCheckKubernetesResourceQuotaExists("kubernetes_resource_quota.test", &conf), 160 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.%", "0"), 161 testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{}), 162 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.%", "0"), 163 testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{}), 164 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.name", name), 165 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.generation"), 166 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.resource_version"), 167 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.self_link"), 168 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.uid"), 169 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.%", "1"), 170 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.pods", "10"), 171 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.scopes.#", "1"), 172 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.scopes.3022121741", "NotBestEffort"), 173 ), 174 }, 175 }, 176 }) 177 } 178 179 func TestAccKubernetesResourceQuota_importBasic(t *testing.T) { 180 resourceName := "kubernetes_resource_quota.test" 181 name := fmt.Sprintf("tf-acc-test-%s", acctest.RandString(10)) 182 183 resource.Test(t, resource.TestCase{ 184 PreCheck: func() { testAccPreCheck(t) }, 185 Providers: testAccProviders, 186 CheckDestroy: testAccCheckKubernetesResourceQuotaDestroy, 187 Steps: []resource.TestStep{ 188 { 189 Config: testAccKubernetesResourceQuotaConfig_basic(name), 190 }, 191 { 192 ResourceName: resourceName, 193 ImportState: true, 194 ImportStateVerify: true, 195 }, 196 }, 197 }) 198 } 199 200 func testAccCheckKubernetesResourceQuotaDestroy(s *terraform.State) error { 201 conn := testAccProvider.Meta().(*kubernetes.Clientset) 202 203 for _, rs := range s.RootModule().Resources { 204 if rs.Type != "kubernetes_resource_quota" { 205 continue 206 } 207 namespace, name := idParts(rs.Primary.ID) 208 resp, err := conn.CoreV1().ResourceQuotas(namespace).Get(name) 209 if err == nil { 210 if resp.Namespace == namespace && resp.Name == name { 211 return fmt.Errorf("Resource Quota still exists: %s", rs.Primary.ID) 212 } 213 } 214 } 215 216 return nil 217 } 218 219 func testAccCheckKubernetesResourceQuotaExists(n string, obj *api.ResourceQuota) resource.TestCheckFunc { 220 return func(s *terraform.State) error { 221 rs, ok := s.RootModule().Resources[n] 222 if !ok { 223 return fmt.Errorf("Not found: %s", n) 224 } 225 226 conn := testAccProvider.Meta().(*kubernetes.Clientset) 227 namespace, name := idParts(rs.Primary.ID) 228 out, err := conn.CoreV1().ResourceQuotas(namespace).Get(name) 229 if err != nil { 230 return err 231 } 232 233 *obj = *out 234 return nil 235 } 236 } 237 238 func testAccKubernetesResourceQuotaConfig_basic(name string) string { 239 return fmt.Sprintf(` 240 resource "kubernetes_resource_quota" "test" { 241 metadata { 242 annotations { 243 TestAnnotationOne = "one" 244 } 245 labels { 246 TestLabelOne = "one" 247 TestLabelThree = "three" 248 TestLabelFour = "four" 249 } 250 name = "%s" 251 } 252 spec { 253 hard { 254 "limits.cpu" = 2 255 "limits.memory" = "2Gi" 256 pods = 4 257 } 258 } 259 } 260 `, name) 261 } 262 263 func testAccKubernetesResourceQuotaConfig_metaModified(name string) string { 264 return fmt.Sprintf(` 265 resource "kubernetes_resource_quota" "test" { 266 metadata { 267 annotations { 268 TestAnnotationOne = "one" 269 TestAnnotationTwo = "two" 270 } 271 labels { 272 TestLabelOne = "one" 273 TestLabelTwo = "two" 274 TestLabelThree = "three" 275 } 276 name = "%s" 277 } 278 spec { 279 hard { 280 "limits.cpu" = 2 281 "limits.memory" = "2Gi" 282 pods = 4 283 } 284 } 285 } 286 `, name) 287 } 288 289 func testAccKubernetesResourceQuotaConfig_specModified(name string) string { 290 return fmt.Sprintf(` 291 resource "kubernetes_resource_quota" "test" { 292 metadata { 293 name = "%s" 294 } 295 spec { 296 hard { 297 "limits.cpu" = 4 298 "requests.cpu" = 1 299 "limits.memory" = "4Gi" 300 pods = 10 301 } 302 } 303 } 304 `, name) 305 } 306 307 func testAccKubernetesResourceQuotaConfig_generatedName(prefix string) string { 308 return fmt.Sprintf(` 309 resource "kubernetes_resource_quota" "test" { 310 metadata { 311 generate_name = "%s" 312 } 313 spec { 314 hard { 315 pods = 10 316 } 317 } 318 } 319 `, prefix) 320 } 321 322 func testAccKubernetesResourceQuotaConfig_withScopes(name string) string { 323 return fmt.Sprintf(` 324 resource "kubernetes_resource_quota" "test" { 325 metadata { 326 name = "%s" 327 } 328 spec { 329 hard { 330 pods = 10 331 } 332 scopes = ["BestEffort"] 333 } 334 } 335 `, name) 336 } 337 338 func testAccKubernetesResourceQuotaConfig_withScopesModified(name string) string { 339 return fmt.Sprintf(` 340 resource "kubernetes_resource_quota" "test" { 341 metadata { 342 name = "%s" 343 } 344 spec { 345 hard { 346 pods = 10 347 } 348 scopes = ["NotBestEffort"] 349 } 350 } 351 `, name) 352 }