Skip to content

Commit

Permalink
Updated test handling field manager conflict error
Browse files Browse the repository at this point in the history
  • Loading branch information
JaylonmcShan03 committed Oct 17, 2024
1 parent 8d44021 commit cda8cba
Showing 1 changed file with 95 additions and 27 deletions.
122 changes: 95 additions & 27 deletions kubernetes/resource_kubernetes_secret_v1_data_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0

package kubernetes

import (
Expand All @@ -16,19 +15,16 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

// This test function tests the basic func of the secret resource "secret_v1"
func TestAccKubernetesSecretV1Data_basic(t *testing.T) {
// Setting up the test parameters
resourceName := "kubernetes_secret_v1_data.test"
namespace := "default"
// Creating unique names to ensure tests are isolated
// Handling the case for a empty secret
func TestAccKubernetesSecretV1Data_empty(t *testing.T) {
name := fmt.Sprintf("tf-acc-test-%s", acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum))
namespace := "default"
resourceName := "kubernetes_secret_v1_data.test"

// Running the test case
resource.ParallelTest(t, resource.TestCase{
PreCheck: func() {
testAccPreCheck(t)
createSecret(name, namespace)
createEmptySecret(name, namespace)
},
IDRefreshName: resourceName,
IDRefreshIgnore: []string{"metadata.0.resource_version"},
Expand All @@ -38,16 +34,53 @@ func TestAccKubernetesSecretV1Data_basic(t *testing.T) {
},
Steps: []resource.TestStep{
{
// Test case for an empty secret
Config: testAccKubernetesSecretV1Data_empty(name),
Check: resource.ComposeAggregateTestCheckFunc(
resource.TestCheckResourceAttr(resourceName, "metadata.0.name", name),
resource.TestCheckResourceAttr(resourceName, "data.%", "0"),
resource.TestCheckResourceAttr(resourceName, "field_manager", "tftest"),
),
},
},
})
}

func createEmptySecret(name, namespace string) error {
conn, err := testAccProvider.Meta().(KubeClientsets).MainClientset()
if err != nil {
return err
}
ctx := context.Background()

secret := v1.Secret{}
secret.SetName(name)
secret.SetNamespace(namespace)
secret.Data = map[string][]byte{}
_, err = conn.CoreV1().Secrets(namespace).Create(ctx, &secret, metav1.CreateOptions{
FieldManager: "tftest",
})
return err
}

// Handling the case of secret creation with basic data
func TestAccKubernetesSecretV1Data_basic_data(t *testing.T) {
name := fmt.Sprintf("tf-acc-test-%s", acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum))
namespace := "default"
resourceName := "kubernetes_secret_v1_data.test"

resource.ParallelTest(t, resource.TestCase{
PreCheck: func() {
testAccPreCheck(t)
createSecretWithData(name, namespace)
},
IDRefreshName: resourceName,
IDRefreshIgnore: []string{"metadata.0.resource_version"},
ProviderFactories: testAccProviderFactories,
CheckDestroy: func(s *terraform.State) error {
return destroySecret(name, namespace)
},
Steps: []resource.TestStep{
{
// Test case for a secret with some data
Config: testAccKubernetesSecretV1Data_basic(name),
Check: resource.ComposeAggregateTestCheckFunc(
resource.TestCheckResourceAttr(resourceName, "metadata.0.name", name),
Expand All @@ -57,8 +90,51 @@ func TestAccKubernetesSecretV1Data_basic(t *testing.T) {
resource.TestCheckResourceAttr(resourceName, "field_manager", "tftest"),
),
},
},
})
}

func createSecretWithData(name, namespace string) error {
conn, err := testAccProvider.Meta().(KubeClientsets).MainClientset()
if err != nil {
return err
}
ctx := context.Background()

data := map[string][]byte{
"key1": []byte("value1"),
"key2": []byte("value2"),
}

secret := v1.Secret{}
secret.SetName(name)
secret.SetNamespace(namespace)
secret.Data = data
_, err = conn.CoreV1().Secrets(namespace).Create(ctx, &secret, metav1.CreateOptions{
FieldManager: "tftest",
})
return err
}

// Handling the case for a modified secret
func TestAccKubernetesSecretV1Data_modified(t *testing.T) {
name := fmt.Sprintf("tf-acc-test-%s", acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum))
namespace := "default"
resourceName := "kubernetes_secret_v1_data.test"

resource.ParallelTest(t, resource.TestCase{
PreCheck: func() {
testAccPreCheck(t)
createModifiedSecret(name, namespace)
},
IDRefreshName: resourceName,
IDRefreshIgnore: []string{"metadata.0.resource_version"},
ProviderFactories: testAccProviderFactories,
CheckDestroy: func(s *terraform.State) error {
return destroySecret(name, namespace)
},
Steps: []resource.TestStep{
{
// Testing a modified secret
Config: testAccKubernetesSecretV1Data_modified(name),
Check: resource.ComposeAggregateTestCheckFunc(
resource.TestCheckResourceAttr(resourceName, "metadata.0.name", name),
Expand All @@ -68,37 +144,29 @@ func TestAccKubernetesSecretV1Data_basic(t *testing.T) {
resource.TestCheckResourceAttr(resourceName, "field_manager", "tftest"),
),
},
{
// Testing a secret that doesn't exist
Config: testAccKubernetesSecretV1Data_empty(name),
Check: resource.ComposeAggregateTestCheckFunc(
resource.TestCheckResourceAttr(resourceName, "metadata.0.name", name),
resource.TestCheckResourceAttr(resourceName, "data.%", "0"),
resource.TestCheckResourceAttr(resourceName, "field_manager", "tftest"),
),
},
},
})
}

// Create a kubernetes secret
func createSecret(name, namespace string) error {
func createModifiedSecret(name, namespace string) error {
conn, err := testAccProvider.Meta().(KubeClientsets).MainClientset()
if err != nil {
return err
}
ctx := context.Background()

data := map[string][]byte{
"key1": []byte("value1"),
"key2": []byte("value2"),
"key1": []byte("one"),
"key3": []byte("three"),
}

secret := v1.Secret{}
secret.SetName(name)
secret.SetNamespace(namespace)
secret.Data = data
_, err = conn.CoreV1().Secrets(namespace).Create(ctx, &secret, metav1.CreateOptions{})
_, err = conn.CoreV1().Secrets(namespace).Create(ctx, &secret, metav1.CreateOptions{
FieldManager: "tftest",
})
return err
}

Expand Down Expand Up @@ -146,7 +214,7 @@ func testAccKubernetesSecretV1Data_empty(name string) string {
`, name)
}

// Generate some basic config, with a secret with test data
// Generate some basic config, with a secret with basic data
func testAccKubernetesSecretV1Data_basic(name string) string {
return fmt.Sprintf(`
resource "kubernetes_secret_v1_data" "test" {
Expand Down

0 comments on commit cda8cba

Please sign in to comment.