github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/builtin/providers/kubernetes/resource_kubernetes_resource_quota_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/api/v1"
    12  	kubernetes "k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
    13  )
    14  
    15  func TestAccKubernetesResourceQuota_basic(t *testing.T) {
    16  	var conf api.ResourceQuota
    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_resource_quota.test",
    22  		Providers:     testAccProviders,
    23  		CheckDestroy:  testAccCheckKubernetesResourceQuotaDestroy,
    24  		Steps: []resource.TestStep{
    25  			{
    26  				Config: testAccKubernetesResourceQuotaConfig_basic(name),
    27  				Check: resource.ComposeAggregateTestCheckFunc(
    28  					testAccCheckKubernetesResourceQuotaExists("kubernetes_resource_quota.test", &conf),
    29  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.%", "1"),
    30  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.TestAnnotationOne", "one"),
    31  					testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{"TestAnnotationOne": "one"}),
    32  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.%", "3"),
    33  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.TestLabelOne", "one"),
    34  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.TestLabelThree", "three"),
    35  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.TestLabelFour", "four"),
    36  					testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{"TestLabelOne": "one", "TestLabelThree": "three", "TestLabelFour": "four"}),
    37  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.name", name),
    38  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.generation"),
    39  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.resource_version"),
    40  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.self_link"),
    41  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.uid"),
    42  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.%", "3"),
    43  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.limits.cpu", "2"),
    44  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.limits.memory", "2Gi"),
    45  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.pods", "4"),
    46  				),
    47  			},
    48  			{
    49  				Config: testAccKubernetesResourceQuotaConfig_metaModified(name),
    50  				Check: resource.ComposeAggregateTestCheckFunc(
    51  					testAccCheckKubernetesResourceQuotaExists("kubernetes_resource_quota.test", &conf),
    52  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.%", "2"),
    53  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.TestAnnotationOne", "one"),
    54  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.TestAnnotationTwo", "two"),
    55  					testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{"TestAnnotationOne": "one", "TestAnnotationTwo": "two"}),
    56  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.%", "3"),
    57  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.TestLabelOne", "one"),
    58  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.TestLabelTwo", "two"),
    59  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.TestLabelThree", "three"),
    60  					testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{"TestLabelOne": "one", "TestLabelTwo": "two", "TestLabelThree": "three"}),
    61  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.name", name),
    62  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.generation"),
    63  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.resource_version"),
    64  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.self_link"),
    65  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.uid"),
    66  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.%", "3"),
    67  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.limits.cpu", "2"),
    68  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.limits.memory", "2Gi"),
    69  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.pods", "4"),
    70  				),
    71  			},
    72  			{
    73  				Config: testAccKubernetesResourceQuotaConfig_specModified(name),
    74  				Check: resource.ComposeAggregateTestCheckFunc(
    75  					testAccCheckKubernetesResourceQuotaExists("kubernetes_resource_quota.test", &conf),
    76  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.%", "0"),
    77  					testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{}),
    78  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.%", "0"),
    79  					testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{}),
    80  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.name", name),
    81  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.generation"),
    82  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.resource_version"),
    83  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.self_link"),
    84  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.uid"),
    85  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.%", "4"),
    86  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.limits.cpu", "4"),
    87  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.requests.cpu", "1"),
    88  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.limits.memory", "4Gi"),
    89  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.pods", "10"),
    90  				),
    91  			},
    92  		},
    93  	})
    94  }
    95  
    96  func TestAccKubernetesResourceQuota_generatedName(t *testing.T) {
    97  	var conf api.ResourceQuota
    98  	prefix := "tf-acc-test-"
    99  
   100  	resource.Test(t, resource.TestCase{
   101  		PreCheck:      func() { testAccPreCheck(t) },
   102  		IDRefreshName: "kubernetes_resource_quota.test",
   103  		Providers:     testAccProviders,
   104  		CheckDestroy:  testAccCheckKubernetesResourceQuotaDestroy,
   105  		Steps: []resource.TestStep{
   106  			{
   107  				Config: testAccKubernetesResourceQuotaConfig_generatedName(prefix),
   108  				Check: resource.ComposeAggregateTestCheckFunc(
   109  					testAccCheckKubernetesResourceQuotaExists("kubernetes_resource_quota.test", &conf),
   110  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.%", "0"),
   111  					testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{}),
   112  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.%", "0"),
   113  					testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{}),
   114  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.generate_name", prefix),
   115  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.generation"),
   116  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.resource_version"),
   117  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.self_link"),
   118  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.uid"),
   119  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.%", "1"),
   120  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.pods", "10"),
   121  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.scopes.#", "0"),
   122  				),
   123  			},
   124  		},
   125  	})
   126  }
   127  
   128  func TestAccKubernetesResourceQuota_withScopes(t *testing.T) {
   129  	var conf api.ResourceQuota
   130  	name := fmt.Sprintf("tf-acc-test-%s", acctest.RandString(10))
   131  
   132  	resource.Test(t, resource.TestCase{
   133  		PreCheck:      func() { testAccPreCheck(t) },
   134  		IDRefreshName: "kubernetes_resource_quota.test",
   135  		Providers:     testAccProviders,
   136  		CheckDestroy:  testAccCheckKubernetesResourceQuotaDestroy,
   137  		Steps: []resource.TestStep{
   138  			{
   139  				Config: testAccKubernetesResourceQuotaConfig_withScopes(name),
   140  				Check: resource.ComposeAggregateTestCheckFunc(
   141  					testAccCheckKubernetesResourceQuotaExists("kubernetes_resource_quota.test", &conf),
   142  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.%", "0"),
   143  					testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{}),
   144  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.%", "0"),
   145  					testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{}),
   146  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.name", name),
   147  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.generation"),
   148  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.resource_version"),
   149  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.self_link"),
   150  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.uid"),
   151  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.%", "1"),
   152  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.pods", "10"),
   153  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.scopes.#", "1"),
   154  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.scopes.193563370", "BestEffort"),
   155  				),
   156  			},
   157  			{
   158  				Config: testAccKubernetesResourceQuotaConfig_withScopesModified(name),
   159  				Check: resource.ComposeAggregateTestCheckFunc(
   160  					testAccCheckKubernetesResourceQuotaExists("kubernetes_resource_quota.test", &conf),
   161  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.%", "0"),
   162  					testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{}),
   163  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.%", "0"),
   164  					testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{}),
   165  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.name", name),
   166  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.generation"),
   167  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.resource_version"),
   168  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.self_link"),
   169  					resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.uid"),
   170  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.%", "1"),
   171  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.pods", "10"),
   172  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.scopes.#", "1"),
   173  					resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.scopes.3022121741", "NotBestEffort"),
   174  				),
   175  			},
   176  		},
   177  	})
   178  }
   179  
   180  func TestAccKubernetesResourceQuota_importBasic(t *testing.T) {
   181  	resourceName := "kubernetes_resource_quota.test"
   182  	name := fmt.Sprintf("tf-acc-test-%s", acctest.RandString(10))
   183  
   184  	resource.Test(t, resource.TestCase{
   185  		PreCheck:     func() { testAccPreCheck(t) },
   186  		Providers:    testAccProviders,
   187  		CheckDestroy: testAccCheckKubernetesResourceQuotaDestroy,
   188  		Steps: []resource.TestStep{
   189  			{
   190  				Config: testAccKubernetesResourceQuotaConfig_basic(name),
   191  			},
   192  			{
   193  				ResourceName:      resourceName,
   194  				ImportState:       true,
   195  				ImportStateVerify: true,
   196  			},
   197  		},
   198  	})
   199  }
   200  
   201  func testAccCheckKubernetesResourceQuotaDestroy(s *terraform.State) error {
   202  	conn := testAccProvider.Meta().(*kubernetes.Clientset)
   203  
   204  	for _, rs := range s.RootModule().Resources {
   205  		if rs.Type != "kubernetes_resource_quota" {
   206  			continue
   207  		}
   208  		namespace, name := idParts(rs.Primary.ID)
   209  		resp, err := conn.CoreV1().ResourceQuotas(namespace).Get(name, meta_v1.GetOptions{})
   210  		if err == nil {
   211  			if resp.Namespace == namespace && resp.Name == name {
   212  				return fmt.Errorf("Resource Quota still exists: %s", rs.Primary.ID)
   213  			}
   214  		}
   215  	}
   216  
   217  	return nil
   218  }
   219  
   220  func testAccCheckKubernetesResourceQuotaExists(n string, obj *api.ResourceQuota) resource.TestCheckFunc {
   221  	return func(s *terraform.State) error {
   222  		rs, ok := s.RootModule().Resources[n]
   223  		if !ok {
   224  			return fmt.Errorf("Not found: %s", n)
   225  		}
   226  
   227  		conn := testAccProvider.Meta().(*kubernetes.Clientset)
   228  		namespace, name := idParts(rs.Primary.ID)
   229  		out, err := conn.CoreV1().ResourceQuotas(namespace).Get(name, meta_v1.GetOptions{})
   230  		if err != nil {
   231  			return err
   232  		}
   233  
   234  		*obj = *out
   235  		return nil
   236  	}
   237  }
   238  
   239  func testAccKubernetesResourceQuotaConfig_basic(name string) string {
   240  	return fmt.Sprintf(`
   241  resource "kubernetes_resource_quota" "test" {
   242  	metadata {
   243  		annotations {
   244  			TestAnnotationOne = "one"
   245  		}
   246  		labels {
   247  			TestLabelOne = "one"
   248  			TestLabelThree = "three"
   249  			TestLabelFour = "four"
   250  		}
   251  		name = "%s"
   252  	}
   253  	spec {
   254  		hard {
   255  			"limits.cpu" = 2
   256  			"limits.memory" = "2Gi"
   257  			pods = 4
   258  		}
   259  	}
   260  }
   261  `, name)
   262  }
   263  
   264  func testAccKubernetesResourceQuotaConfig_metaModified(name string) string {
   265  	return fmt.Sprintf(`
   266  resource "kubernetes_resource_quota" "test" {
   267  	metadata {
   268  		annotations {
   269  			TestAnnotationOne = "one"
   270  			TestAnnotationTwo = "two"
   271  		}
   272  		labels {
   273  			TestLabelOne = "one"
   274  			TestLabelTwo = "two"
   275  			TestLabelThree = "three"
   276  		}
   277  		name = "%s"
   278  	}
   279  	spec {
   280  		hard {
   281  			"limits.cpu" = 2
   282  			"limits.memory" = "2Gi"
   283  			pods = 4
   284  		}
   285  	}
   286  }
   287  `, name)
   288  }
   289  
   290  func testAccKubernetesResourceQuotaConfig_specModified(name string) string {
   291  	return fmt.Sprintf(`
   292  resource "kubernetes_resource_quota" "test" {
   293  	metadata {
   294  		name = "%s"
   295  	}
   296  	spec {
   297  		hard {
   298  			"limits.cpu" = 4
   299  			"requests.cpu" = 1
   300  			"limits.memory" = "4Gi"
   301  			pods = 10
   302  		}
   303  	}
   304  }
   305  `, name)
   306  }
   307  
   308  func testAccKubernetesResourceQuotaConfig_generatedName(prefix string) string {
   309  	return fmt.Sprintf(`
   310  resource "kubernetes_resource_quota" "test" {
   311  	metadata {
   312  		generate_name = "%s"
   313  	}
   314  	spec {
   315  		hard {
   316  			pods = 10
   317  		}
   318  	}
   319  }
   320  `, prefix)
   321  }
   322  
   323  func testAccKubernetesResourceQuotaConfig_withScopes(name string) string {
   324  	return fmt.Sprintf(`
   325  resource "kubernetes_resource_quota" "test" {
   326  	metadata {
   327  		name = "%s"
   328  	}
   329  	spec {
   330  		hard {
   331  			pods = 10
   332  		}
   333  		scopes = ["BestEffort"]
   334  	}
   335  }
   336  `, name)
   337  }
   338  
   339  func testAccKubernetesResourceQuotaConfig_withScopesModified(name string) string {
   340  	return fmt.Sprintf(`
   341  resource "kubernetes_resource_quota" "test" {
   342  	metadata {
   343  		name = "%s"
   344  	}
   345  	spec {
   346  		hard {
   347  			pods = 10
   348  		}
   349  		scopes = ["NotBestEffort"]
   350  	}
   351  }
   352  `, name)
   353  }