diff --git a/pkg/lifecycle/lifecycle.go b/pkg/lifecycle/lifecycle.go index 743d8eca9..88a56b09f 100644 --- a/pkg/lifecycle/lifecycle.go +++ b/pkg/lifecycle/lifecycle.go @@ -329,15 +329,15 @@ type Expiration struct { XMLName xml.Name `xml:"Expiration,omitempty" json:"-"` Date ExpirationDate `xml:"Date,omitempty" json:"Date,omitempty"` Days ExpirationDays `xml:"Days,omitempty" json:"Days,omitempty"` - DeleteMarker ExpireDeleteMarker `xml:"ExpiredObjectDeleteMarker,omitempty"` + DeleteMarker ExpireDeleteMarker `xml:"ExpiredObjectDeleteMarker,omitempty" json:"ExpiredObjectDeleteMarker,omitempty"` } // MarshalJSON customizes json encoding by removing empty day/date specification. func (e Expiration) MarshalJSON() ([]byte, error) { type expiration struct { - Date *ExpirationDate `json:"Date,omitempty"` - Days *ExpirationDays `json:"Days,omitempty"` - DeleteMarker ExpireDeleteMarker + Date *ExpirationDate `json:"Date,omitempty"` + Days *ExpirationDays `json:"Days,omitempty"` + DeleteMarker ExpireDeleteMarker `json:"ExpiredObjectDeleteMarker,omitempty"` } newexp := expiration{ diff --git a/pkg/lifecycle/lifecycle_test.go b/pkg/lifecycle/lifecycle_test.go index 7732ebed7..52301cb23 100644 --- a/pkg/lifecycle/lifecycle_test.go +++ b/pkg/lifecycle/lifecycle_test.go @@ -18,6 +18,7 @@ package lifecycle import ( + "bytes" "encoding/json" "encoding/xml" "testing" @@ -201,6 +202,13 @@ func TestLifecycleJSONRoundtrip(t *testing.T) { ID: "rule-5", Status: "Enabled", }, + { + Expiration: Expiration{ + DeleteMarker: true, + }, + ID: "rule-6", + Status: "Enabled", + }, }, } @@ -222,6 +230,9 @@ func TestLifecycleJSONRoundtrip(t *testing.T) { if !lc.Rules[i].Transition.equals(got.Rules[i].Transition) { t.Fatalf("expected %#v got %#v", lc.Rules[i].Transition, got.Rules[i].Transition) } + if lc.Rules[i].Expiration != got.Rules[i].Expiration { + t.Fatalf("expected %#v got %#v", lc.Rules[i].Expiration, got.Rules[i].Expiration) + } } } @@ -299,3 +310,26 @@ func (n NoncurrentVersionTransition) equals(m NoncurrentVersionTransition) bool func (t Transition) equals(u Transition) bool { return t.Days == u.Days && t.Date.Equal(u.Date.Time) && t.StorageClass == u.StorageClass } + +func TestExpiredObjectDeleteMarker(t *testing.T) { + expected := []byte(`{"Rules":[{"Expiration":{"ExpiredObjectDeleteMarker":true},"ID":"expired-object-delete-marker","Status":"Enabled"}]}`) + lc := Configuration{ + Rules: []Rule{ + { + Expiration: Expiration{ + DeleteMarker: true, + }, + ID: "expired-object-delete-marker", + Status: "Enabled", + }, + }, + } + + got, err := json.Marshal(lc) + if err != nil { + t.Fatalf("Failed to marshal due to %v", err) + } + if !bytes.Equal(expected, got) { + t.Fatalf("Expected %s but got %s", expected, got) + } +}