From 2995deffd4439b622b05e6aecb7f333aa7e9a275 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20R=C3=B6hrich?= Date: Fri, 3 Jan 2025 13:50:07 +0100 Subject: [PATCH] Add Volume Delete Test Step MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add test step ensuring that volumes are deleted correctly. This test works independent of the timeout since in case the timeout is exceeded the delete operation will already be considered a fail. Thus, if the test step succeeds, the delete would not have timed out. The test step also ensures that the resource is actually removed. related-to: harvester/harvester#6415 Signed-off-by: Moritz Röhrich --- internal/tests/resource_volume_test.go | 39 ++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/internal/tests/resource_volume_test.go b/internal/tests/resource_volume_test.go index d5b20307..b27a76e6 100644 --- a/internal/tests/resource_volume_test.go +++ b/internal/tests/resource_volume_test.go @@ -9,6 +9,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/harvester/terraform-provider-harvester/pkg/client" @@ -58,10 +59,48 @@ func TestAccVolume_basic(t *testing.T) { resource.TestCheckResourceAttr(testAccVolumeResourceName, constants.FieldVolumeSize, testAccVolumeSize), ), }, + { + Config: buildVolumeConfig(testAccVolumeName, testAccVolumeDescription, testAccVolumeSize), + Destroy: true, + Check: resource.ComposeTestCheckFunc( + testAccVolumeDoesNotExist(ctx, testAccVolumeResourceName), + ), + }, }, }) } +func testAccVolumeDoesNotExist(ctx context.Context, rn string) resource.TestCheckFunc { + return func(s *terraform.State) error { + rs, ok := s.RootModule().Resources[rn] + if !ok { + return fmt.Errorf("Resource %s not found. ", rn) + } + + if rs.Primary.ID == "" { + return fmt.Errorf("Resource %s ID not set. ", rn) + } + + id := rs.Primary.ID + namespace, name, err := helper.IDParts(id) + if err != nil { + return err + } + + c := testAccProvider.Meta().(*client.Client) + _, err = c.KubeClient. + CoreV1(). + PersistentVolumeClaims(namespace). + Get(ctx, name, metav1.GetOptions{}) + if err == nil { + return fmt.Errorf("Volume %v/%v unexpectedly found", namespace, name) + } else if !apierrors.IsNotFound(err) { + return err + } + return nil + } +} + func testAccVolumeExists(ctx context.Context, n string, volume *corev1.PersistentVolumeClaim) resource.TestCheckFunc { return func(s *terraform.State) error { rs, ok := s.RootModule().Resources[n]