Skip to content

Commit 13ccff3

Browse files
author
jojoliang
committed
add Put ObjectRetention
1 parent f019b7c commit 13ccff3

File tree

4 files changed

+57
-1
lines changed

4 files changed

+57
-1
lines changed

bucket_object_lock.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ type ObjectGetRetentionOptions struct {
4848
type ObjectGetRetentionResult struct {
4949
XMLName xml.Name `xml:"Retention"`
5050
RetainUntilDate string `xml:"RetainUntilDate,omitempty"`
51+
Mode string `xml:"Mode,omitempty"`
5152
}
5253

5354
func (s *ObjectService) GetRetention(ctx context.Context, key string, opt *ObjectGetRetentionOptions) (*ObjectGetRetentionResult, *Response, error) {
@@ -62,3 +63,20 @@ func (s *ObjectService) GetRetention(ctx context.Context, key string, opt *Objec
6263
resp, err := s.client.doRetry(ctx, &sendOpt)
6364
return &res, resp, err
6465
}
66+
67+
type ObjectPutRetentionOptions struct {
68+
XMLName xml.Name `xml:"Retention"`
69+
RetainUntilDate string `xml:"RetainUntilDate,omitempty"`
70+
Mode string `xml:"Mode,omitempty"`
71+
}
72+
73+
func (s *ObjectService) PutRetention(ctx context.Context, key string, opt *ObjectPutRetentionOptions) (*Response, error) {
74+
sendOpt := sendOptions{
75+
baseURL: s.client.BaseURL.BucketURL,
76+
uri: "/" + encodeURIComponent(key) + "?retention",
77+
method: http.MethodPut,
78+
body: opt,
79+
}
80+
resp, err := s.client.doRetry(ctx, &sendOpt)
81+
return resp, err
82+
}

bucket_object_lock_test.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,3 +110,34 @@ func TestBucketService_GetRetention(t *testing.T) {
110110
t.Errorf("Object.GetRetention returned %+v, want %+v", res, want)
111111
}
112112
}
113+
114+
func TestBucketService_PutRetention(t *testing.T) {
115+
setup()
116+
defer teardown()
117+
118+
opt := &ObjectPutRetentionOptions{
119+
RetainUntilDate: "2022-12-10T08:34:48.000Z",
120+
Mode: "COMPLIANCE",
121+
}
122+
123+
key := "example"
124+
mux.HandleFunc("/example", func(w http.ResponseWriter, r *http.Request) {
125+
testMethod(t, r, "PUT")
126+
vs := values{
127+
"retention": "",
128+
}
129+
testFormValues(t, r, vs)
130+
body := new(ObjectPutRetentionOptions)
131+
xml.NewDecoder(r.Body).Decode(body)
132+
want := opt
133+
want.XMLName = xml.Name{Local: "Retention"}
134+
if !reflect.DeepEqual(body, want) {
135+
t.Errorf("Object.PutRetention request\n body: %+v\nwant %+v\n", body, want)
136+
}
137+
})
138+
139+
_, err := client.Object.PutRetention(context.Background(), key, opt)
140+
if err != nil {
141+
t.Fatalf("Object.GetRetention returned error: %v", err)
142+
}
143+
}

cos.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import (
2424

2525
const (
2626
// Version current go sdk version
27-
Version = "0.7.42"
27+
Version = "0.7.43"
2828
UserAgent = "cos-go-sdk-v5/" + Version
2929
contentTypeXML = "application/xml"
3030
defaultServiceBaseURL = "http://service.cos.myqcloud.com"

example/bucket/object_lock.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,13 @@ func main() {
6060
log_status(err)
6161
fmt.Printf("%+v\n", res)
6262

63+
ropt := &cos.ObjectPutRetentionOptions{
64+
RetainUntilDate: "2022-12-10T08:34:48.000Z",
65+
Mode: "COMPLIANCE",
66+
}
67+
_, err = c.Object.PutRetention(context.Background(), "test", ropt)
68+
log_status(err)
69+
6370
r, _, err := c.Object.GetRetention(context.Background(), "test", nil)
6471
log_status(err)
6572
fmt.Printf("%+v\n", r)

0 commit comments

Comments
 (0)