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:
@@ -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
|
||||
|
||||
|
||||
17
weed/s3api/policy_engine/types_test.go
Normal file
17
weed/s3api/policy_engine/types_test.go
Normal 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())
|
||||
}
|
||||
Reference in New Issue
Block a user