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