s3api: preserve lifecycle config responses for Terraform (#8805)

* s3api: preserve lifecycle configs for terraform

* s3api: bound lifecycle config request bodies

* s3api: make bucket config updates copy-on-write

* s3api: tighten string slice cloning
This commit is contained in:
Chris Lu
2026-03-27 22:50:02 -07:00
committed by GitHub
parent 0adb78bc6b
commit e3f052cd84
8 changed files with 475 additions and 18 deletions

View File

@@ -100,6 +100,11 @@ func NewStringOrStringSlicePtr(values ...string) *StringOrStringSlice {
return &StringOrStringSlice{values: values}
}
// CloneStringOrStringSlice returns a copy with its own backing slice.
func CloneStringOrStringSlice(value StringOrStringSlice) StringOrStringSlice {
return StringOrStringSlice{values: append([]string(nil), value.values...)}
}
// PolicyConditions represents policy conditions with proper typing
type PolicyConditions map[string]map[string]StringOrStringSlice

View File

@@ -0,0 +1,17 @@
package policy_engine
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestCloneStringOrStringSliceCopiesBackingSlice(t *testing.T) {
original := NewStringOrStringSlice("s3:GetObject", "s3:PutObject")
cloned := CloneStringOrStringSlice(original)
cloned.values[0] = "s3:DeleteObject"
assert.Equal(t, []string{"s3:GetObject", "s3:PutObject"}, original.Strings())
assert.Equal(t, []string{"s3:DeleteObject", "s3:PutObject"}, cloned.Strings())
}