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  }