toranger
6 years ago
12 changed files with 562 additions and 22 deletions
-
40.travis.yml
-
4Makefile
-
1cos.go
-
449costesting/ci_test.go
-
25example/object/get.go
-
9example/object/put.go
-
2example/test.sh
-
35object.go
-
16object_part.go
-
1vendor/github.com/google/go-querystring
-
1vendor/github.com/mozillazg/go-httpheader
-
1vendor/github.com/stretchr/testify
@ -1,27 +1,29 @@ |
|||
language: go |
|||
go: |
|||
- 1.6 |
|||
- 1.7 |
|||
- 1.8 |
|||
- 1.9 |
|||
- master |
|||
|
|||
- '1.6' |
|||
- '1.7' |
|||
- '1.8' |
|||
- '1.9' |
|||
- 1.10.x |
|||
- master |
|||
sudo: false |
|||
|
|||
before_install: |
|||
- go get github.com/mattn/goveralls |
|||
|
|||
- go get github.com/mattn/goveralls |
|||
install: |
|||
- go get |
|||
- go build |
|||
|
|||
- go get |
|||
- go build |
|||
script: |
|||
- make test |
|||
- go test -coverprofile=cover.out github.com/tencentyun/cos-go-sdk-v5 |
|||
- $HOME/gopath/bin/goveralls -service=travis-ci -coverprofile=cover.out |
|||
|
|||
- make test |
|||
- make ci-test |
|||
- go test -coverprofile=cover.out github.com/tencentyun/cos-go-sdk-v5 |
|||
- "$HOME/gopath/bin/goveralls -service=travis-ci -coverprofile=cover.out" |
|||
matrix: |
|||
allow_failures: |
|||
- go: 1.6 |
|||
- go: 1.7 |
|||
- go: master |
|||
- go: 1.6 |
|||
- go: 1.7 |
|||
- go: master |
|||
env: |
|||
global: |
|||
- secure: XXB/cFVnJcAzhOZ2/zplwjhhhireQQGGRbNscPgQ0kpUQCyPZ6oIHvJMafuP4TVTJHEdMiaDxm0HNvgARuopXVaQNmK2UZj6xw40Ud7OT7ZUnw88xkQkXOI5GwG8oz9LqxIXUSItHegKXRLW0e1PoBdjZNv6lxGFAtuOcl9ekAg/q2lGIIQFefz6NK7gCmGYULKe+4J15VFldoYNM0JesxxxArTvtv8+k+U53oUwy9dex6z5oIA1zGIeKLcOD2xXgbjid/Ett3t0B2w3GfJWoM9rGV0eHgveOAUGe5tQkMKvl5LK1hj+93ZmU0MAG7x7t9jYKrFPqU/eDNJRMb4Ro6L7lIXVEKaBUkLx28PnwFQ5D043GBVtQGqYNcldZXIfbyYEHQZlD/BWFOt5YqTpGg+7Wm4NC3Yffqsurzk54juT7FftzVy0A8MFkqO+c5RHrOSUlm01pWXkGLHgZhUP5gEZEuUaoluSQTZksmAUJZ7F8DxwpE4SYBqfN27PZ87rWDNyOqNv1w1trzwx2IfdHHA+vfCZ7UM5e85gxFWUO2tJCUai2q21v3gBrcAgBOb6BwVzbWAorM2zY20f0l21XxOWMakA+r4JJA3s3EmcczcQeeL6pkFIAh+qKdFEPuyQTjH1mGpPzYFNbWtvPXijQo5PqyGrKL8W1t3ovwXMXoE= |
|||
- secure: bep0PPD/oYW5zY0QpeeC+WgFIya5DNRVmR92MO+e5BdFlSJPhstoG8bRh91EeftzC/Hyd3PUEIglPqTgZPxwysqW/81plsU95wV3qJi9gPi7+ZtYXH4xZTnaqgZsTr7jsKSVoKHSu7XqCtbSytW8YMN9wRWzG19/9hX2Z79Q6yNy5l9856Oyj1E2IXDjdZLPsWDhnZ8Vvk1wAVy2fc2esqKzHAZwm8n9vee2yR8vz7GXUszzpKvn4R43eNzdlFEHCmN0ANmxLJZmnYDpZHHfNf4slts+0S6I7awFXppuXUDaJPBRCia4XoFeSw+01IW1Vi0kAwvGLhxjJCWc4M/4ZU0byXDT11tDFvWa19NmnbYiizWiXNVecn1oNWYJqIKe7TTAMAtHSXAPmLX0rXuXKzwM09W6yrLFufCxyix9IOnenEbe9WwSdBbhmeLF3Wu/uVGkDog/FsXJM75sk956vV9UKh9zF4B9/NR8szJMF7shEs0Fbru5UUWheqg4AadPl3dhAWuj2+6NANa1LpH3JVD3II9dlXeMmMvsSwDvrYUaX/S8tf6JwZG0zCJK0TYp05rjxH+NIzWaMUTY7+HwYqqK3pOW3San0SlZiMq8N7GSnKUZ7WRQXYSB4gXHrg+mWyeVC7XnqiRtCwVi+LtPMu+YUbg7dwVi0vtKjYZYIUY= |
|||
- secure: Ob28vrOuHMKNKEtChkWbsaVv2SwLhcxXMnvGe4XN+y3mFvdhYnwpt6NdgThF8OCZ0761tvTRmvALfiZnO0uORjTtoHKkVPrnVIxlCcode0NVJZNHGn2fqjemdLKCnSeX7hm+9zeLpCnIvC+Sp3iZ3t2AH4AzgFx6nirWO3HwT5l9rNL9Q1CfwlOpNJJ36r9JTHwQnXmOfOmszUNoZ3rtiFXJ8dCi+BgY0lsiIRSiDkAH7KAPf86REM+ww81AaXG4/RuYx1Vj5zQCtZN7XEOViSXEbqqb8SrIFOccDu5FV12djg+4QS7FSjLVGrdIUcn4oI6pS24Et3oXf8xFx6JLYyGGhgZ2BsyJEx5vLQvkTWnMTrwZVRtCQ+g6lMUQpJhL2rBrmVBUqBFb5IH69O7corQm53n5qLM8IiosAQLfbOtML/1PyEpKCG2aOx1377Fx2yzxXW3ucP1PBqCzli0oCM2T52LfiNvZTzkIU6XJebBnzkZXepzOIFSur86kxgvQFElw9ro2X6XXPKU5S25xVaUSvaN1kmqLSkToJ9S1rmDYXnJR4aH0R2GcLw+EkMHFJJoAjnRHxrB4/1vOJbzmfS+qy6ShRhUMSD8gk4YJ6Y7o9h7oekuWOEn+XGhl29U9T5OApzHfoPEGZwLnpHxAiKJtQtv/TNhBIOFCjigsF7U= |
@ -0,0 +1,449 @@ |
|||
package cos |
|||
|
|||
// Basic imports
|
|||
import ( |
|||
"context" |
|||
"fmt" |
|||
"github.com/stretchr/testify/assert" |
|||
"github.com/stretchr/testify/suite" |
|||
"github.com/tencentyun/cos-go-sdk-v5" |
|||
"github.com/tencentyun/cos-go-sdk-v5/debug" |
|||
"io/ioutil" |
|||
"math/rand" |
|||
"net/http" |
|||
"net/url" |
|||
"os" |
|||
"strings" |
|||
"testing" |
|||
"time" |
|||
) |
|||
|
|||
// Define the suite, and absorb the built-in basic suite
|
|||
// functionality from testify - including a T() method which
|
|||
// returns the current testing context
|
|||
type CosTestSuite struct { |
|||
suite.Suite |
|||
VariableThatShouldStartAtFive int |
|||
|
|||
// CI client
|
|||
Client *cos.Client |
|||
|
|||
// Copy source client
|
|||
CClient *cos.Client |
|||
|
|||
Region string |
|||
|
|||
Bucket string |
|||
|
|||
Appid string |
|||
|
|||
// test_object
|
|||
TestObject string |
|||
|
|||
// special_file_name
|
|||
SepFileName string |
|||
} |
|||
|
|||
func (s *CosTestSuite) SetupSuite() { |
|||
fmt.Println("Set up test") |
|||
// init
|
|||
s.TestObject = "test.txt" |
|||
s.SepFileName = "中文" + "→↓←→↖↗↙↘! \"#$%&'()*+,-./0123456789:;<=>@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~" |
|||
|
|||
// CI client for test interface
|
|||
// URL like this http://test-1253846586.cos.ap-guangzhou.myqcloud.com
|
|||
u := os.Getenv("COS_BUCKET_URL") |
|||
|
|||
// Get the region
|
|||
iu, _ := url.Parse(u) |
|||
p := strings.Split(iu.Host, ".") |
|||
assert.Equal(s.T(), 5, len(p), "Bucket host is not right") |
|||
s.Region = p[2] |
|||
|
|||
// Bucket name
|
|||
pp := strings.Split(p[0], "-") |
|||
s.Bucket = pp[0] |
|||
s.Appid = pp[1] |
|||
|
|||
ib := &cos.BaseURL{BucketURL: iu} |
|||
s.Client = cos.NewClient(ib, &http.Client{ |
|||
Transport: &cos.AuthorizationTransport{ |
|||
SecretID: os.Getenv("COS_SECRETID"), |
|||
SecretKey: os.Getenv("COS_SECRETKEY"), |
|||
Transport: &debug.DebugRequestTransport{ |
|||
// RequestHeader: true,
|
|||
// RequestBody: true,
|
|||
// ResponseHeader: true,
|
|||
// ResponseBody: true,
|
|||
}, |
|||
}, |
|||
}) |
|||
|
|||
opt := &cos.BucketPutOptions{ |
|||
XCosACL: "public-read", |
|||
} |
|||
r, err := s.Client.Bucket.Put(context.Background(), opt) |
|||
if err != nil && r.StatusCode == 409 { |
|||
fmt.Println("BucketAlreadyOwnedByYou") |
|||
} else if err != nil { |
|||
assert.Nil(s.T(), err, "PutBucket Failed") |
|||
} |
|||
} |
|||
|
|||
// Begin of api test
|
|||
|
|||
// Service API
|
|||
func (s *CosTestSuite) TestGetService() { |
|||
_, _, err := s.Client.Service.Get(context.Background()) |
|||
assert.Nil(s.T(), err, "GetService Failed") |
|||
} |
|||
|
|||
// Bucket API
|
|||
func (s *CosTestSuite) TestPutHeadDeleteBucket() { |
|||
u := "http://gosdkbuckettest-" + s.Appid + ".cos.ap-beijing-1.myqcloud.com" |
|||
iu, _ := url.Parse(u) |
|||
ib := &cos.BaseURL{BucketURL: iu} |
|||
client := cos.NewClient(ib, &http.Client{ |
|||
Transport: &cos.AuthorizationTransport{ |
|||
SecretID: os.Getenv("COS_SECRETID"), |
|||
SecretKey: os.Getenv("COS_SECRETKEY"), |
|||
}, |
|||
}) |
|||
r, err := client.Bucket.Put(context.Background(), nil) |
|||
if err != nil && r.StatusCode == 409 { |
|||
fmt.Println("BucketAlreadyOwnedByYou") |
|||
} else if err != nil { |
|||
assert.Nil(s.T(), err, "PutBucket Failed") |
|||
} |
|||
|
|||
time.Sleep(3 * time.Second) |
|||
_, err = client.Bucket.Head(context.Background()) |
|||
assert.Nil(s.T(), err, "HeadBucket Failed") |
|||
|
|||
_, err = client.Bucket.Delete(context.Background()) |
|||
assert.Nil(s.T(), err, "DeleteBucket Failed") |
|||
|
|||
} |
|||
|
|||
func (s *CosTestSuite) TestPutBucketACLIllegal() { |
|||
opt := &cos.BucketPutACLOptions{ |
|||
Header: &cos.ACLHeaderOptions{ |
|||
XCosACL: "public-read-writ", |
|||
}, |
|||
} |
|||
_, err := s.Client.Bucket.PutACL(context.Background(), opt) |
|||
assert.NotNil(s.T(), err, "PutBucketACL illegal Failed") |
|||
} |
|||
|
|||
func (s *CosTestSuite) TestPutGetBucketACLNormal() { |
|||
// with header
|
|||
opt := &cos.BucketPutACLOptions{ |
|||
Header: &cos.ACLHeaderOptions{ |
|||
XCosACL: "private", |
|||
}, |
|||
} |
|||
_, err := s.Client.Bucket.PutACL(context.Background(), opt) |
|||
assert.Nil(s.T(), err, "PutBucketACL normal Failed") |
|||
|
|||
v, _, err := s.Client.Bucket.GetACL(context.Background()) |
|||
assert.Nil(s.T(), err, "GetBucketACL normal Failed") |
|||
assert.Equal(s.T(), 1, len(v.AccessControlList), "GetBucketACL normal Failed, must be private") |
|||
|
|||
} |
|||
|
|||
func (s *CosTestSuite) TestGetBucket() { |
|||
opt := &cos.BucketGetOptions{ |
|||
Prefix: "中文", |
|||
MaxKeys: 3, |
|||
} |
|||
_, _, err := s.Client.Bucket.Get(context.Background(), opt) |
|||
assert.Nil(s.T(), err, "GetBucket Failed") |
|||
} |
|||
|
|||
func (s *CosTestSuite) TestGetBucketLocation() { |
|||
v, _, err := s.Client.Bucket.GetLocation(context.Background()) |
|||
assert.Nil(s.T(), err, "GetLocation Failed") |
|||
assert.Equal(s.T(), s.Region, v.Location, "GetLocation wrong region") |
|||
} |
|||
|
|||
func (s *CosTestSuite) TestPutGetDeleteCORS() { |
|||
opt := &cos.BucketPutCORSOptions{ |
|||
Rules: []cos.BucketCORSRule{ |
|||
{ |
|||
AllowedOrigins: []string{"http://www.qq.com"}, |
|||
AllowedMethods: []string{"PUT", "GET"}, |
|||
AllowedHeaders: []string{"x-cos-meta-test", "x-cos-xx"}, |
|||
MaxAgeSeconds: 500, |
|||
ExposeHeaders: []string{"x-cos-meta-test1"}, |
|||
}, |
|||
}, |
|||
} |
|||
_, err := s.Client.Bucket.PutCORS(context.Background(), opt) |
|||
assert.Nil(s.T(), err, "PutBucketCORS Failed") |
|||
|
|||
v, _, err := s.Client.Bucket.GetCORS(context.Background()) |
|||
assert.Nil(s.T(), err, "GetBucketCORS Failed") |
|||
assert.Equal(s.T(), 1, len(v.Rules), "GetBucketCORS wrong number rules") |
|||
} |
|||
|
|||
func (s *CosTestSuite) TestPutGetDeleteLifeCycle() { |
|||
lc := &cos.BucketPutLifecycleOptions{ |
|||
Rules: []cos.BucketLifecycleRule{ |
|||
{ |
|||
ID: "1234", |
|||
Filter: &cos.BucketLifecycleFilter{Prefix: "test"}, |
|||
Status: "Enabled", |
|||
Transition: &cos.BucketLifecycleTransition{ |
|||
Days: 10, |
|||
StorageClass: "Standard", |
|||
}, |
|||
}, |
|||
}, |
|||
} |
|||
_, err := s.Client.Bucket.PutLifecycle(context.Background(), lc) |
|||
assert.Nil(s.T(), err, "PutBucketLifecycle Failed") |
|||
_, _, err = s.Client.Bucket.GetLifecycle(context.Background()) |
|||
assert.Nil(s.T(), err, "GetBucketLifecycle Failed") |
|||
_, err = s.Client.Bucket.DeleteLifecycle(context.Background()) |
|||
assert.Nil(s.T(), err, "DeleteBucketLifecycle Failed") |
|||
} |
|||
|
|||
func (s *CosTestSuite) TestListMultipartUploads() { |
|||
// Create new upload
|
|||
name := "test_multipart.txt" |
|||
v, _, err := s.Client.Object.InitiateMultipartUpload(context.Background(), name, nil) |
|||
assert.Nil(s.T(), err, "InitiateMultipartUpload Failed") |
|||
id := v.UploadID |
|||
|
|||
// List
|
|||
r, _, err := s.Client.Bucket.ListMultipartUploads(context.Background(), nil) |
|||
assert.Nil(s.T(), err, "ListMultipartUploads Failed") |
|||
assert.Equal(s.T(), 1, len(r.Uploads), "ListMultipartUploads wrong number uploads") |
|||
for _, p := range r.Uploads { |
|||
assert.Equal(s.T(), name, p.Key, "ListMultipartUploads wrong key") |
|||
assert.Equal(s.T(), id, p.UploadID, "ListMultipartUploads wrong uploadid") |
|||
} |
|||
|
|||
// Abort
|
|||
_, err = s.Client.Object.AbortMultipartUpload(context.Background(), name, id) |
|||
assert.Nil(s.T(), err, "AbortMultipartUpload Failed") |
|||
} |
|||
|
|||
// Object API
|
|||
func (s *CosTestSuite) TestPutHeadGetDeleteObject_10MB() { |
|||
name := "test/objectPut.go" |
|||
b := make([]byte, 1024*1024*10) |
|||
_, err := rand.Read(b) |
|||
content := fmt.Sprintf("%X", b) |
|||
f := strings.NewReader(content) |
|||
|
|||
_, err = s.Client.Object.Put(context.Background(), name, f, nil) |
|||
assert.Nil(s.T(), err, "PutObject Failed") |
|||
|
|||
_, err = s.Client.Object.Head(context.Background(), name, nil) |
|||
assert.Nil(s.T(), err, "HeadObject Failed") |
|||
|
|||
_, err = s.Client.Object.Delete(context.Background(), name) |
|||
assert.Nil(s.T(), err, "DeleteObject Failed") |
|||
} |
|||
|
|||
func (s *CosTestSuite) TestPutGetDeleteObjectByFile_10MB() { |
|||
// Create tmp file
|
|||
filePath := "tmpfile" |
|||
newfile, err := os.Create(filePath) |
|||
assert.Nil(s.T(), err, "create tmp file Failed") |
|||
defer newfile.Close() |
|||
|
|||
name := "test/objectPutByFile.go" |
|||
b := make([]byte, 1024*1024*10) |
|||
_, err = rand.Read(b) |
|||
|
|||
newfile.Write(b) |
|||
_, err = s.Client.Object.PutFromFile(context.Background(), name, filePath, nil) |
|||
assert.Nil(s.T(), err, "PutObject Failed") |
|||
|
|||
// Over write tmp file
|
|||
_, err = s.Client.Object.GetToFile(context.Background(), name, filePath, nil) |
|||
assert.Nil(s.T(), err, "HeadObject Failed") |
|||
|
|||
_, err = s.Client.Object.Delete(context.Background(), name) |
|||
assert.Nil(s.T(), err, "DeleteObject Failed") |
|||
|
|||
// remove the local tmp file
|
|||
err = os.Remove(filePath) |
|||
assert.Nil(s.T(), err, "remove local file Failed") |
|||
} |
|||
|
|||
func (s *CosTestSuite) TestPutGetDeleteObjectSpecialName() { |
|||
f := strings.NewReader("test") |
|||
_, err := s.Client.Object.Put(context.Background(), s.SepFileName, f, nil) |
|||
assert.Nil(s.T(), err, "PutObject Failed") |
|||
|
|||
resp, err := s.Client.Object.Get(context.Background(), s.SepFileName, nil) |
|||
assert.Nil(s.T(), err, "GetObject Failed") |
|||
defer resp.Body.Close() |
|||
bs, _ := ioutil.ReadAll(resp.Body) |
|||
assert.Equal(s.T(), "test", string(bs), "GetObject failed content wrong") |
|||
|
|||
_, err = s.Client.Object.Delete(context.Background(), s.SepFileName) |
|||
assert.Nil(s.T(), err, "DeleteObject Failed") |
|||
} |
|||
|
|||
func (s *CosTestSuite) TestPutObjectToNonExistBucket() { |
|||
u := "http://gosdknonexistbucket-" + s.Appid + ".cos." + s.Region + ".myqcloud.com" |
|||
iu, _ := url.Parse(u) |
|||
ib := &cos.BaseURL{BucketURL: iu} |
|||
client := cos.NewClient(ib, &http.Client{ |
|||
Transport: &cos.AuthorizationTransport{ |
|||
SecretID: os.Getenv("COS_SECRETID"), |
|||
SecretKey: os.Getenv("COS_SECRETKEY"), |
|||
}, |
|||
}) |
|||
name := "test/objectPut.go" |
|||
f := strings.NewReader("test") |
|||
r, err := client.Object.Put(context.Background(), name, f, nil) |
|||
assert.NotNil(s.T(), err, "PutObject ToNonExistBucket Failed") |
|||
assert.Equal(s.T(), 404, r.StatusCode, "PutObject ToNonExistBucket, not 404") |
|||
} |
|||
|
|||
func (s *CosTestSuite) TestPutGetObjectACL() { |
|||
name := "test/objectACL.go" |
|||
f := strings.NewReader("test") |
|||
_, err := s.Client.Object.Put(context.Background(), name, f, nil) |
|||
assert.Nil(s.T(), err, "PutObject Failed") |
|||
|
|||
// Put acl
|
|||
opt := &cos.ObjectPutACLOptions{ |
|||
Header: &cos.ACLHeaderOptions{ |
|||
XCosACL: "public-read", |
|||
}, |
|||
} |
|||
_, err = s.Client.Object.PutACL(context.Background(), name, opt) |
|||
assert.Nil(s.T(), err, "PutObjectACL Failed") |
|||
v, _, err := s.Client.Object.GetACL(context.Background(), name) |
|||
assert.Nil(s.T(), err, "GetObjectACL Failed") |
|||
assert.Equal(s.T(), 2, len(v.AccessControlList), "GetLifecycle wrong number rules") |
|||
|
|||
_, err = s.Client.Object.Delete(context.Background(), name) |
|||
assert.Nil(s.T(), err, "DeleteObject Failed") |
|||
} |
|||
|
|||
func (s *CosTestSuite) TestCopyObject() { |
|||
u := "http://gosdkcopytest-" + s.Appid + ".cos.ap-beijing-1.myqcloud.com" |
|||
iu, _ := url.Parse(u) |
|||
ib := &cos.BaseURL{BucketURL: iu} |
|||
c := cos.NewClient(ib, &http.Client{ |
|||
Transport: &cos.AuthorizationTransport{ |
|||
SecretID: os.Getenv("COS_SECRETID"), |
|||
SecretKey: os.Getenv("COS_SECRETKEY"), |
|||
}, |
|||
}) |
|||
|
|||
opt := &cos.BucketPutOptions{ |
|||
XCosACL: "public-read", |
|||
} |
|||
|
|||
// Notice in intranet the bucket host sometimes has i/o timeout problem
|
|||
r, err := c.Bucket.Put(context.Background(), opt) |
|||
if err != nil && r.StatusCode == 409 { |
|||
fmt.Println("BucketAlreadyOwnedByYou") |
|||
} else if err != nil { |
|||
assert.Nil(s.T(), err, "PutBucket Failed") |
|||
} |
|||
|
|||
source := "test/objectMove1.go" |
|||
expected := "test" |
|||
f := strings.NewReader(expected) |
|||
|
|||
_, err = c.Object.Put(context.Background(), source, f, nil) |
|||
assert.Nil(s.T(), err, "PutObject Failed") |
|||
|
|||
time.Sleep(3 * time.Second) |
|||
// Copy file
|
|||
soruceURL := fmt.Sprintf("%s/%s", iu.Host, source) |
|||
dest := source |
|||
//opt := &cos.ObjectCopyOptions{}
|
|||
_, _, err = s.Client.Object.Copy(context.Background(), dest, soruceURL, nil) |
|||
assert.Nil(s.T(), err, "PutObjectCopy Failed") |
|||
|
|||
// Check content
|
|||
resp, err := s.Client.Object.Get(context.Background(), dest, nil) |
|||
assert.Nil(s.T(), err, "GetObject Failed") |
|||
bs, _ := ioutil.ReadAll(resp.Body) |
|||
resp.Body.Close() |
|||
result := string(bs) |
|||
assert.Equal(s.T(), expected, result, "PutObjectCopy Failed, wrong content") |
|||
} |
|||
|
|||
func (s *CosTestSuite) TestCreateAbortMultipartUpload() { |
|||
name := "test_multipart.txt" |
|||
v, _, err := s.Client.Object.InitiateMultipartUpload(context.Background(), name, nil) |
|||
assert.Nil(s.T(), err, "InitiateMultipartUpload Failed") |
|||
|
|||
_, err = s.Client.Object.AbortMultipartUpload(context.Background(), name, v.UploadID) |
|||
assert.Nil(s.T(), err, "AbortMultipartUpload Failed") |
|||
} |
|||
|
|||
func (s *CosTestSuite) TestCreateCompleteMultipartUpload() { |
|||
name := "test/test_complete_upload.go" |
|||
v, _, err := s.Client.Object.InitiateMultipartUpload(context.Background(), name, nil) |
|||
uploadID := v.UploadID |
|||
blockSize := 1024 * 1024 * 3 |
|||
|
|||
opt := &cos.CompleteMultipartUploadOptions{} |
|||
for i := 1; i < 5; i++ { |
|||
b := make([]byte, blockSize) |
|||
_, err := rand.Read(b) |
|||
content := fmt.Sprintf("%X", b) |
|||
f := strings.NewReader(content) |
|||
|
|||
resp, err := s.Client.Object.UploadPart( |
|||
context.Background(), name, uploadID, i, f, nil, |
|||
) |
|||
assert.Nil(s.T(), err, "UploadPart Failed") |
|||
etag := resp.Header.Get("Etag") |
|||
opt.Parts = append(opt.Parts, cos.Object{ |
|||
PartNumber: i, ETag: etag}, |
|||
) |
|||
} |
|||
|
|||
_, _, err = s.Client.Object.CompleteMultipartUpload( |
|||
context.Background(), name, uploadID, opt, |
|||
) |
|||
assert.Nil(s.T(), err, "CompleteMultipartUpload Failed") |
|||
} |
|||
|
|||
// End of api test
|
|||
|
|||
// All methods that begin with "Test" are run as tests within a
|
|||
// suite.
|
|||
// In order for 'go test' to run this suite, we need to create
|
|||
// a normal test function and pass our suite to suite.Run
|
|||
func TestCosTestSuite(t *testing.T) { |
|||
suite.Run(t, new(CosTestSuite)) |
|||
} |
|||
|
|||
func (s *CosTestSuite) TearDownSuite() { |
|||
// Clean the file in bucket
|
|||
r, _, err := s.Client.Bucket.ListMultipartUploads(context.Background(), nil) |
|||
assert.Nil(s.T(), err, "ListMultipartUploads Failed") |
|||
for _, p := range r.Uploads { |
|||
// Abort
|
|||
_, err = s.Client.Object.AbortMultipartUpload(context.Background(), p.Key, p.UploadID) |
|||
assert.Nil(s.T(), err, "AbortMultipartUpload Failed") |
|||
} |
|||
|
|||
// Delete objects
|
|||
opt := &cos.BucketGetOptions{ |
|||
MaxKeys: 500, |
|||
} |
|||
v, _, err := s.Client.Bucket.Get(context.Background(), opt) |
|||
assert.Nil(s.T(), err, "GetBucket Failed") |
|||
for _, c := range v.Contents { |
|||
_, err := s.Client.Object.Delete(context.Background(), c.Key) |
|||
assert.Nil(s.T(), err, "DeleteObject Failed") |
|||
} |
|||
|
|||
fmt.Println("tear down~") |
|||
|
|||
} |
@ -0,0 +1 @@ |
|||
Subproject commit 44c6ddd0a2342c386950e880b658017258da92fc |
@ -0,0 +1 @@ |
|||
Subproject commit 61f2392c3317b60616c9dcb10d0a4cfef131fe62 |
@ -0,0 +1 @@ |
|||
Subproject commit 363ebb24d041ccea8068222281c2e963e997b9dc |
Write
Preview
Loading…
Cancel
Save
Reference in new issue