From e3c86e545ae0c37a2c6b04a967bf6fadd76fa071 Mon Sep 17 00:00:00 2001 From: "taowei.wtw" Date: Wed, 31 Mar 2021 21:14:50 +0800 Subject: [PATCH] support transfer accelerator api --- oss/client.go | 61 ++++++++++++++++++++++++++++++++++++++++++++++ oss/client_test.go | 55 ++++++++++++++++++++++++++++++++++++----- oss/conn.go | 2 +- oss/const.go | 2 +- oss/type.go | 6 +++++ 5 files changed, 118 insertions(+), 8 deletions(-) diff --git a/oss/client.go b/oss/client.go index f9fc0fa4..aacf3e7f 100644 --- a/oss/client.go +++ b/oss/client.go @@ -1527,6 +1527,67 @@ func (client Client) GetBucketWorm(bucketName string, options ...Option) (WormCo return out, err } +// SetBucketTransferAcc set bucket transfer acceleration configuration +// bucketName the bucket name. +// accConf bucket transfer acceleration configuration +// error it's nil if no error, otherwise it's an error object. +// +func (client Client) SetBucketTransferAcc(bucketName string, accConf TransferAccConfiguration, options ...Option) error { + bs, err := xml.Marshal(accConf) + if err != nil { + return err + } + buffer := new(bytes.Buffer) + buffer.Write(bs) + + contentType := http.DetectContentType(buffer.Bytes()) + headers := make(map[string]string) + headers[HTTPHeaderContentType] = contentType + + params := map[string]interface{}{} + params["transferAcceleration"] = nil + resp, err := client.do("PUT", bucketName, params, headers, buffer, options...) + if err != nil { + return err + } + defer resp.Body.Close() + return CheckRespCode(resp.StatusCode, []int{http.StatusOK}) +} + +// GetBucketTransferAcc get bucket transfer acceleration configuration +// bucketName the bucket name. +// accConf bucket transfer acceleration configuration +// error it's nil if no error, otherwise it's an error object. +// +func (client Client) GetBucketTransferAcc(bucketName string, options ...Option) (TransferAccConfiguration, error) { + var out TransferAccConfiguration + params := map[string]interface{}{} + params["transferAcceleration"] = nil + resp, err := client.do("GET", bucketName, params, nil, nil) + if err != nil { + return out, err + } + defer resp.Body.Close() + + err = xmlUnmarshal(resp.Body, &out) + return out, err +} + +// DeleteBucketTransferAcc delete bucket transfer acceleration configuration +// bucketName the bucket name. +// error it's nil if no error, otherwise it's an error object. +// +func (client Client) DeleteBucketTransferAcc(bucketName string, options ...Option) error { + params := map[string]interface{}{} + params["transferAcceleration"] = nil + resp, err := client.do("DELETE", bucketName, params, nil, nil) + if err != nil { + return err + } + defer resp.Body.Close() + return CheckRespCode(resp.StatusCode, []int{http.StatusNoContent}) +} + // LimitUploadSpeed set upload bandwidth limit speed,default is 0,unlimited // upSpeed KB/s, 0 is unlimited,default is 0 // error it's nil if success, otherwise failure diff --git a/oss/client_test.go b/oss/client_test.go index cb1bdaec..687a17a5 100644 --- a/oss/client_test.go +++ b/oss/client_test.go @@ -1832,14 +1832,14 @@ func (s *OssClientSuite) TestSetBucketWebsiteXml(c *C) { c.Assert(*res.RoutingRules[0].Redirect.MirrorCheckMd5, Equals, false) c.Assert(*res.RoutingRules[0].Redirect.MirrorHeaders.PassAll, Equals, false) - // test GetBucketWebsite xml - xmlText, err:= client.GetBucketWebsiteXml(bucketNameTest) - c.Assert(err, IsNil) + // test GetBucketWebsite xml + xmlText, err := client.GetBucketWebsiteXml(bucketNameTest) + c.Assert(err, IsNil) - c.Assert(strings.Contains(xmlText, "myheader-key1"), Equals, true) - c.Assert(strings.Contains(xmlText, "myheader-key2"), Equals, true) + c.Assert(strings.Contains(xmlText, "myheader-key1"), Equals, true) + c.Assert(strings.Contains(xmlText, "myheader-key2"), Equals, true) - err = client.DeleteBucket(bucketNameTest) + err = client.DeleteBucket(bucketNameTest) c.Assert(err, IsNil) } @@ -3796,3 +3796,46 @@ func (s *OssClientSuite) TestExtendBucketWorm(c *C) { err = client.DeleteBucket(bucketNameTest) c.Assert(err, IsNil) } + +// TestBucketTransferAcc +func (s *OssClientSuite) TestBucketTransferAcc(c *C) { + var bucketNameTest = bucketNamePrefix + "-acc-" + RandLowStr(6) + client, err := New(endpoint, accessID, accessKey) + c.Assert(err, IsNil) + + err = client.CreateBucket(bucketNameTest) + c.Assert(err, IsNil) + + accConfig := TransferAccConfiguration{} + accConfig.Enabled = true + + // SetBucketTransferAcc true + err = client.SetBucketTransferAcc(bucketNameTest, accConfig) + c.Assert(err, IsNil) + + // GetBucketTransferAcc + accConfigRes, err := client.GetBucketTransferAcc(bucketNameTest) + c.Assert(err, IsNil) + c.Assert(accConfigRes.Enabled, Equals, true) + + // SetBucketTransferAcc false + accConfig.Enabled = false + err = client.SetBucketTransferAcc(bucketNameTest, accConfig) + c.Assert(err, IsNil) + + // GetBucketTransferAcc + accConfigRes, err = client.GetBucketTransferAcc(bucketNameTest) + c.Assert(err, IsNil) + c.Assert(accConfigRes.Enabled, Equals, false) + + // DeleteBucketTransferAcc + err = client.DeleteBucketTransferAcc(bucketNameTest) + c.Assert(err, IsNil) + + // GetBucketTransferAcc + _, err = client.GetBucketTransferAcc(bucketNameTest) + c.Assert(err, NotNil) + + err = client.DeleteBucket(bucketNameTest) + c.Assert(err, IsNil) +} diff --git a/oss/conn.go b/oss/conn.go index fbbe7a81..fbbb1bb7 100644 --- a/oss/conn.go +++ b/oss/conn.go @@ -47,7 +47,7 @@ var signKeyList = []string{"acl", "uploads", "location", "cors", "inventory", "inventoryId", "continuation-token", "asyncFetch", "worm", "wormId", "wormExtend", "withHashContext", "x-oss-enable-md5", "x-oss-enable-sha1", "x-oss-enable-sha256", - "x-oss-hash-ctx", "x-oss-md5-ctx", + "x-oss-hash-ctx", "x-oss-md5-ctx", "transferAcceleration", } // init initializes Conn diff --git a/oss/const.go b/oss/const.go index 050d178b..6e02ef52 100644 --- a/oss/const.go +++ b/oss/const.go @@ -234,7 +234,7 @@ const ( NullVersion = "null" - Version = "v2.1.7" // Go SDK version + Version = "v2.1.8" // Go SDK version ) // FrameType diff --git a/oss/type.go b/oss/type.go index 24c3bd9f..e80d2db5 100644 --- a/oss/type.go +++ b/oss/type.go @@ -1246,3 +1246,9 @@ type WormConfiguration struct { RetentionPeriodInDays int `xml:"RetentionPeriodInDays"` // specify retention days CreationDate string `xml:"CreationDate,omitempty"` } + +// TransferAccConfiguration define transfer acceleration configuration +type TransferAccConfiguration struct { + XMLName xml.Name `xml:"TransferAccelerationConfiguration"` + Enabled bool `xml:"Enabled"` +}