Skip to content

Commit

Permalink
Merge pull request #35222 from hashicorp/t-release/4.x-s3-object-key-…
Browse files Browse the repository at this point in the history
…leading-multiple-slashes

[release/4.x] d/aws_s3_object: Test key with multiple leading slashes
  • Loading branch information
ewbankkit authored Jan 10, 2024
2 parents 7ee4abc + 1ffd50d commit 23f68e4
Showing 1 changed file with 90 additions and 0 deletions.
90 changes: 90 additions & 0 deletions internal/service/s3/object_data_source_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -487,6 +487,60 @@ func TestAccS3ObjectDataSource_leadingDotSlash(t *testing.T) {
})
}

func TestAccS3ObjectDataSource_leadingMultipleSlashes(t *testing.T) {
ctx := acctest.Context(t)
var rObj s3.GetObjectOutput
var dsObj1, dsObj2, dsObj3 s3.GetObjectOutput

resourceName := "aws_s3_object.object"
dataSourceName1 := "data.aws_s3_object.obj1"
dataSourceName2 := "data.aws_s3_object.obj2"
dataSourceName3 := "data.aws_s3_object.obj3"

rInt := sdkacctest.RandInt()
resourceOnlyConf, conf := testAccObjectDataSourceConfig_leadingMultipleSlashes(rInt)

resource.ParallelTest(t, resource.TestCase{
PreCheck: func() { acctest.PreCheck(ctx, t) },
ErrorCheck: acctest.ErrorCheck(t, s3.EndpointsID),
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories,
PreventPostDestroyRefresh: true,
Steps: []resource.TestStep{
{ // nosemgrep:ci.test-config-funcs-correct-form
Config: resourceOnlyConf,
Check: resource.ComposeTestCheckFunc(
testAccCheckObjectExists(ctx, resourceName, &rObj),
),
},
{ // nosemgrep:ci.test-config-funcs-correct-form
Config: conf,
Check: resource.ComposeTestCheckFunc(
testAccCheckObjectExistsDataSource(ctx, dataSourceName1, &dsObj1),
resource.TestCheckResourceAttr(dataSourceName1, "content_length", "3"),
resource.TestCheckResourceAttrPair(dataSourceName1, "content_type", resourceName, "content_type"),
resource.TestCheckResourceAttrPair(dataSourceName1, "etag", resourceName, "etag"),
resource.TestMatchResourceAttr(dataSourceName1, "last_modified", regexp.MustCompile(rfc1123RegexPattern)),
resource.TestCheckResourceAttr(dataSourceName1, "body", "yes"),

testAccCheckObjectExistsDataSource(ctx, dataSourceName2, &dsObj2),
resource.TestCheckResourceAttr(dataSourceName2, "content_length", "3"),
resource.TestCheckResourceAttrPair(dataSourceName2, "content_type", resourceName, "content_type"),
resource.TestCheckResourceAttrPair(dataSourceName2, "etag", resourceName, "etag"),
resource.TestMatchResourceAttr(dataSourceName2, "last_modified", regexp.MustCompile(rfc1123RegexPattern)),
resource.TestCheckResourceAttr(dataSourceName2, "body", "yes"),

testAccCheckObjectExistsDataSource(ctx, dataSourceName3, &dsObj3),
resource.TestCheckResourceAttr(dataSourceName3, "content_length", "3"),
resource.TestCheckResourceAttrPair(dataSourceName3, "content_type", resourceName, "content_type"),
resource.TestCheckResourceAttrPair(dataSourceName3, "etag", resourceName, "etag"),
resource.TestMatchResourceAttr(dataSourceName3, "last_modified", regexp.MustCompile(rfc1123RegexPattern)),
resource.TestCheckResourceAttr(dataSourceName3, "body", "yes"),
),
},
},
})
}

func testAccCheckObjectExistsDataSource(ctx context.Context, n string, obj *s3.GetObjectOutput) resource.TestCheckFunc {
return func(s *terraform.State) error {
rs, ok := s.RootModule().Resources[n]
Expand Down Expand Up @@ -859,3 +913,39 @@ data "aws_s3_object" "obj2" {

return resources, both
}

func testAccObjectDataSourceConfig_leadingMultipleSlashes(randInt int) (string, string) {
resources := fmt.Sprintf(`
resource "aws_s3_bucket" "object_bucket" {
bucket = "tf-object-test-bucket-%[1]d"
}
resource "aws_s3_object" "object" {
bucket = aws_s3_bucket.object_bucket.bucket
key = "///tf-testing-obj-%[1]d-readable"
content = "yes"
content_type = "text/plain"
}
`, randInt)

both := fmt.Sprintf(`
%[1]s
data "aws_s3_object" "obj1" {
bucket = aws_s3_bucket.object_bucket.bucket
key = "tf-testing-obj-%[2]d-readable"
}
data "aws_s3_object" "obj2" {
bucket = aws_s3_bucket.object_bucket.bucket
key = "/tf-testing-obj-%[2]d-readable"
}
data "aws_s3_object" "obj3" {
bucket = aws_s3_bucket.object_bucket.bucket
key = "//tf-testing-obj-%[2]d-readable"
}
`, resources, randInt)

return resources, both
}

0 comments on commit 23f68e4

Please sign in to comment.