github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/builtin/providers/kubernetes/resource_kubernetes_secret_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 TestAccKubernetesSecret_basic(t *testing.T) { 18 var conf api.Secret 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_secret.test", 24 Providers: testAccProviders, 25 CheckDestroy: testAccCheckKubernetesSecretDestroy, 26 Steps: []resource.TestStep{ 27 { 28 Config: testAccKubernetesSecretConfig_basic(name), 29 Check: resource.ComposeAggregateTestCheckFunc( 30 testAccCheckKubernetesSecretExists("kubernetes_secret.test", &conf), 31 resource.TestCheckResourceAttr("kubernetes_secret.test", "metadata.0.annotations.%", "2"), 32 resource.TestCheckResourceAttr("kubernetes_secret.test", "metadata.0.annotations.TestAnnotationOne", "one"), 33 resource.TestCheckResourceAttr("kubernetes_secret.test", "metadata.0.annotations.TestAnnotationTwo", "two"), 34 testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{"TestAnnotationOne": "one", "TestAnnotationTwo": "two"}), 35 resource.TestCheckResourceAttr("kubernetes_secret.test", "metadata.0.labels.%", "3"), 36 resource.TestCheckResourceAttr("kubernetes_secret.test", "metadata.0.labels.TestLabelOne", "one"), 37 resource.TestCheckResourceAttr("kubernetes_secret.test", "metadata.0.labels.TestLabelTwo", "two"), 38 resource.TestCheckResourceAttr("kubernetes_secret.test", "metadata.0.labels.TestLabelThree", "three"), 39 testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{"TestLabelOne": "one", "TestLabelTwo": "two", "TestLabelThree": "three"}), 40 resource.TestCheckResourceAttr("kubernetes_secret.test", "metadata.0.name", name), 41 resource.TestCheckResourceAttrSet("kubernetes_secret.test", "metadata.0.generation"), 42 resource.TestCheckResourceAttrSet("kubernetes_secret.test", "metadata.0.resource_version"), 43 resource.TestCheckResourceAttrSet("kubernetes_secret.test", "metadata.0.self_link"), 44 resource.TestCheckResourceAttrSet("kubernetes_secret.test", "metadata.0.uid"), 45 resource.TestCheckResourceAttr("kubernetes_secret.test", "data.%", "2"), 46 resource.TestCheckResourceAttr("kubernetes_secret.test", "data.one", "first"), 47 resource.TestCheckResourceAttr("kubernetes_secret.test", "data.two", "second"), 48 resource.TestCheckResourceAttr("kubernetes_secret.test", "type", "Opaque"), 49 testAccCheckSecretData(&conf, map[string]string{"one": "first", "two": "second"}), 50 ), 51 }, 52 { 53 Config: testAccKubernetesSecretConfig_modified(name), 54 Check: resource.ComposeAggregateTestCheckFunc( 55 testAccCheckKubernetesSecretExists("kubernetes_secret.test", &conf), 56 resource.TestCheckResourceAttr("kubernetes_secret.test", "metadata.0.annotations.%", "2"), 57 resource.TestCheckResourceAttr("kubernetes_secret.test", "metadata.0.annotations.TestAnnotationOne", "one"), 58 resource.TestCheckResourceAttr("kubernetes_secret.test", "metadata.0.annotations.Different", "1234"), 59 testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{"TestAnnotationOne": "one", "Different": "1234"}), 60 resource.TestCheckResourceAttr("kubernetes_secret.test", "metadata.0.labels.%", "2"), 61 resource.TestCheckResourceAttr("kubernetes_secret.test", "metadata.0.labels.TestLabelOne", "one"), 62 resource.TestCheckResourceAttr("kubernetes_secret.test", "metadata.0.labels.TestLabelThree", "three"), 63 testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{"TestLabelOne": "one", "TestLabelThree": "three"}), 64 resource.TestCheckResourceAttr("kubernetes_secret.test", "metadata.0.name", name), 65 resource.TestCheckResourceAttrSet("kubernetes_secret.test", "metadata.0.generation"), 66 resource.TestCheckResourceAttrSet("kubernetes_secret.test", "metadata.0.resource_version"), 67 resource.TestCheckResourceAttrSet("kubernetes_secret.test", "metadata.0.self_link"), 68 resource.TestCheckResourceAttrSet("kubernetes_secret.test", "metadata.0.uid"), 69 resource.TestCheckResourceAttr("kubernetes_secret.test", "data.%", "3"), 70 resource.TestCheckResourceAttr("kubernetes_secret.test", "data.one", "first"), 71 resource.TestCheckResourceAttr("kubernetes_secret.test", "data.two", "second"), 72 resource.TestCheckResourceAttr("kubernetes_secret.test", "data.nine", "ninth"), 73 resource.TestCheckResourceAttr("kubernetes_secret.test", "type", "Opaque"), 74 testAccCheckSecretData(&conf, map[string]string{"one": "first", "two": "second", "nine": "ninth"}), 75 ), 76 }, 77 { 78 Config: testAccKubernetesSecretConfig_noData(name), 79 Check: resource.ComposeAggregateTestCheckFunc( 80 testAccCheckKubernetesSecretExists("kubernetes_secret.test", &conf), 81 resource.TestCheckResourceAttr("kubernetes_secret.test", "metadata.0.annotations.%", "0"), 82 testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{}), 83 resource.TestCheckResourceAttr("kubernetes_secret.test", "metadata.0.labels.%", "0"), 84 testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{}), 85 resource.TestCheckResourceAttr("kubernetes_secret.test", "metadata.0.name", name), 86 resource.TestCheckResourceAttrSet("kubernetes_secret.test", "metadata.0.generation"), 87 resource.TestCheckResourceAttrSet("kubernetes_secret.test", "metadata.0.resource_version"), 88 resource.TestCheckResourceAttrSet("kubernetes_secret.test", "metadata.0.self_link"), 89 resource.TestCheckResourceAttrSet("kubernetes_secret.test", "metadata.0.uid"), 90 resource.TestCheckResourceAttr("kubernetes_secret.test", "data.%", "0"), 91 testAccCheckSecretData(&conf, map[string]string{}), 92 ), 93 }, 94 { 95 Config: testAccKubernetesSecretConfig_typeSpecified(name), 96 Check: resource.ComposeAggregateTestCheckFunc( 97 testAccCheckKubernetesSecretExists("kubernetes_secret.test", &conf), 98 resource.TestCheckResourceAttr("kubernetes_secret.test", "metadata.0.annotations.%", "0"), 99 testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{}), 100 resource.TestCheckResourceAttr("kubernetes_secret.test", "metadata.0.labels.%", "0"), 101 testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{}), 102 resource.TestCheckResourceAttr("kubernetes_secret.test", "metadata.0.name", name), 103 resource.TestCheckResourceAttrSet("kubernetes_secret.test", "metadata.0.generation"), 104 resource.TestCheckResourceAttrSet("kubernetes_secret.test", "metadata.0.resource_version"), 105 resource.TestCheckResourceAttrSet("kubernetes_secret.test", "metadata.0.self_link"), 106 resource.TestCheckResourceAttrSet("kubernetes_secret.test", "metadata.0.uid"), 107 resource.TestCheckResourceAttr("kubernetes_secret.test", "data.%", "2"), 108 resource.TestCheckResourceAttr("kubernetes_secret.test", "data.username", "admin"), 109 resource.TestCheckResourceAttr("kubernetes_secret.test", "data.password", "password"), 110 resource.TestCheckResourceAttr("kubernetes_secret.test", "type", "kubernetes.io/basic-auth"), 111 testAccCheckSecretData(&conf, map[string]string{"username": "admin", "password": "password"}), 112 ), 113 }, 114 }, 115 }) 116 } 117 118 func TestAccKubernetesSecret_importBasic(t *testing.T) { 119 resourceName := "kubernetes_secret.test" 120 name := fmt.Sprintf("tf-acc-test-%s", acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum)) 121 122 resource.Test(t, resource.TestCase{ 123 PreCheck: func() { testAccPreCheck(t) }, 124 Providers: testAccProviders, 125 CheckDestroy: testAccCheckKubernetesSecretDestroy, 126 Steps: []resource.TestStep{ 127 { 128 Config: testAccKubernetesSecretConfig_basic(name), 129 }, 130 131 { 132 ResourceName: resourceName, 133 ImportState: true, 134 ImportStateVerify: true, 135 }, 136 }, 137 }) 138 } 139 140 func TestAccKubernetesSecret_generatedName(t *testing.T) { 141 var conf api.Secret 142 prefix := "tf-acc-test-gen-" 143 144 resource.Test(t, resource.TestCase{ 145 PreCheck: func() { testAccPreCheck(t) }, 146 IDRefreshName: "kubernetes_secret.test", 147 Providers: testAccProviders, 148 CheckDestroy: testAccCheckKubernetesSecretDestroy, 149 Steps: []resource.TestStep{ 150 { 151 Config: testAccKubernetesSecretConfig_generatedName(prefix), 152 Check: resource.ComposeAggregateTestCheckFunc( 153 testAccCheckKubernetesSecretExists("kubernetes_secret.test", &conf), 154 resource.TestCheckResourceAttr("kubernetes_secret.test", "metadata.0.annotations.%", "0"), 155 testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{}), 156 resource.TestCheckResourceAttr("kubernetes_secret.test", "metadata.0.labels.%", "0"), 157 testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{}), 158 resource.TestCheckResourceAttr("kubernetes_secret.test", "metadata.0.generate_name", prefix), 159 resource.TestMatchResourceAttr("kubernetes_secret.test", "metadata.0.name", regexp.MustCompile("^"+prefix)), 160 resource.TestCheckResourceAttrSet("kubernetes_secret.test", "metadata.0.generation"), 161 resource.TestCheckResourceAttrSet("kubernetes_secret.test", "metadata.0.resource_version"), 162 resource.TestCheckResourceAttrSet("kubernetes_secret.test", "metadata.0.self_link"), 163 resource.TestCheckResourceAttrSet("kubernetes_secret.test", "metadata.0.uid"), 164 ), 165 }, 166 }, 167 }) 168 } 169 170 func TestAccKubernetesSecret_importGeneratedName(t *testing.T) { 171 resourceName := "kubernetes_secret.test" 172 prefix := "tf-acc-test-gen-import-" 173 174 resource.Test(t, resource.TestCase{ 175 PreCheck: func() { testAccPreCheck(t) }, 176 Providers: testAccProviders, 177 CheckDestroy: testAccCheckKubernetesSecretDestroy, 178 Steps: []resource.TestStep{ 179 { 180 Config: testAccKubernetesSecretConfig_generatedName(prefix), 181 }, 182 183 { 184 ResourceName: resourceName, 185 ImportState: true, 186 ImportStateVerify: true, 187 }, 188 }, 189 }) 190 } 191 192 func testAccCheckSecretData(m *api.Secret, expected map[string]string) resource.TestCheckFunc { 193 return func(s *terraform.State) error { 194 if len(expected) == 0 && len(m.Data) == 0 { 195 return nil 196 } 197 if !reflect.DeepEqual(byteMapToStringMap(m.Data), expected) { 198 return fmt.Errorf("%s data don't match.\nExpected: %q\nGiven: %q", 199 m.Name, expected, m.Data) 200 } 201 return nil 202 } 203 } 204 205 func testAccCheckKubernetesSecretDestroy(s *terraform.State) error { 206 conn := testAccProvider.Meta().(*kubernetes.Clientset) 207 208 for _, rs := range s.RootModule().Resources { 209 if rs.Type != "kubernetes_secret" { 210 continue 211 } 212 namespace, name := idParts(rs.Primary.ID) 213 resp, err := conn.CoreV1().Secrets(namespace).Get(name, meta_v1.GetOptions{}) 214 if err == nil { 215 if resp.Name == rs.Primary.ID { 216 return fmt.Errorf("Secret still exists: %s", rs.Primary.ID) 217 } 218 } 219 } 220 221 return nil 222 } 223 224 func testAccCheckKubernetesSecretExists(n string, obj *api.Secret) resource.TestCheckFunc { 225 return func(s *terraform.State) error { 226 rs, ok := s.RootModule().Resources[n] 227 if !ok { 228 return fmt.Errorf("Not found: %s", n) 229 } 230 231 conn := testAccProvider.Meta().(*kubernetes.Clientset) 232 namespace, name := idParts(rs.Primary.ID) 233 out, err := conn.CoreV1().Secrets(namespace).Get(name, meta_v1.GetOptions{}) 234 if err != nil { 235 return err 236 } 237 238 *obj = *out 239 return nil 240 } 241 } 242 243 func testAccKubernetesSecretConfig_basic(name string) string { 244 return fmt.Sprintf(` 245 resource "kubernetes_secret" "test" { 246 metadata { 247 annotations { 248 TestAnnotationOne = "one" 249 TestAnnotationTwo = "two" 250 } 251 labels { 252 TestLabelOne = "one" 253 TestLabelTwo = "two" 254 TestLabelThree = "three" 255 } 256 name = "%s" 257 } 258 data { 259 one = "first" 260 two = "second" 261 } 262 }`, name) 263 } 264 265 func testAccKubernetesSecretConfig_modified(name string) string { 266 return fmt.Sprintf(` 267 resource "kubernetes_secret" "test" { 268 metadata { 269 annotations { 270 TestAnnotationOne = "one" 271 Different = "1234" 272 } 273 labels { 274 TestLabelOne = "one" 275 TestLabelThree = "three" 276 } 277 name = "%s" 278 } 279 data { 280 one = "first" 281 two = "second" 282 nine = "ninth" 283 } 284 }`, name) 285 } 286 287 func testAccKubernetesSecretConfig_noData(name string) string { 288 return fmt.Sprintf(` 289 resource "kubernetes_secret" "test" { 290 metadata { 291 name = "%s" 292 } 293 }`, name) 294 } 295 296 func testAccKubernetesSecretConfig_typeSpecified(name string) string { 297 return fmt.Sprintf(` 298 resource "kubernetes_secret" "test" { 299 metadata { 300 name = "%s" 301 } 302 data { 303 username = "admin" 304 password = "password" 305 } 306 type = "kubernetes.io/basic-auth" 307 }`, name) 308 } 309 310 func testAccKubernetesSecretConfig_generatedName(prefix string) string { 311 return fmt.Sprintf(` 312 resource "kubernetes_secret" "test" { 313 metadata { 314 generate_name = "%s" 315 } 316 data { 317 one = "first" 318 two = "second" 319 } 320 }`, prefix) 321 }