jojoliang
4 years ago
3 changed files with 187 additions and 0 deletions
-
47bucket_intelligenttiering.go
-
76bucket_intelligenttiering_test.go
-
64example/bucket/intelligenttiering.go
@ -0,0 +1,47 @@ |
|||||
|
package cos |
||||
|
|
||||
|
import ( |
||||
|
"context" |
||||
|
"encoding/xml" |
||||
|
"net/http" |
||||
|
) |
||||
|
|
||||
|
type BucketIntelligentTieringTransition struct { |
||||
|
Days int `xml:"Days,omitempty"` |
||||
|
RequestFrequent int `xml:"RequestFrequent,omitempty"` |
||||
|
} |
||||
|
|
||||
|
type BucketPutIntelligentTieringOptions struct { |
||||
|
XMLName xml.Name `xml:"IntelligentTieringConfiguration"` |
||||
|
Status string `xml:"Status,omitempty"` |
||||
|
Transition *BucketIntelligentTieringTransition `xml:"Transition,omitempty"` |
||||
|
} |
||||
|
|
||||
|
type BucketGetIntelligentTieringResult BucketPutIntelligentTieringOptions |
||||
|
|
||||
|
func (s *BucketService) PutIntelligentTiering(ctx context.Context, opt *BucketPutIntelligentTieringOptions) (*Response, error) { |
||||
|
if opt != nil && opt.Transition != nil { |
||||
|
opt.Transition.RequestFrequent = 1 |
||||
|
} |
||||
|
sendOpt := sendOptions{ |
||||
|
baseURL: s.client.BaseURL.BucketURL, |
||||
|
uri: "/?intelligenttiering", |
||||
|
method: http.MethodPut, |
||||
|
body: opt, |
||||
|
} |
||||
|
resp, err := s.client.send(ctx, &sendOpt) |
||||
|
return resp, err |
||||
|
} |
||||
|
|
||||
|
func (s *BucketService) GetIntelligentTiering(ctx context.Context) (*BucketGetIntelligentTieringResult, *Response, error) { |
||||
|
var res BucketGetIntelligentTieringResult |
||||
|
sendOpt := sendOptions{ |
||||
|
baseURL: s.client.BaseURL.BucketURL, |
||||
|
uri: "/?intelligenttiering", |
||||
|
method: http.MethodGet, |
||||
|
result: &res, |
||||
|
} |
||||
|
resp, err := s.client.send(ctx, &sendOpt) |
||||
|
return &res, resp, err |
||||
|
|
||||
|
} |
@ -0,0 +1,76 @@ |
|||||
|
package cos |
||||
|
|
||||
|
import ( |
||||
|
"context" |
||||
|
"encoding/xml" |
||||
|
"fmt" |
||||
|
"net/http" |
||||
|
"reflect" |
||||
|
"testing" |
||||
|
) |
||||
|
|
||||
|
func TestBucketService_PutIntelligentTiering(t *testing.T) { |
||||
|
setup() |
||||
|
defer teardown() |
||||
|
opt := &BucketPutIntelligentTieringOptions{ |
||||
|
Status: "Enabled", |
||||
|
Transition: &BucketIntelligentTieringTransition{ |
||||
|
Days: 30, |
||||
|
}, |
||||
|
} |
||||
|
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { |
||||
|
testMethod(t, r, http.MethodPut) |
||||
|
vs := values{ |
||||
|
"intelligenttiering": "", |
||||
|
} |
||||
|
testFormValues(t, r, vs) |
||||
|
|
||||
|
body := &BucketPutIntelligentTieringOptions{} |
||||
|
xml.NewDecoder(r.Body).Decode(body) |
||||
|
want := opt |
||||
|
want.XMLName = xml.Name{Local: "IntelligentTieringConfiguration"} |
||||
|
if !reflect.DeepEqual(want, body) { |
||||
|
t.Fatalf("Bucket.PutIntelligentTiering request\n body: %+v\n, want %+v\n", body, want) |
||||
|
} |
||||
|
}) |
||||
|
|
||||
|
_, err := client.Bucket.PutIntelligentTiering(context.Background(), opt) |
||||
|
if err != nil { |
||||
|
t.Fatalf("Bucket.PutIntelligentTiering failed, error: %v", err) |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
func TestBucketService_GetIntelligentTiering(t *testing.T) { |
||||
|
setup() |
||||
|
defer teardown() |
||||
|
|
||||
|
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { |
||||
|
testMethod(t, r, http.MethodGet) |
||||
|
vs := values{ |
||||
|
"intelligenttiering": "", |
||||
|
} |
||||
|
testFormValues(t, r, vs) |
||||
|
|
||||
|
fmt.Fprint(w, `<IntelligentTieringConfiguration> |
||||
|
<Status>Enabled</Status> |
||||
|
<Transition> |
||||
|
<Days>30</Days> |
||||
|
</Transition> |
||||
|
</IntelligentTieringConfiguration>`) |
||||
|
}) |
||||
|
res, _, err := client.Bucket.GetIntelligentTiering(context.Background()) |
||||
|
if err != nil { |
||||
|
t.Fatalf("Bucket.GetIntelligentTiering failed, error: %v", err) |
||||
|
} |
||||
|
want := &BucketGetIntelligentTieringResult{ |
||||
|
XMLName: xml.Name{Local: "IntelligentTieringConfiguration"}, |
||||
|
Status: "Enabled", |
||||
|
Transition: &BucketIntelligentTieringTransition{ |
||||
|
Days: 30, |
||||
|
}, |
||||
|
} |
||||
|
|
||||
|
if !reflect.DeepEqual(res, want) { |
||||
|
t.Errorf("Bucket.GetIntelligentTiering returned\n%+v, want\n%+v", res, want) |
||||
|
} |
||||
|
} |
@ -0,0 +1,64 @@ |
|||||
|
package main |
||||
|
|
||||
|
import ( |
||||
|
"context" |
||||
|
"fmt" |
||||
|
"net/http" |
||||
|
"net/url" |
||||
|
"os" |
||||
|
|
||||
|
"github.com/tencentyun/cos-go-sdk-v5" |
||||
|
"github.com/tencentyun/cos-go-sdk-v5/debug" |
||||
|
) |
||||
|
|
||||
|
func log_status(err error) { |
||||
|
if err == nil { |
||||
|
return |
||||
|
} |
||||
|
if cos.IsNotFoundError(err) { |
||||
|
// WARN
|
||||
|
fmt.Println("Resource is not existed") |
||||
|
} else if e, ok := cos.IsCOSError(err); ok { |
||||
|
fmt.Printf("Code: %v\n", e.Code) |
||||
|
fmt.Printf("Message: %v\n", e.Message) |
||||
|
fmt.Printf("Resource: %v\n", e.Resource) |
||||
|
fmt.Printf("RequestId: %v\n", e.RequestID) |
||||
|
// ERROR
|
||||
|
} else { |
||||
|
fmt.Println(err) |
||||
|
// ERROR
|
||||
|
} |
||||
|
} |
||||
|
|
||||
|
func main() { |
||||
|
u, _ := url.Parse("https://test-1259654469.cos.ap-guangzhou.myqcloud.com") |
||||
|
b := &cos.BaseURL{ |
||||
|
BucketURL: u, |
||||
|
} |
||||
|
c := cos.NewClient(b, &http.Client{ |
||||
|
Transport: &cos.AuthorizationTransport{ |
||||
|
SecretID: os.Getenv("COS_SECRETID"), |
||||
|
SecretKey: os.Getenv("COS_SECRETKEY"), |
||||
|
Transport: &debug.DebugRequestTransport{ |
||||
|
RequestHeader: true, |
||||
|
RequestBody: false, |
||||
|
ResponseHeader: true, |
||||
|
ResponseBody: false, |
||||
|
}, |
||||
|
}, |
||||
|
}) |
||||
|
|
||||
|
opt := &cos.BucketPutIntelligentTieringOptions { |
||||
|
Status: "Enabled", |
||||
|
Transition: &cos.BucketIntelligentTieringTransition { |
||||
|
Days: 30, |
||||
|
}, |
||||
|
} |
||||
|
_, err := c.Bucket.PutIntelligentTiering(context.Background(), opt) |
||||
|
log_status(err) |
||||
|
res, _, err := c.Bucket.GetIntelligentTiering(context.Background()) |
||||
|
log_status(err) |
||||
|
fmt.Printf("%+v\n", res) |
||||
|
fmt.Printf("%+v\n", res.Status) |
||||
|
fmt.Printf("%+v\n", res.Transition.Days) |
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue