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