From a2d834c85d5c31c1b83d7975a0af9bf87a8e031e Mon Sep 17 00:00:00 2001 From: Drew Sirenko <68304519+AndrewSirenko@users.noreply.github.com> Date: Thu, 14 Mar 2024 21:10:31 +0000 Subject: [PATCH] Fix e2e test potential tag name race --- go.mod | 2 +- tests/e2e/requires_aws_api.go | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 784024122e..37be241dea 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ require ( github.com/container-storage-interface/spec v1.9.0 github.com/golang/mock v1.6.0 github.com/google/go-cmp v0.6.0 + github.com/google/uuid v1.6.0 github.com/kubernetes-csi/csi-proxy/client v1.1.3 github.com/kubernetes-csi/external-snapshotter/client/v4 v4.2.0 github.com/onsi/ginkgo/v2 v2.15.0 @@ -67,7 +68,6 @@ require ( github.com/google/gnostic-models v0.6.8 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/pprof v0.0.0-20240207164012-fb44976bdcd5 // indirect - github.com/google/uuid v1.6.0 // indirect github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 // indirect github.com/imdario/mergo v0.3.16 // indirect diff --git a/tests/e2e/requires_aws_api.go b/tests/e2e/requires_aws_api.go index 0407c55a07..88628bc4d2 100644 --- a/tests/e2e/requires_aws_api.go +++ b/tests/e2e/requires_aws_api.go @@ -16,6 +16,7 @@ package e2e import ( "fmt" + "github.com/google/uuid" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" @@ -36,9 +37,14 @@ import ( ebscsidriver "github.com/kubernetes-sigs/aws-ebs-csi-driver/pkg/driver" ) -const testTagName = "testTag" +const testTagNamePrefix = "testTag" const testTagValue = "3.1415926" +// generateTagName appends a random uuid to tag name to prevent clashes on parallel e2e test runs on shared cluster +func generateTagName() string { + return testTagNamePrefix + uuid.NewString()[:8] +} + func validateEc2Snapshot(ec2Client ec2iface.EC2API, input *ec2.DescribeSnapshotsInput) *ec2.DescribeSnapshotsOutput { describeResult, err := ec2Client.DescribeSnapshots(input) if err != nil { @@ -78,6 +84,7 @@ var _ = Describe("[ebs-csi-e2e] [single-az] [requires-aws-api] Dynamic Provision ec2Client := ec2.New(session.Must(session.NewSession())) It("should create a volume with additional tags", func() { + testTag := generateTagName() pods := []testsuites.PodDetails{ { Cmd: testsuites.PodCmdWriteToVolume("/mnt/test-1"), @@ -86,7 +93,7 @@ var _ = Describe("[ebs-csi-e2e] [single-az] [requires-aws-api] Dynamic Provision CreateVolumeParameters: map[string]string{ ebscsidriver.VolumeTypeKey: awscloud.VolumeTypeGP3, ebscsidriver.FSTypeKey: ebscsidriver.FSTypeExt4, - ebscsidriver.TagKeyPrefix: fmt.Sprintf("%s=%s", testTagName, testTagValue), + ebscsidriver.TagKeyPrefix: fmt.Sprintf("%s=%s", testTag, testTagValue), }, ClaimSize: driver.MinimumSizeForVolumeType(awscloud.VolumeTypeGP3), VolumeMount: testsuites.DefaultGeneratedVolumeMount, @@ -101,7 +108,7 @@ var _ = Describe("[ebs-csi-e2e] [single-az] [requires-aws-api] Dynamic Provision result, err := ec2Client.DescribeVolumes(&ec2.DescribeVolumesInput{ Filters: []*ec2.Filter{ { - Name: aws.String("tag:" + testTagName), + Name: aws.String("tag:" + testTag), Values: []*string{aws.String(testTagValue)}, }, }, @@ -119,6 +126,7 @@ var _ = Describe("[ebs-csi-e2e] [single-az] [requires-aws-api] Dynamic Provision }) It("should create a snapshot with additional tags", func() { + testTag := generateTagName() pod := testsuites.PodDetails{ Cmd: testsuites.PodCmdWriteToVolume("/mnt/test-1"), Volumes: []testsuites.VolumeDetails{ @@ -150,13 +158,13 @@ var _ = Describe("[ebs-csi-e2e] [single-az] [requires-aws-api] Dynamic Provision Pod: pod, RestoredPod: restoredPod, Parameters: map[string]string{ - ebscsidriver.TagKeyPrefix: fmt.Sprintf("%s=%s", testTagName, testTagValue), + ebscsidriver.TagKeyPrefix: fmt.Sprintf("%s=%s", testTag, testTagValue), }, ValidateFunc: func(_ *volumesnapshotv1.VolumeSnapshot) { validateEc2Snapshot(ec2Client, &ec2.DescribeSnapshotsInput{ Filters: []*ec2.Filter{ { - Name: aws.String("tag:" + testTagName), + Name: aws.String("tag:" + testTag), Values: []*string{aws.String(testTagValue)}, }, },