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  }