2 // use gocheck, install gocheck to execute "go get gopkg.in/check.v1",
3 // see https://labix.org/gocheck
27 // Test hooks up gocheck into the "go test" runner.
28 func Test(t *testing.T) {
32 type OssClientSuite struct{}
34 var _ = Suite(&OssClientSuite{})
38 endpoint = os.Getenv("OSS_TEST_ENDPOINT")
39 accessID = os.Getenv("OSS_TEST_ACCESS_KEY_ID")
40 accessKey = os.Getenv("OSS_TEST_ACCESS_KEY_SECRET")
41 accountID = os.Getenv("OSS_TEST_ACCOUNT_ID")
44 proxyHost = os.Getenv("OSS_TEST_PROXY_HOST")
45 proxyUser = os.Getenv("OSS_TEST_PROXY_USER")
46 proxyPasswd = os.Getenv("OSS_TEST_PROXY_PASSWORD")
49 stsaccessID = os.Getenv("OSS_TEST_STS_ID")
50 stsaccessKey = os.Getenv("OSS_TEST_STS_KEY")
51 stsARN = os.Getenv("OSS_TEST_STS_ARN")
54 credentialAccessID = os.Getenv("OSS_CREDENTIAL_KEY_ID")
55 credentialAccessKey = os.Getenv("OSS_CREDENTIAL_KEY_SECRET")
56 credentialUID = os.Getenv("OSS_CREDENTIAL_UID")
60 // prefix of bucket name for bucket ops test
61 bucketNamePrefix = "go-sdk-test-bucket-"
62 // bucket name for object ops test
63 bucketName = bucketNamePrefix + RandLowStr(6)
64 archiveBucketName = bucketNamePrefix + "arch-" + RandLowStr(6)
65 // object name for object ops test
66 objectNamePrefix = "go-sdk-test-object-"
67 // sts region is one and only hangzhou
68 stsRegion = "cn-hangzhou"
70 credentialBucketName = bucketNamePrefix + RandLowStr(6)
74 logPath = "go_sdk_test_" + time.Now().Format("20060102_150405") + ".log"
75 testLogFile, _ = os.OpenFile(logPath, os.O_RDWR|os.O_CREATE, 0664)
76 testLogger = log.New(testLogFile, "", log.Ldate|log.Ltime|log.Lshortfile)
77 letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
78 timeoutInOperation = 3 * time.Second
81 func RandStr(n int) string {
83 randMarker := rand.New(rand.NewSource(time.Now().UnixNano()))
85 b[i] = letters[randMarker.Intn(len(letters))]
90 func CreateFile(fileName, content string, c *C) {
91 fout, err := os.Create(fileName)
94 _, err = fout.WriteString(content)
98 func RandLowStr(n int) string {
99 return strings.ToLower(RandStr(n))
102 func ForceDeleteBucket(client *Client, bucketName string, c *C) {
103 bucket, err := client.Bucket(bucketName)
109 lor, err := bucket.ListObjects(marker)
111 for _, object := range lor.Objects {
112 err = bucket.DeleteObject(object.Key)
115 marker = Marker(lor.NextMarker)
116 if !lor.IsTruncated {
121 // Delete Object Versions and DeleteMarks
122 keyMarker := KeyMarker("")
123 versionIdMarker := VersionIdMarker("")
124 options := []Option{keyMarker, versionIdMarker}
126 lor, err := bucket.ListObjectVersions(options...)
131 for _, object := range lor.ObjectDeleteMarkers {
132 err = bucket.DeleteObject(object.Key, VersionId(object.VersionId))
136 for _, object := range lor.ObjectVersions {
137 err = bucket.DeleteObject(object.Key, VersionId(object.VersionId))
141 keyMarker = KeyMarker(lor.NextKeyMarker)
142 versionIdMarker := VersionIdMarker(lor.NextVersionIdMarker)
143 options = []Option{keyMarker, versionIdMarker}
145 if !lor.IsTruncated {
151 keyMarker = KeyMarker("")
152 uploadIDMarker := UploadIDMarker("")
154 lmur, err := bucket.ListMultipartUploads(keyMarker, uploadIDMarker)
156 for _, upload := range lmur.Uploads {
157 var imur = InitiateMultipartUploadResult{Bucket: bucketName,
158 Key: upload.Key, UploadID: upload.UploadID}
159 err = bucket.AbortMultipartUpload(imur)
162 keyMarker = KeyMarker(lmur.NextKeyMarker)
163 uploadIDMarker = UploadIDMarker(lmur.NextUploadIDMarker)
164 if !lmur.IsTruncated {
169 // delete live channel
172 result, err := bucket.ListLiveChannel(Marker(strMarker))
175 for _, channel := range result.LiveChannel {
176 err := bucket.DeleteLiveChannel(channel.Name)
180 if result.IsTruncated {
181 strMarker = result.NextMarker
188 err = client.DeleteBucket(bucketName)
192 // SetUpSuite runs once when the suite starts running
193 func (s *OssClientSuite) SetUpSuite(c *C) {
194 client, err := New(endpoint, accessID, accessKey)
197 lbr, err := client.ListBuckets(Prefix(bucketNamePrefix), MaxKeys(1000))
200 for _, bucket := range lbr.Buckets {
201 ForceDeleteBucket(client, bucket.Name, c)
204 testLogger.Println("test client started")
207 // TearDownSuite runs before each test or benchmark starts running
208 func (s *OssClientSuite) TearDownSuite(c *C) {
209 client, err := New(endpoint, accessID, accessKey)
212 lbr, err := client.ListBuckets(Prefix(bucketNamePrefix), MaxKeys(1000))
215 for _, bucket := range lbr.Buckets {
216 s.deleteBucket(client, bucket.Name, c)
219 testLogger.Println("test client completed")
222 func (s *OssClientSuite) deleteBucket(client *Client, bucketName string, c *C) {
223 ForceDeleteBucket(client, bucketName, c)
226 // SetUpTest runs after each test or benchmark runs
227 func (s *OssClientSuite) SetUpTest(c *C) {
230 // TearDownTest runs once after all tests or benchmarks have finished running
231 func (s *OssClientSuite) TearDownTest(c *C) {
235 func (s *OssClientSuite) TestCreateBucket(c *C) {
236 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
238 client, err := New(endpoint, accessID, accessKey)
242 client.DeleteBucket(bucketNameTest)
243 err = client.CreateBucket(bucketNameTest)
245 //sleep 3 seconds after create bucket
246 time.Sleep(timeoutInOperation)
248 // verify bucket is exist
249 found, err := client.IsBucketExist(bucketNameTest)
251 c.Assert(found, Equals, true)
253 res, err := client.GetBucketACL(bucketNameTest)
255 c.Assert(res.ACL, Equals, string(ACLPrivate))
257 err = client.DeleteBucket(bucketNameTest)
259 time.Sleep(timeoutInOperation)
261 // CreateBucket creates with ACLPublicRead
262 err = client.CreateBucket(bucketNameTest, ACL(ACLPublicRead))
264 time.Sleep(timeoutInOperation)
266 res, err = client.GetBucketACL(bucketNameTest)
268 c.Assert(res.ACL, Equals, string(ACLPublicRead))
270 err = client.DeleteBucket(bucketNameTest)
272 time.Sleep(timeoutInOperation)
274 // ACLPublicReadWrite
275 err = client.CreateBucket(bucketNameTest, ACL(ACLPublicReadWrite))
277 time.Sleep(timeoutInOperation)
279 res, err = client.GetBucketACL(bucketNameTest)
281 c.Assert(res.ACL, Equals, string(ACLPublicReadWrite))
283 err = client.DeleteBucket(bucketNameTest)
285 time.Sleep(timeoutInOperation)
288 err = client.CreateBucket(bucketNameTest, ACL(ACLPrivate))
290 time.Sleep(timeoutInOperation)
292 res, err = client.GetBucketACL(bucketNameTest)
294 c.Assert(res.ACL, Equals, string(ACLPrivate))
297 err = client.DeleteBucket(bucketNameTest)
300 // Create bucket with configuration and test GetBucketInfo
301 for _, storage := range []StorageClassType{StorageStandard, StorageIA, StorageArchive, StorageColdArchive} {
302 bucketNameTest := bucketNamePrefix + RandLowStr(6)
303 err = client.CreateBucket(bucketNameTest, StorageClass(storage), ACL(ACLPublicRead))
305 time.Sleep(timeoutInOperation)
307 res, err := client.GetBucketInfo(bucketNameTest)
309 c.Assert(res.BucketInfo.Name, Equals, bucketNameTest)
310 c.Assert(res.BucketInfo.StorageClass, Equals, string(storage))
311 c.Assert(res.BucketInfo.ACL, Equals, string(ACLPublicRead))
314 err = client.DeleteBucket(bucketNameTest)
318 // Error put bucket with configuration
319 err = client.CreateBucket("ERRORBUCKETNAME", StorageClass(StorageArchive))
320 c.Assert(err, NotNil)
322 // Create bucket with configuration and test ListBuckets
323 for _, storage := range []StorageClassType{StorageStandard, StorageIA, StorageArchive, StorageColdArchive} {
324 bucketNameTest := bucketNamePrefix + RandLowStr(6)
325 err = client.CreateBucket(bucketNameTest, StorageClass(storage))
327 time.Sleep(timeoutInOperation)
329 res, err := client.GetBucketInfo(bucketNameTest)
331 c.Assert(res.BucketInfo.Name, Equals, bucketNameTest)
332 c.Assert(res.BucketInfo.StorageClass, Equals, string(storage))
335 err = client.DeleteBucket(bucketNameTest)
340 func (s *OssClientSuite) TestCreateBucketRedundancyType(c *C) {
341 bucketNameTest := bucketNamePrefix + RandLowStr(6)
342 client, err := New(endpoint, accessID, accessKey)
345 // CreateBucket creates without property
346 err = client.CreateBucket(bucketNameTest)
348 client.DeleteBucket(bucketNameTest)
349 time.Sleep(timeoutInOperation)
351 // CreateBucket creates with RedundancyZRS
352 err = client.CreateBucket(bucketNameTest, RedundancyType(RedundancyZRS))
355 res, err := client.GetBucketInfo(bucketNameTest)
357 c.Assert(res.BucketInfo.RedundancyType, Equals, string(RedundancyZRS))
358 client.DeleteBucket(bucketNameTest)
359 time.Sleep(timeoutInOperation)
361 // CreateBucket creates with RedundancyLRS
362 err = client.CreateBucket(bucketNameTest, RedundancyType(RedundancyLRS))
365 res, err = client.GetBucketInfo(bucketNameTest)
367 c.Assert(res.BucketInfo.RedundancyType, Equals, string(RedundancyLRS))
368 c.Assert(res.BucketInfo.StorageClass, Equals, string(StorageStandard))
369 client.DeleteBucket(bucketNameTest)
370 time.Sleep(timeoutInOperation)
372 // CreateBucket creates with ACLPublicRead RedundancyZRS
373 err = client.CreateBucket(bucketNameTest, ACL(ACLPublicRead), RedundancyType(RedundancyZRS))
376 res, err = client.GetBucketInfo(bucketNameTest)
378 c.Assert(res.BucketInfo.RedundancyType, Equals, string(RedundancyZRS))
379 c.Assert(res.BucketInfo.ACL, Equals, string(ACLPublicRead))
380 client.DeleteBucket(bucketNameTest)
383 // TestCreateBucketNegative
384 func (s *OssClientSuite) TestCreateBucketNegative(c *C) {
385 client, err := New(endpoint, accessID, accessKey)
388 // Bucket name invalid
389 err = client.CreateBucket("xx")
390 c.Assert(err, NotNil)
392 err = client.CreateBucket("XXXX")
393 c.Assert(err, NotNil)
394 testLogger.Println(err)
396 err = client.CreateBucket("_bucket")
397 c.Assert(err, NotNil)
398 testLogger.Println(err)
401 err = client.CreateBucket(bucketNamePrefix+RandLowStr(6), ACL("InvaldAcl"))
402 c.Assert(err, NotNil)
403 testLogger.Println(err)
407 func (s *OssClientSuite) TestDeleteBucket(c *C) {
408 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
410 client, err := New(endpoint, accessID, accessKey)
414 err = client.CreateBucket(bucketNameTest)
416 time.Sleep(timeoutInOperation)
419 found, err := client.IsBucketExist(bucketNameTest)
421 c.Assert(found, Equals, true)
424 err = client.DeleteBucket(bucketNameTest)
426 time.Sleep(timeoutInOperation)
429 found, err = client.IsBucketExist(bucketNameTest)
431 c.Assert(found, Equals, false)
433 err = client.DeleteBucket(bucketNameTest)
434 c.Assert(err, NotNil)
437 // TestDeleteBucketNegative
438 func (s *OssClientSuite) TestDeleteBucketNegative(c *C) {
439 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
441 client, err := New(endpoint, accessID, accessKey)
444 // Bucket name invalid
445 err = client.DeleteBucket("xx")
446 c.Assert(err, NotNil)
448 err = client.DeleteBucket("XXXX")
449 c.Assert(err, NotNil)
451 err = client.DeleteBucket("_bucket")
452 c.Assert(err, NotNil)
454 // Delete no exist bucket
455 err = client.DeleteBucket("notexist")
456 c.Assert(err, NotNil)
458 // No permission to delete, this ak/sk for js sdk
459 err = client.CreateBucket(bucketNameTest)
462 accessID := "<accessKeyId>"
463 accessKey := "<accessKeySecret>"
464 clientOtherUser, err := New(endpoint, accessID, accessKey)
467 err = clientOtherUser.DeleteBucket(bucketNameTest)
468 c.Assert(err, NotNil)
470 err = client.DeleteBucket(bucketNameTest)
475 func (s *OssClientSuite) TestListBucket(c *C) {
476 var prefix = bucketNamePrefix + RandLowStr(6)
477 var bucketNameLbOne = prefix + "tlb1"
478 var bucketNameLbTwo = prefix + "tlb2"
479 var bucketNameLbThree = prefix + "tlb3"
481 client, err := New(endpoint, accessID, accessKey)
485 err = client.CreateBucket(bucketNameLbOne)
487 err = client.CreateBucket(bucketNameLbTwo)
489 err = client.CreateBucket(bucketNameLbThree)
492 // ListBuckets, specified prefix
493 var respHeader http.Header
494 lbr, err := client.ListBuckets(Prefix(prefix), MaxKeys(2), GetResponseHeader(&respHeader))
495 c.Assert(GetRequestId(respHeader) != "", Equals, true)
497 c.Assert(len(lbr.Buckets), Equals, 2)
499 // ListBuckets, specified max keys
500 lbr, err = client.ListBuckets(MaxKeys(2))
502 c.Assert(len(lbr.Buckets), Equals, 2)
504 // ListBuckets, specified max keys
505 lbr, err = client.ListBuckets(Marker(bucketNameLbOne), MaxKeys(1))
507 c.Assert(len(lbr.Buckets), Equals, 1)
509 // ListBuckets, specified max keys
510 lbr, err = client.ListBuckets(Marker(bucketNameLbOne))
512 c.Assert(len(lbr.Buckets) >= 2, Equals, true)
515 err = client.DeleteBucket(bucketNameLbOne)
517 err = client.DeleteBucket(bucketNameLbTwo)
519 err = client.DeleteBucket(bucketNameLbThree)
524 func (s *OssClientSuite) TestIsBucketExist(c *C) {
525 var prefix = bucketNamePrefix + RandLowStr(6)
526 var bucketNameLbOne = prefix + "tibe1"
527 var bucketNameLbTwo = prefix + "tibe11"
528 var bucketNameLbThree = prefix + "tibe111"
530 client, err := New(endpoint, accessID, accessKey)
534 err = client.CreateBucket(bucketNameLbOne)
536 err = client.CreateBucket(bucketNameLbTwo)
538 err = client.CreateBucket(bucketNameLbThree)
542 exist, err := client.IsBucketExist(bucketNameLbTwo)
544 c.Assert(exist, Equals, true)
546 exist, err = client.IsBucketExist(bucketNameLbThree)
548 c.Assert(exist, Equals, true)
550 exist, err = client.IsBucketExist(bucketNameLbOne)
552 c.Assert(exist, Equals, true)
555 exist, err = client.IsBucketExist(prefix + "tibe")
557 c.Assert(exist, Equals, false)
559 exist, err = client.IsBucketExist(prefix + "tibe1111")
561 c.Assert(exist, Equals, false)
564 exist, err = client.IsBucketExist("BucketNameInvalid")
565 c.Assert(err, NotNil)
568 err = client.DeleteBucket(bucketNameLbOne)
570 err = client.DeleteBucket(bucketNameLbTwo)
572 err = client.DeleteBucket(bucketNameLbThree)
577 func (s *OssClientSuite) TestSetBucketAcl(c *C) {
578 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
580 client, err := New(endpoint, accessID, accessKey)
584 err = client.CreateBucket(bucketNameTest)
587 res, err := client.GetBucketACL(bucketNameTest)
589 c.Assert(res.ACL, Equals, string(ACLPrivate))
592 err = client.SetBucketACL(bucketNameTest, ACLPublicRead)
594 time.Sleep(timeoutInOperation)
596 res, err = client.GetBucketACL(bucketNameTest)
598 c.Assert(res.ACL, Equals, string(ACLPublicRead))
601 err = client.SetBucketACL(bucketNameTest, ACLPublicReadWrite)
603 time.Sleep(timeoutInOperation)
605 res, err = client.GetBucketACL(bucketNameTest)
607 c.Assert(res.ACL, Equals, string(ACLPublicReadWrite))
610 err = client.SetBucketACL(bucketNameTest, ACLPrivate)
612 time.Sleep(timeoutInOperation)
614 res, err = client.GetBucketACL(bucketNameTest)
616 c.Assert(res.ACL, Equals, string(ACLPrivate))
618 err = client.DeleteBucket(bucketNameTest)
622 // TestSetBucketAclNegative
623 func (s *OssClientSuite) TestBucketAclNegative(c *C) {
624 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
626 client, err := New(endpoint, accessID, accessKey)
629 err = client.CreateBucket(bucketNameTest)
632 err = client.SetBucketACL(bucketNameTest, "InvalidACL")
633 c.Assert(err, NotNil)
634 testLogger.Println(err)
636 err = client.DeleteBucket(bucketNameTest)
641 func (s *OssClientSuite) TestGetBucketAcl(c *C) {
642 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
644 client, err := New(endpoint, accessID, accessKey)
648 err = client.CreateBucket(bucketNameTest)
650 time.Sleep(timeoutInOperation)
652 res, err := client.GetBucketACL(bucketNameTest)
654 c.Assert(res.ACL, Equals, string(ACLPrivate))
656 err = client.DeleteBucket(bucketNameTest)
658 time.Sleep(timeoutInOperation)
661 err = client.CreateBucket(bucketNameTest, ACL(ACLPublicRead))
663 time.Sleep(timeoutInOperation)
665 res, err = client.GetBucketACL(bucketNameTest)
667 c.Assert(res.ACL, Equals, string(ACLPublicRead))
669 err = client.DeleteBucket(bucketNameTest)
671 time.Sleep(timeoutInOperation)
674 err = client.CreateBucket(bucketNameTest, ACL(ACLPublicReadWrite))
676 time.Sleep(timeoutInOperation)
678 res, err = client.GetBucketACL(bucketNameTest)
680 c.Assert(res.ACL, Equals, string(ACLPublicReadWrite))
682 err = client.DeleteBucket(bucketNameTest)
687 func (s *OssClientSuite) TestGetBucketLocation(c *C) {
688 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
690 client, err := New(endpoint, accessID, accessKey)
694 err = client.CreateBucket(bucketNameTest)
697 loc, err := client.GetBucketLocation(bucketNameTest)
698 c.Assert(strings.HasPrefix(loc, "oss-"), Equals, true)
700 err = client.DeleteBucket(bucketNameTest)
704 // TestGetBucketLocationNegative
705 func (s *OssClientSuite) TestGetBucketLocationNegative(c *C) {
706 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
708 client, err := New(endpoint, accessID, accessKey)
712 _, err = client.GetBucketLocation(bucketNameTest)
713 c.Assert(err, NotNil)
716 _, err = client.GetBucketLocation("InvalidBucketName_")
717 c.Assert(err, NotNil)
720 // TestSetBucketLifecycle
721 func (s *OssClientSuite) TestSetBucketLifecycle(c *C) {
722 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
723 var rule1 = BuildLifecycleRuleByDate("rule1", "one", true, 2015, 11, 11)
724 var rule2 = BuildLifecycleRuleByDays("rule2", "two", true, 3)
726 client, err := New(endpoint, accessID, accessKey)
729 err = client.CreateBucket(bucketNameTest)
733 var rules = []LifecycleRule{rule1}
734 err = client.SetBucketLifecycle(bucketNameTest, rules)
737 err = client.SetBucketLifecycle(bucketNameTest, rules)
740 res, err := client.GetBucketLifecycle(bucketNameTest)
742 c.Assert(len(res.Rules), Equals, 1)
743 c.Assert(res.Rules[0].ID, Equals, "rule1")
745 err = client.DeleteBucketLifecycle(bucketNameTest)
749 rules = []LifecycleRule{rule1, rule2}
750 err = client.SetBucketLifecycle(bucketNameTest, rules)
753 // Eliminate effect of cache
754 time.Sleep(timeoutInOperation)
756 res, err = client.GetBucketLifecycle(bucketNameTest)
758 c.Assert(len(res.Rules), Equals, 2)
759 c.Assert(res.Rules[0].ID, Equals, "rule1")
760 c.Assert(res.Rules[1].ID, Equals, "rule2")
762 err = client.DeleteBucket(bucketNameTest)
766 // TestSetBucketLifecycleNew
767 func (s *OssClientSuite) TestSetBucketLifecycleNew(c *C) {
768 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
770 client, err := New(endpoint, accessID, accessKey)
773 err = client.CreateBucket(bucketNameTest)
776 //invalid status of lifecyclerule
777 expiration := LifecycleExpiration{
780 rule := LifecycleRule{
784 Expiration: &expiration,
786 rules := []LifecycleRule{rule}
787 err = client.SetBucketLifecycle(bucketNameTest, rules)
788 c.Assert(err, NotNil)
790 //invalid value of CreatedBeforeDate
791 expiration = LifecycleExpiration{
792 CreatedBeforeDate: RandStr(10),
794 rule = LifecycleRule{
798 Expiration: &expiration,
800 rules = []LifecycleRule{rule}
801 err = client.SetBucketLifecycle(bucketNameTest, rules)
802 c.Assert(err, NotNil)
804 //invalid value of Days
805 abortMPU := LifecycleAbortMultipartUpload{
808 rule = LifecycleRule{
812 AbortMultipartUpload: &abortMPU,
814 rules = []LifecycleRule{rule}
815 err = client.SetBucketLifecycle(bucketNameTest, rules)
816 c.Assert(err, NotNil)
818 expiration = LifecycleExpiration{
819 CreatedBeforeDate: "2015-11-11T00:00:00.000Z",
821 rule1 := LifecycleRule{
825 Expiration: &expiration,
828 abortMPU = LifecycleAbortMultipartUpload{
831 rule2 := LifecycleRule{
835 Expiration: &expiration,
836 AbortMultipartUpload: &abortMPU,
839 transition1 := LifecycleTransition{
841 StorageClass: StorageIA,
843 transition2 := LifecycleTransition{
845 StorageClass: StorageArchive,
847 transitions := []LifecycleTransition{transition1, transition2}
848 rule3 := LifecycleRule{
852 AbortMultipartUpload: &abortMPU,
853 Transitions: transitions,
857 rules = []LifecycleRule{rule1}
858 err = client.SetBucketLifecycle(bucketNameTest, rules)
861 res, err := client.GetBucketLifecycle(bucketNameTest)
863 c.Assert(len(res.Rules), Equals, 1)
864 c.Assert(res.Rules[0].ID, Equals, "rule1")
865 c.Assert(res.Rules[0].Expiration, NotNil)
866 c.Assert(res.Rules[0].Expiration.CreatedBeforeDate, Equals, "2015-11-11T00:00:00.000Z")
868 err = client.DeleteBucketLifecycle(bucketNameTest)
871 // Set two rule: rule1 and rule2
872 rules = []LifecycleRule{rule1, rule2}
873 err = client.SetBucketLifecycle(bucketNameTest, rules)
876 res, err = client.GetBucketLifecycle(bucketNameTest)
878 c.Assert(len(res.Rules), Equals, 2)
879 c.Assert(res.Rules[0].ID, Equals, "rule1")
880 c.Assert(res.Rules[0].Expiration, NotNil)
881 c.Assert(res.Rules[0].Expiration.CreatedBeforeDate, Equals, "2015-11-11T00:00:00.000Z")
882 c.Assert(res.Rules[1].ID, Equals, "rule2")
883 c.Assert(res.Rules[1].Expiration, NotNil)
884 c.Assert(res.Rules[1].Expiration.CreatedBeforeDate, Equals, "2015-11-11T00:00:00.000Z")
885 c.Assert(res.Rules[1].AbortMultipartUpload, NotNil)
886 c.Assert(res.Rules[1].AbortMultipartUpload.Days, Equals, 30)
888 err = client.DeleteBucketLifecycle(bucketNameTest)
891 // Set two rule: rule2 and rule3
892 rules = []LifecycleRule{rule2, rule3}
893 err = client.SetBucketLifecycle(bucketNameTest, rules)
896 res, err = client.GetBucketLifecycle(bucketNameTest)
898 c.Assert(len(res.Rules), Equals, 2)
899 c.Assert(res.Rules[0].ID, Equals, "rule2")
900 c.Assert(res.Rules[0].Expiration, NotNil)
901 c.Assert(res.Rules[0].Expiration.CreatedBeforeDate, Equals, "2015-11-11T00:00:00.000Z")
902 c.Assert(res.Rules[0].AbortMultipartUpload, NotNil)
903 c.Assert(res.Rules[0].AbortMultipartUpload.Days, Equals, 30)
904 c.Assert(res.Rules[1].ID, Equals, "rule3")
905 c.Assert(res.Rules[1].AbortMultipartUpload, NotNil)
906 c.Assert(res.Rules[1].AbortMultipartUpload.Days, Equals, 30)
907 c.Assert(len(res.Rules[1].Transitions), Equals, 2)
908 c.Assert(res.Rules[1].Transitions[0].StorageClass, Equals, StorageIA)
909 c.Assert(res.Rules[1].Transitions[0].Days, Equals, 3)
910 c.Assert(res.Rules[1].Transitions[1].StorageClass, Equals, StorageArchive)
911 c.Assert(res.Rules[1].Transitions[1].Days, Equals, 30)
913 err = client.DeleteBucketLifecycle(bucketNameTest)
916 // Set two rule: rule1 and rule3
917 rules = []LifecycleRule{rule1, rule3}
918 err = client.SetBucketLifecycle(bucketNameTest, rules)
921 res, err = client.GetBucketLifecycle(bucketNameTest)
923 c.Assert(len(res.Rules), Equals, 2)
924 c.Assert(res.Rules[0].ID, Equals, "rule1")
925 c.Assert(res.Rules[0].Expiration, NotNil)
926 c.Assert(res.Rules[0].Expiration.CreatedBeforeDate, Equals, "2015-11-11T00:00:00.000Z")
927 c.Assert(res.Rules[1].ID, Equals, "rule3")
928 c.Assert(res.Rules[1].AbortMultipartUpload, NotNil)
929 c.Assert(res.Rules[1].AbortMultipartUpload.Days, Equals, 30)
930 c.Assert(len(res.Rules[1].Transitions), Equals, 2)
931 c.Assert(res.Rules[1].Transitions[0].StorageClass, Equals, StorageIA)
932 c.Assert(res.Rules[1].Transitions[0].Days, Equals, 3)
933 c.Assert(res.Rules[1].Transitions[1].StorageClass, Equals, StorageArchive)
934 c.Assert(res.Rules[1].Transitions[1].Days, Equals, 30)
936 err = client.DeleteBucketLifecycle(bucketNameTest)
940 rules = []LifecycleRule{rule1, rule2, rule3}
941 err = client.SetBucketLifecycle(bucketNameTest, rules)
944 res, err = client.GetBucketLifecycle(bucketNameTest)
946 c.Assert(len(res.Rules), Equals, 3)
947 c.Assert(res.Rules[0].ID, Equals, "rule1")
948 c.Assert(res.Rules[0].Expiration, NotNil)
949 c.Assert(res.Rules[0].Expiration.CreatedBeforeDate, Equals, "2015-11-11T00:00:00.000Z")
950 c.Assert(res.Rules[1].ID, Equals, "rule2")
951 c.Assert(res.Rules[1].Expiration, NotNil)
952 c.Assert(res.Rules[1].Expiration.CreatedBeforeDate, Equals, "2015-11-11T00:00:00.000Z")
953 c.Assert(res.Rules[1].AbortMultipartUpload, NotNil)
954 c.Assert(res.Rules[1].AbortMultipartUpload.Days, Equals, 30)
955 c.Assert(res.Rules[2].ID, Equals, "rule3")
956 c.Assert(res.Rules[2].AbortMultipartUpload, NotNil)
957 c.Assert(res.Rules[2].AbortMultipartUpload.Days, Equals, 30)
958 c.Assert(len(res.Rules[2].Transitions), Equals, 2)
959 c.Assert(res.Rules[2].Transitions[0].StorageClass, Equals, StorageIA)
960 c.Assert(res.Rules[2].Transitions[0].Days, Equals, 3)
961 c.Assert(res.Rules[2].Transitions[1].StorageClass, Equals, StorageArchive)
962 c.Assert(res.Rules[2].Transitions[1].Days, Equals, 30)
964 err = client.DeleteBucket(bucketNameTest)
968 // TestSetBucketLifecycleAboutVersionObject
969 func (s *OssClientSuite) TestSetBucketLifecycleAboutVersionObject(c *C) {
970 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
972 client, err := New(endpoint, accessID, accessKey)
975 err = client.CreateBucket(bucketNameTest)
979 expiration := LifecycleExpiration{
980 ExpiredObjectDeleteMarker: &deleteMark,
983 versionExpiration := LifecycleVersionExpiration{
987 versionTransition := LifecycleVersionTransition{
992 rule := LifecycleRule{
994 Expiration: &expiration,
995 NonVersionExpiration: &versionExpiration,
996 NonVersionTransition: &versionTransition,
998 rules := []LifecycleRule{rule}
1000 err = client.SetBucketLifecycle(bucketNameTest, rules)
1001 c.Assert(err, IsNil)
1003 res, err := client.GetBucketLifecycle(bucketNameTest)
1004 c.Assert(err, IsNil)
1006 c.Assert(res.Rules[0].Expiration, NotNil)
1007 c.Assert(res.Rules[0].Expiration.Days, Equals, 0)
1008 c.Assert(res.Rules[0].Expiration.Date, Equals, "")
1009 c.Assert(*(res.Rules[0].Expiration.ExpiredObjectDeleteMarker), Equals, true)
1011 c.Assert(res.Rules[0].NonVersionExpiration.NoncurrentDays, Equals, 20)
1012 c.Assert(res.Rules[0].NonVersionTransition.NoncurrentDays, Equals, 10)
1013 c.Assert(res.Rules[0].NonVersionTransition.StorageClass, Equals, StorageClassType("IA"))
1015 err = client.DeleteBucket(bucketNameTest)
1016 c.Assert(err, IsNil)
1019 // TestSetBucketLifecycleAboutVersionObject
1020 func (s *OssClientSuite) TestSetBucketLifecycleAboutVersionObjectError(c *C) {
1021 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
1023 client, err := New(endpoint, accessID, accessKey)
1024 c.Assert(err, IsNil)
1026 err = client.CreateBucket(bucketNameTest)
1027 c.Assert(err, IsNil)
1030 expiration := LifecycleExpiration{
1031 ExpiredObjectDeleteMarker: &deleteMark,
1034 versionExpiration := LifecycleVersionExpiration{
1038 versionTransition := LifecycleVersionTransition{
1043 // NonVersionTransition and NonVersionTransitions can not both have value
1044 rule := LifecycleRule{
1046 Expiration: &expiration,
1047 NonVersionExpiration: &versionExpiration,
1048 NonVersionTransition: &versionTransition,
1049 NonVersionTransitions: []LifecycleVersionTransition{versionTransition},
1051 rules := []LifecycleRule{rule}
1053 err = client.SetBucketLifecycle(bucketNameTest, rules)
1054 c.Assert(err, NotNil)
1056 err = client.DeleteBucket(bucketNameTest)
1057 c.Assert(err, IsNil)
1060 // TestSetBucketLifecycleAboutVersionObject
1061 func (s *OssClientSuite) TestSetBucketLifecycleAboutVersionObjectNew(c *C) {
1062 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
1064 client, err := New(endpoint, accessID, accessKey)
1065 c.Assert(err, IsNil)
1067 err = client.CreateBucket(bucketNameTest)
1068 c.Assert(err, IsNil)
1071 expiration := LifecycleExpiration{
1072 ExpiredObjectDeleteMarker: &deleteMark,
1075 versionExpiration := LifecycleVersionExpiration{
1079 versionTransition1 := LifecycleVersionTransition{
1084 versionTransition2 := LifecycleVersionTransition{
1086 StorageClass: "ColdArchive",
1089 rule := LifecycleRule{
1091 Expiration: &expiration,
1092 NonVersionExpiration: &versionExpiration,
1093 NonVersionTransitions: []LifecycleVersionTransition{versionTransition1, versionTransition2},
1095 rules := []LifecycleRule{rule}
1097 err = client.SetBucketLifecycle(bucketNameTest, rules)
1098 c.Assert(err, IsNil)
1100 res, err := client.GetBucketLifecycle(bucketNameTest)
1101 c.Assert(err, IsNil)
1103 c.Assert(res.Rules[0].Expiration, NotNil)
1104 c.Assert(res.Rules[0].Expiration.Days, Equals, 0)
1105 c.Assert(res.Rules[0].Expiration.Date, Equals, "")
1106 c.Assert(*(res.Rules[0].Expiration.ExpiredObjectDeleteMarker), Equals, true)
1108 c.Assert(res.Rules[0].NonVersionExpiration.NoncurrentDays, Equals, 40)
1109 c.Assert(res.Rules[0].NonVersionTransition.NoncurrentDays, Equals, 25)
1110 c.Assert(res.Rules[0].NonVersionTransition.StorageClass, Equals, StorageClassType("IA"))
1111 c.Assert(len(res.Rules[0].NonVersionTransitions), Equals, 2)
1113 err = client.DeleteBucket(bucketNameTest)
1114 c.Assert(err, IsNil)
1117 // TestDeleteBucketLifecycle
1118 func (s *OssClientSuite) TestDeleteBucketLifecycle(c *C) {
1119 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
1121 var rule1 = BuildLifecycleRuleByDate("rule1", "one", true, 2015, 11, 11)
1122 var rule2 = BuildLifecycleRuleByDays("rule2", "two", true, 3)
1123 var rules = []LifecycleRule{rule1, rule2}
1125 client, err := New(endpoint, accessID, accessKey)
1126 c.Assert(err, IsNil)
1128 err = client.CreateBucket(bucketNameTest)
1129 c.Assert(err, IsNil)
1130 //time.Sleep(timeoutInOperation)
1132 err = client.DeleteBucketLifecycle(bucketNameTest)
1133 c.Assert(err, IsNil)
1135 err = client.SetBucketLifecycle(bucketNameTest, rules)
1136 c.Assert(err, IsNil)
1137 //time.Sleep(timeoutInOperation)
1139 res, err := client.GetBucketLifecycle(bucketNameTest)
1140 c.Assert(err, IsNil)
1141 c.Assert(len(res.Rules), Equals, 2)
1144 err = client.DeleteBucketLifecycle(bucketNameTest)
1145 c.Assert(err, IsNil)
1147 //time.Sleep(timeoutInOperation)
1148 res, err = client.GetBucketLifecycle(bucketNameTest)
1149 c.Assert(err, NotNil)
1151 // Eliminate effect of cache
1152 //time.Sleep(timeoutInOperation)
1154 // Delete when not set
1155 err = client.DeleteBucketLifecycle(bucketNameTest)
1156 c.Assert(err, IsNil)
1158 err = client.DeleteBucket(bucketNameTest)
1159 c.Assert(err, IsNil)
1162 // TestSetBucketLifecycleNegative
1163 func (s *OssClientSuite) TestBucketLifecycleNegative(c *C) {
1164 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
1165 var rules = []LifecycleRule{}
1167 client, err := New(endpoint, accessID, accessKey)
1168 c.Assert(err, IsNil)
1170 err = client.CreateBucket(bucketNameTest)
1171 c.Assert(err, IsNil)
1174 err = client.SetBucketLifecycle(bucketNameTest, rules)
1175 c.Assert(err, NotNil)
1177 err = client.DeleteBucket(bucketNameTest)
1178 c.Assert(err, IsNil)
1181 err = client.SetBucketLifecycle(bucketNameTest, rules)
1182 c.Assert(err, NotNil)
1185 _, err = client.GetBucketLifecycle(bucketNameTest)
1186 c.Assert(err, NotNil)
1189 err = client.DeleteBucketLifecycle(bucketNameTest)
1190 c.Assert(err, NotNil)
1193 // TestSetBucketReferer
1194 func (s *OssClientSuite) TestSetBucketReferer(c *C) {
1195 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
1196 var referers = []string{"http://www.aliyun.com", "https://www.aliyun.com"}
1198 client, err := New(endpoint, accessID, accessKey)
1199 c.Assert(err, IsNil)
1201 err = client.CreateBucket(bucketNameTest)
1202 c.Assert(err, IsNil)
1203 time.Sleep(timeoutInOperation)
1205 res, err := client.GetBucketReferer(bucketNameTest)
1206 c.Assert(res.AllowEmptyReferer, Equals, true)
1207 c.Assert(len(res.RefererList), Equals, 0)
1210 err = client.SetBucketReferer(bucketNameTest, referers, false)
1211 c.Assert(err, IsNil)
1212 time.Sleep(timeoutInOperation)
1214 res, err = client.GetBucketReferer(bucketNameTest)
1215 c.Assert(res.AllowEmptyReferer, Equals, false)
1216 c.Assert(len(res.RefererList), Equals, 2)
1217 c.Assert(res.RefererList[0], Equals, "http://www.aliyun.com")
1218 c.Assert(res.RefererList[1], Equals, "https://www.aliyun.com")
1220 // Reset referer, referers empty
1221 referers = []string{""}
1222 err = client.SetBucketReferer(bucketNameTest, referers, true)
1223 c.Assert(err, IsNil)
1225 referers = []string{}
1226 err = client.SetBucketReferer(bucketNameTest, referers, true)
1227 c.Assert(err, IsNil)
1229 res, err = client.GetBucketReferer(bucketNameTest)
1230 c.Assert(res.AllowEmptyReferer, Equals, true)
1231 c.Assert(len(res.RefererList), Equals, 0)
1233 err = client.DeleteBucket(bucketNameTest)
1234 c.Assert(err, IsNil)
1237 // TestSetBucketRefererNegative
1238 func (s *OssClientSuite) TestBucketRefererNegative(c *C) {
1239 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
1240 var referers = []string{""}
1242 client, err := New(endpoint, accessID, accessKey)
1243 c.Assert(err, IsNil)
1246 _, err = client.GetBucketReferer(bucketNameTest)
1247 c.Assert(err, NotNil)
1248 testLogger.Println(err)
1251 err = client.SetBucketReferer(bucketNameTest, referers, true)
1252 c.Assert(err, NotNil)
1253 testLogger.Println(err)
1256 // TestSetBucketLogging
1257 func (s *OssClientSuite) TestSetBucketLogging(c *C) {
1258 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
1259 var bucketNameTarget = bucketNameTest + "-target"
1261 client, err := New(endpoint, accessID, accessKey)
1262 c.Assert(err, IsNil)
1264 err = client.CreateBucket(bucketNameTest)
1265 c.Assert(err, IsNil)
1266 err = client.CreateBucket(bucketNameTarget)
1267 c.Assert(err, IsNil)
1268 time.Sleep(timeoutInOperation)
1271 err = client.SetBucketLogging(bucketNameTest, bucketNameTarget, "prefix", true)
1272 c.Assert(err, IsNil)
1274 err = client.SetBucketLogging(bucketNameTest, bucketNameTarget, "prefix", false)
1275 c.Assert(err, IsNil)
1277 time.Sleep(timeoutInOperation)
1278 res, err := client.GetBucketLogging(bucketNameTest)
1279 c.Assert(err, IsNil)
1280 c.Assert(res.LoggingEnabled.TargetBucket, Equals, "")
1281 c.Assert(res.LoggingEnabled.TargetPrefix, Equals, "")
1283 err = client.DeleteBucketLogging(bucketNameTest)
1284 c.Assert(err, IsNil)
1287 err = client.SetBucketLogging(bucketNameTest, bucketNameTest, "prefix", true)
1288 c.Assert(err, IsNil)
1290 err = client.DeleteBucket(bucketNameTest)
1291 c.Assert(err, IsNil)
1292 err = client.DeleteBucket(bucketNameTarget)
1293 c.Assert(err, IsNil)
1296 // TestDeleteBucketLogging
1297 func (s *OssClientSuite) TestDeleteBucketLogging(c *C) {
1298 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
1299 var bucketNameTarget = bucketNameTest + "-target"
1301 client, err := New(endpoint, accessID, accessKey)
1302 c.Assert(err, IsNil)
1304 err = client.CreateBucket(bucketNameTest)
1305 c.Assert(err, IsNil)
1306 err = client.CreateBucket(bucketNameTarget)
1307 c.Assert(err, IsNil)
1308 time.Sleep(timeoutInOperation)
1311 res, err := client.GetBucketLogging(bucketNameTest)
1312 c.Assert(err, IsNil)
1313 c.Assert(res.LoggingEnabled.TargetBucket, Equals, "")
1314 c.Assert(res.LoggingEnabled.TargetPrefix, Equals, "")
1317 err = client.SetBucketLogging(bucketNameTest, bucketNameTarget, "prefix", true)
1318 c.Assert(err, IsNil)
1321 time.Sleep(timeoutInOperation)
1322 res, err = client.GetBucketLogging(bucketNameTest)
1323 c.Assert(err, IsNil)
1324 c.Assert(res.LoggingEnabled.TargetBucket, Equals, bucketNameTarget)
1325 c.Assert(res.LoggingEnabled.TargetPrefix, Equals, "prefix")
1328 err = client.SetBucketLogging(bucketNameTest, bucketNameTarget, "prefix", false)
1329 c.Assert(err, IsNil)
1332 time.Sleep(timeoutInOperation)
1333 res, err = client.GetBucketLogging(bucketNameTest)
1334 c.Assert(err, IsNil)
1335 c.Assert(res.LoggingEnabled.TargetBucket, Equals, "")
1336 c.Assert(res.LoggingEnabled.TargetPrefix, Equals, "")
1339 err = client.DeleteBucketLogging(bucketNameTest)
1340 c.Assert(err, IsNil)
1343 time.Sleep(timeoutInOperation)
1344 res, err = client.GetBucketLogging(bucketNameTest)
1345 c.Assert(err, IsNil)
1346 c.Assert(res.LoggingEnabled.TargetBucket, Equals, "")
1347 c.Assert(res.LoggingEnabled.TargetPrefix, Equals, "")
1349 err = client.DeleteBucket(bucketNameTest)
1350 c.Assert(err, IsNil)
1351 err = client.DeleteBucket(bucketNameTarget)
1352 c.Assert(err, IsNil)
1355 // TestSetBucketLoggingNegative
1356 func (s *OssClientSuite) TestSetBucketLoggingNegative(c *C) {
1357 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
1358 var bucketNameTarget = bucketNameTest + "-target"
1360 client, err := New(endpoint, accessID, accessKey)
1361 c.Assert(err, IsNil)
1364 _, err = client.GetBucketLogging(bucketNameTest)
1365 c.Assert(err, NotNil)
1368 err = client.SetBucketLogging(bucketNameTest, "targetbucket", "prefix", true)
1369 c.Assert(err, NotNil)
1372 err = client.DeleteBucketLogging(bucketNameTest)
1373 c.Assert(err, NotNil)
1375 err = client.CreateBucket(bucketNameTest)
1376 c.Assert(err, IsNil)
1377 time.Sleep(timeoutInOperation)
1379 // Target bucket not exist
1380 err = client.SetBucketLogging(bucketNameTest, bucketNameTarget, "prefix", true)
1381 c.Assert(err, NotNil)
1383 // Parameter invalid
1384 err = client.SetBucketLogging(bucketNameTest, "XXXX", "prefix", true)
1385 c.Assert(err, NotNil)
1387 err = client.SetBucketLogging(bucketNameTest, "xx", "prefix", true)
1388 c.Assert(err, NotNil)
1390 err = client.DeleteBucket(bucketNameTest)
1391 c.Assert(err, IsNil)
1394 // TestSetBucketWebsite
1395 func (s *OssClientSuite) TestSetBucketWebsite(c *C) {
1396 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
1397 var indexWebsite = "myindex.html"
1398 var errorWebsite = "myerror.html"
1400 client, err := New(endpoint, accessID, accessKey)
1401 c.Assert(err, IsNil)
1402 time.Sleep(timeoutInOperation)
1404 err = client.CreateBucket(bucketNameTest)
1405 c.Assert(err, IsNil)
1408 err = client.SetBucketWebsite(bucketNameTest, indexWebsite, errorWebsite)
1409 c.Assert(err, IsNil)
1412 err = client.SetBucketWebsite(bucketNameTest, indexWebsite, errorWebsite)
1413 c.Assert(err, IsNil)
1415 res, err := client.GetBucketWebsite(bucketNameTest)
1416 c.Assert(err, IsNil)
1417 c.Assert(res.IndexDocument.Suffix, Equals, indexWebsite)
1418 c.Assert(res.ErrorDocument.Key, Equals, errorWebsite)
1421 err = client.SetBucketWebsite(bucketNameTest, "your"+indexWebsite, "your"+errorWebsite)
1422 c.Assert(err, IsNil)
1424 time.Sleep(timeoutInOperation)
1425 res, err = client.GetBucketWebsite(bucketNameTest)
1426 c.Assert(err, IsNil)
1427 c.Assert(res.IndexDocument.Suffix, Equals, "your"+indexWebsite)
1428 c.Assert(res.ErrorDocument.Key, Equals, "your"+errorWebsite)
1430 err = client.DeleteBucketWebsite(bucketNameTest)
1431 c.Assert(err, IsNil)
1434 err = client.SetBucketWebsite(bucketNameTest, indexWebsite, errorWebsite)
1435 c.Assert(err, IsNil)
1437 // Eliminate effect of cache
1438 time.Sleep(timeoutInOperation)
1440 res, err = client.GetBucketWebsite(bucketNameTest)
1441 c.Assert(err, IsNil)
1442 c.Assert(res.IndexDocument.Suffix, Equals, indexWebsite)
1443 c.Assert(res.ErrorDocument.Key, Equals, errorWebsite)
1445 err = client.DeleteBucket(bucketNameTest)
1446 c.Assert(err, IsNil)
1449 // TestDeleteBucketWebsite
1450 func (s *OssClientSuite) TestDeleteBucketWebsite(c *C) {
1451 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
1452 var indexWebsite = "myindex.html"
1453 var errorWebsite = "myerror.html"
1455 client, err := New(endpoint, accessID, accessKey)
1456 c.Assert(err, IsNil)
1458 err = client.CreateBucket(bucketNameTest)
1459 c.Assert(err, IsNil)
1460 time.Sleep(timeoutInOperation)
1463 res, err := client.GetBucketWebsite(bucketNameTest)
1464 c.Assert(err, NotNil)
1466 // Detele without set
1467 err = client.DeleteBucketWebsite(bucketNameTest)
1468 c.Assert(err, IsNil)
1471 err = client.SetBucketWebsite(bucketNameTest, indexWebsite, errorWebsite)
1472 c.Assert(err, IsNil)
1474 time.Sleep(timeoutInOperation)
1475 res, err = client.GetBucketWebsite(bucketNameTest)
1476 c.Assert(err, IsNil)
1477 c.Assert(res.IndexDocument.Suffix, Equals, indexWebsite)
1478 c.Assert(res.ErrorDocument.Key, Equals, errorWebsite)
1481 time.Sleep(timeoutInOperation)
1482 err = client.DeleteBucketWebsite(bucketNameTest)
1483 c.Assert(err, IsNil)
1485 time.Sleep(timeoutInOperation)
1486 res, err = client.GetBucketWebsite(bucketNameTest)
1487 c.Assert(err, NotNil)
1489 // Detele after delete
1490 err = client.DeleteBucketWebsite(bucketNameTest)
1491 c.Assert(err, IsNil)
1493 err = client.DeleteBucket(bucketNameTest)
1494 c.Assert(err, IsNil)
1497 // TestSetBucketWebsiteNegative
1498 func (s *OssClientSuite) TestSetBucketWebsiteNegative(c *C) {
1499 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
1500 var indexWebsite = "myindex.html"
1501 var errorWebsite = "myerror.html"
1503 client, err := New(endpoint, accessID, accessKey)
1504 c.Assert(err, IsNil)
1506 err = client.DeleteBucket(bucketNameTest)
1509 _, err = client.GetBucketWebsite(bucketNameTest)
1510 c.Assert(err, NotNil)
1512 err = client.DeleteBucketWebsite(bucketNameTest)
1513 c.Assert(err, NotNil)
1515 err = client.SetBucketWebsite(bucketNameTest, indexWebsite, errorWebsite)
1516 c.Assert(err, NotNil)
1518 err = client.CreateBucket(bucketNameTest)
1519 c.Assert(err, IsNil)
1522 time.Sleep(timeoutInOperation)
1523 err = client.SetBucketWebsite(bucketNameTest, "myindex", "myerror")
1524 c.Assert(err, IsNil)
1526 res, err := client.GetBucketWebsite(bucketNameTest)
1527 c.Assert(err, IsNil)
1528 c.Assert(res.IndexDocument.Suffix, Equals, "myindex")
1529 c.Assert(res.ErrorDocument.Key, Equals, "myerror")
1532 err = client.DeleteBucketWebsite(bucketNameTest)
1533 c.Assert(err, IsNil)
1535 time.Sleep(timeoutInOperation)
1536 _, err = client.GetBucketWebsite(bucketNameTest)
1537 c.Assert(err, NotNil)
1539 // Detele after delete
1540 err = client.DeleteBucketWebsite(bucketNameTest)
1541 c.Assert(err, IsNil)
1543 err = client.DeleteBucket(bucketNameTest)
1544 c.Assert(err, IsNil)
1547 // TestSetBucketWebsiteDetail
1548 func (s *OssClientSuite) TestSetBucketWebsiteDetail(c *C) {
1549 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
1550 var indexWebsite = "myindex.html"
1551 var errorWebsite = "myerror.html"
1553 client, err := New(endpoint, accessID, accessKey)
1554 c.Assert(err, IsNil)
1556 err = client.CreateBucket(bucketNameTest)
1557 c.Assert(err, IsNil)
1558 time.Sleep(timeoutInOperation)
1562 // Define one routing rule
1563 ruleOk := RoutingRule{
1565 Condition: Condition{
1566 KeyPrefixEquals: "",
1567 HTTPErrorCodeReturnedEquals: 404,
1570 RedirectType: "Mirror",
1571 // PassQueryString: &btrue, // set default value
1572 MirrorURL: "http://www.test.com/",
1573 // MirrorPassQueryString:&btrue, // set default value
1574 // MirrorFollowRedirect:&bfalse, // set default value
1575 // MirrorCheckMd5:&bfalse, // set default value
1576 MirrorHeaders: MirrorHeaders{
1577 // PassAll:&bfalse, // set default value
1578 Pass: []string{"myheader-key1", "myheader-key2"},
1579 Remove: []string{"myheader-key3", "myheader-key4"},
1580 Set: []MirrorHeaderSet{
1582 Key: "myheader-key5",
1583 Value: "myheader-value5",
1590 // Define array routing rule
1591 ruleArrOk := []RoutingRule{
1594 Condition: Condition{
1595 KeyPrefixEquals: "abc/",
1596 HTTPErrorCodeReturnedEquals: 404,
1597 IncludeHeader: []IncludeHeader{
1600 Equals: "test.oss-cn-beijing-internal.aliyuncs.com",
1605 RedirectType: "AliCDN",
1607 HostName: "www.test.com",
1608 PassQueryString: &bfalse,
1609 ReplaceKeyWith: "prefix/${key}.suffix",
1610 HttpRedirectCode: 301,
1615 Condition: Condition{
1616 KeyPrefixEquals: "",
1617 HTTPErrorCodeReturnedEquals: 404,
1620 RedirectType: "Mirror",
1621 PassQueryString: &btrue,
1622 MirrorURL: "http://www.test.com/",
1623 MirrorPassQueryString: &btrue,
1624 MirrorFollowRedirect: &bfalse,
1625 MirrorCheckMd5: &bfalse,
1626 MirrorHeaders: MirrorHeaders{
1628 Pass: []string{"myheader-key1", "myheader-key2"},
1629 Remove: []string{"myheader-key3", "myheader-key4"},
1630 Set: []MirrorHeaderSet{
1632 Key: "myheader-key5",
1633 Value: "myheader-value5",
1641 // Set one routing rule
1642 wxmlOne := WebsiteXML{}
1643 wxmlOne.RoutingRules = append(wxmlOne.RoutingRules, ruleOk)
1644 var responseHeader http.Header
1645 err = client.SetBucketWebsiteDetail(bucketNameTest, wxmlOne, GetResponseHeader(&responseHeader))
1646 c.Assert(err, IsNil)
1647 requestId := GetRequestId(responseHeader)
1648 c.Assert(len(requestId) > 0, Equals, true)
1650 res, err := client.GetBucketWebsite(bucketNameTest)
1651 c.Assert(err, IsNil)
1652 c.Assert(res.RoutingRules[0].Redirect.RedirectType, Equals, "Mirror")
1653 c.Assert(*res.RoutingRules[0].Redirect.PassQueryString, Equals, false)
1654 c.Assert(*res.RoutingRules[0].Redirect.MirrorPassQueryString, Equals, false)
1655 c.Assert(*res.RoutingRules[0].Redirect.MirrorFollowRedirect, Equals, true)
1656 c.Assert(*res.RoutingRules[0].Redirect.MirrorCheckMd5, Equals, false)
1657 c.Assert(*res.RoutingRules[0].Redirect.MirrorHeaders.PassAll, Equals, false)
1659 // Set one routing rule and IndexDocument, IndexDocument
1661 IndexDocument: IndexDocument{Suffix: indexWebsite},
1662 ErrorDocument: ErrorDocument{Key: errorWebsite},
1664 wxml.RoutingRules = append(wxml.RoutingRules, ruleOk)
1665 err = client.SetBucketWebsiteDetail(bucketNameTest, wxml, GetResponseHeader(&responseHeader))
1666 c.Assert(err, IsNil)
1667 requestId = GetRequestId(responseHeader)
1668 c.Assert(len(requestId) > 0, Equals, true)
1670 res, err = client.GetBucketWebsite(bucketNameTest)
1671 c.Assert(err, IsNil)
1672 c.Assert(res.IndexDocument.Suffix, Equals, indexWebsite)
1673 c.Assert(res.ErrorDocument.Key, Equals, errorWebsite)
1674 c.Assert(res.RoutingRules[0].Redirect.RedirectType, Equals, "Mirror")
1676 // Set array routing rule
1677 wxml.RoutingRules = append(wxml.RoutingRules, ruleArrOk...)
1678 err = client.SetBucketWebsiteDetail(bucketNameTest, wxml, GetResponseHeader(&responseHeader))
1679 c.Assert(err, IsNil)
1680 requestId = GetRequestId(responseHeader)
1681 c.Assert(len(requestId) > 0, Equals, true)
1683 res, err = client.GetBucketWebsite(bucketNameTest)
1684 c.Assert(err, IsNil)
1685 c.Assert(res.IndexDocument.Suffix, Equals, indexWebsite)
1686 c.Assert(res.ErrorDocument.Key, Equals, errorWebsite)
1687 c.Assert(len(res.RoutingRules), Equals, 3)
1688 c.Assert(res.RoutingRules[1].Redirect.RedirectType, Equals, "AliCDN")
1689 c.Assert(*res.RoutingRules[2].Redirect.MirrorPassQueryString, Equals, true)
1690 c.Assert(*res.RoutingRules[2].Redirect.MirrorFollowRedirect, Equals, false)
1692 // Define one error routing rule
1693 ruleErr := RoutingRule{
1696 RedirectType: "Mirror",
1697 PassQueryString: &btrue,
1700 // Define array error routing rule
1701 rulesErrArr := []RoutingRule{
1705 RedirectType: "Mirror",
1706 PassQueryString: &btrue,
1712 RedirectType: "Mirror",
1713 PassQueryString: &btrue,
1718 ruleIntErr := RoutingRule{
1719 // RuleNumber:0, // set NULL value
1720 Condition: Condition{
1721 KeyPrefixEquals: "",
1722 HTTPErrorCodeReturnedEquals: 404,
1725 RedirectType: "Mirror",
1726 // PassQueryString: &btrue, // set default value
1727 MirrorURL: "http://www.test.com/",
1728 // MirrorPassQueryString:&btrue, // set default value
1729 // MirrorFollowRedirect:&bfalse, // set default value
1730 // MirrorCheckMd5:&bfalse, // set default value
1731 MirrorHeaders: MirrorHeaders{
1732 // PassAll:&bfalse, // set default value
1733 Pass: []string{"myheader-key1", "myheader-key2"},
1734 Remove: []string{"myheader-key3", "myheader-key4"},
1735 Set: []MirrorHeaderSet{
1737 Key: "myheader-key5",
1738 Value: "myheader-value5",
1745 // Set one int type error rule
1746 wxmlIntErr := WebsiteXML{}
1747 wxmlIntErr.RoutingRules = append(wxmlIntErr.RoutingRules, ruleIntErr)
1748 err = client.SetBucketWebsiteDetail(bucketNameTest, wxmlIntErr)
1749 c.Assert(err, NotNil)
1751 // Set one error rule
1752 wxmlErr := WebsiteXML{}
1753 wxmlErr.RoutingRules = append(wxmlErr.RoutingRules, ruleErr)
1754 err = client.SetBucketWebsiteDetail(bucketNameTest, wxmlErr)
1755 c.Assert(err, NotNil)
1757 // Set one error rule and one correct rule
1758 wxmlErr.RoutingRules = append(wxmlErr.RoutingRules, ruleOk)
1759 err = client.SetBucketWebsiteDetail(bucketNameTest, wxmlErr)
1760 c.Assert(err, NotNil)
1762 wxmlErrRuleArr := WebsiteXML{}
1763 wxmlErrRuleArr.RoutingRules = append(wxmlErrRuleArr.RoutingRules, rulesErrArr...)
1764 // Set array error routing rule
1765 err = client.SetBucketWebsiteDetail(bucketNameTest, wxmlErrRuleArr)
1766 c.Assert(err, NotNil)
1768 err = client.DeleteBucketWebsite(bucketNameTest)
1769 c.Assert(err, IsNil)
1771 err = client.DeleteBucket(bucketNameTest)
1772 c.Assert(err, IsNil)
1775 // TestSetBucketWebsiteXml
1776 func (s *OssClientSuite) TestSetBucketWebsiteXml(c *C) {
1777 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
1778 client, err := New(endpoint, accessID, accessKey)
1779 c.Assert(err, IsNil)
1781 err = client.CreateBucket(bucketNameTest)
1782 c.Assert(err, IsNil)
1783 time.Sleep(timeoutInOperation)
1785 // Define one routing rule
1786 ruleOk := RoutingRule{
1788 Condition: Condition{
1789 KeyPrefixEquals: "",
1790 HTTPErrorCodeReturnedEquals: 404,
1793 RedirectType: "Mirror",
1794 // PassQueryString: &btrue, // set default value
1795 MirrorURL: "http://www.test.com/",
1796 // MirrorPassQueryString:&btrue, // set default value
1797 // MirrorFollowRedirect:&bfalse, // set default value
1798 // MirrorCheckMd5:&bfalse, // set default value
1799 MirrorHeaders: MirrorHeaders{
1800 // PassAll:&bfalse, // set default value
1801 Pass: []string{"myheader-key1", "myheader-key2"},
1802 Remove: []string{"myheader-key3", "myheader-key4"},
1803 Set: []MirrorHeaderSet{
1805 Key: "myheader-key5",
1806 Value: "myheader-value5",
1813 // Set one routing rule
1814 wxmlOne := WebsiteXML{}
1815 wxmlOne.RoutingRules = append(wxmlOne.RoutingRules, ruleOk)
1816 bs, err := xml.Marshal(wxmlOne)
1817 c.Assert(err, IsNil)
1819 var responseHeader http.Header
1820 err = client.SetBucketWebsiteXml(bucketNameTest, string(bs), GetResponseHeader(&responseHeader))
1821 c.Assert(err, IsNil)
1823 requestId := GetRequestId(responseHeader)
1824 c.Assert(len(requestId) > 0, Equals, true)
1826 res, err := client.GetBucketWebsite(bucketNameTest)
1827 c.Assert(err, IsNil)
1828 c.Assert(res.RoutingRules[0].Redirect.RedirectType, Equals, "Mirror")
1829 c.Assert(*res.RoutingRules[0].Redirect.PassQueryString, Equals, false)
1830 c.Assert(*res.RoutingRules[0].Redirect.MirrorPassQueryString, Equals, false)
1831 c.Assert(*res.RoutingRules[0].Redirect.MirrorFollowRedirect, Equals, true)
1832 c.Assert(*res.RoutingRules[0].Redirect.MirrorCheckMd5, Equals, false)
1833 c.Assert(*res.RoutingRules[0].Redirect.MirrorHeaders.PassAll, Equals, false)
1836 // TestSetBucketCORS
1837 func (s *OssClientSuite) TestSetBucketCORS(c *C) {
1838 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
1839 var rule1 = CORSRule{
1840 AllowedOrigin: []string{"*"},
1841 AllowedMethod: []string{"PUT", "GET", "POST"},
1842 AllowedHeader: []string{},
1843 ExposeHeader: []string{},
1847 var rule2 = CORSRule{
1848 AllowedOrigin: []string{"http://www.a.com", "http://www.b.com"},
1849 AllowedMethod: []string{"GET"},
1850 AllowedHeader: []string{"Authorization"},
1851 ExposeHeader: []string{"x-oss-test", "x-oss-test1"},
1855 client, err := New(endpoint, accessID, accessKey)
1856 c.Assert(err, IsNil)
1858 err = client.CreateBucket(bucketNameTest)
1859 c.Assert(err, IsNil)
1860 time.Sleep(timeoutInOperation)
1863 err = client.SetBucketCORS(bucketNameTest, []CORSRule{rule1})
1864 c.Assert(err, IsNil)
1866 gbcr, err := client.GetBucketCORS(bucketNameTest)
1867 c.Assert(err, IsNil)
1868 c.Assert(len(gbcr.CORSRules), Equals, 1)
1869 c.Assert(len(gbcr.CORSRules[0].AllowedOrigin), Equals, 1)
1870 c.Assert(len(gbcr.CORSRules[0].AllowedMethod), Equals, 3)
1871 c.Assert(len(gbcr.CORSRules[0].AllowedHeader), Equals, 0)
1872 c.Assert(len(gbcr.CORSRules[0].ExposeHeader), Equals, 0)
1873 c.Assert(gbcr.CORSRules[0].MaxAgeSeconds, Equals, 100)
1876 err = client.SetBucketCORS(bucketNameTest, []CORSRule{rule1})
1877 c.Assert(err, IsNil)
1879 gbcr, err = client.GetBucketCORS(bucketNameTest)
1880 c.Assert(err, IsNil)
1881 c.Assert(len(gbcr.CORSRules), Equals, 1)
1882 c.Assert(len(gbcr.CORSRules[0].AllowedOrigin), Equals, 1)
1883 c.Assert(len(gbcr.CORSRules[0].AllowedMethod), Equals, 3)
1884 c.Assert(len(gbcr.CORSRules[0].AllowedHeader), Equals, 0)
1885 c.Assert(len(gbcr.CORSRules[0].ExposeHeader), Equals, 0)
1886 c.Assert(gbcr.CORSRules[0].MaxAgeSeconds, Equals, 100)
1889 err = client.SetBucketCORS(bucketNameTest, []CORSRule{rule2})
1890 c.Assert(err, IsNil)
1892 time.Sleep(timeoutInOperation)
1893 gbcr, err = client.GetBucketCORS(bucketNameTest)
1894 c.Assert(err, IsNil)
1895 c.Assert(len(gbcr.CORSRules), Equals, 1)
1896 c.Assert(len(gbcr.CORSRules[0].AllowedOrigin), Equals, 2)
1897 c.Assert(len(gbcr.CORSRules[0].AllowedMethod), Equals, 1)
1898 c.Assert(len(gbcr.CORSRules[0].AllowedHeader), Equals, 1)
1899 c.Assert(len(gbcr.CORSRules[0].ExposeHeader), Equals, 2)
1900 c.Assert(gbcr.CORSRules[0].MaxAgeSeconds, Equals, 200)
1903 err = client.SetBucketCORS(bucketNameTest, []CORSRule{rule1, rule2})
1904 c.Assert(err, IsNil)
1906 time.Sleep(timeoutInOperation)
1907 gbcr, err = client.GetBucketCORS(bucketNameTest)
1908 c.Assert(err, IsNil)
1909 c.Assert(len(gbcr.CORSRules), Equals, 2)
1912 err = client.DeleteBucketCORS(bucketNameTest)
1913 c.Assert(err, IsNil)
1915 err = client.SetBucketCORS(bucketNameTest, []CORSRule{rule1, rule2})
1916 c.Assert(err, IsNil)
1918 time.Sleep(timeoutInOperation)
1919 gbcr, err = client.GetBucketCORS(bucketNameTest)
1920 c.Assert(err, IsNil)
1921 c.Assert(len(gbcr.CORSRules), Equals, 2)
1923 err = client.DeleteBucketCORS(bucketNameTest)
1924 c.Assert(err, IsNil)
1926 err = client.DeleteBucket(bucketNameTest)
1927 c.Assert(err, IsNil)
1930 // TestDeleteBucketCORS
1931 func (s *OssClientSuite) TestDeleteBucketCORS(c *C) {
1932 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
1933 var rule = CORSRule{
1934 AllowedOrigin: []string{"*"},
1935 AllowedMethod: []string{"PUT", "GET", "POST"},
1936 AllowedHeader: []string{},
1937 ExposeHeader: []string{},
1941 client, err := New(endpoint, accessID, accessKey)
1942 c.Assert(err, IsNil)
1944 err = client.CreateBucket(bucketNameTest)
1945 c.Assert(err, IsNil)
1946 time.Sleep(timeoutInOperation)
1949 err = client.DeleteBucketCORS(bucketNameTest)
1950 c.Assert(err, IsNil)
1953 err = client.SetBucketCORS(bucketNameTest, []CORSRule{rule})
1954 c.Assert(err, IsNil)
1956 time.Sleep(timeoutInOperation)
1957 _, err = client.GetBucketCORS(bucketNameTest)
1958 c.Assert(err, IsNil)
1961 err = client.DeleteBucketCORS(bucketNameTest)
1962 c.Assert(err, IsNil)
1964 time.Sleep(timeoutInOperation)
1965 _, err = client.GetBucketCORS(bucketNameTest)
1966 c.Assert(err, NotNil)
1968 // Detele after deleting
1969 err = client.DeleteBucketCORS(bucketNameTest)
1970 c.Assert(err, IsNil)
1972 err = client.DeleteBucket(bucketNameTest)
1973 c.Assert(err, IsNil)
1976 // TestSetBucketCORSNegative
1977 func (s *OssClientSuite) TestSetBucketCORSNegative(c *C) {
1978 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
1979 var rule = CORSRule{
1980 AllowedOrigin: []string{"*"},
1981 AllowedMethod: []string{"PUT", "GET", "POST"},
1982 AllowedHeader: []string{},
1983 ExposeHeader: []string{},
1987 client, err := New(endpoint, accessID, accessKey)
1988 c.Assert(err, IsNil)
1990 err = client.DeleteBucket(bucketNameTest)
1993 _, err = client.GetBucketCORS(bucketNameTest)
1994 c.Assert(err, NotNil)
1996 err = client.DeleteBucketCORS(bucketNameTest)
1997 c.Assert(err, NotNil)
1999 err = client.SetBucketCORS(bucketNameTest, []CORSRule{rule})
2000 c.Assert(err, NotNil)
2002 err = client.CreateBucket(bucketNameTest)
2003 c.Assert(err, IsNil)
2004 time.Sleep(timeoutInOperation)
2006 _, err = client.GetBucketCORS(bucketNameTest)
2007 c.Assert(err, NotNil)
2010 err = client.SetBucketCORS(bucketNameTest, []CORSRule{rule})
2011 c.Assert(err, IsNil)
2012 time.Sleep(timeoutInOperation)
2014 _, err = client.GetBucketCORS(bucketNameTest)
2015 c.Assert(err, IsNil)
2018 err = client.DeleteBucketCORS(bucketNameTest)
2019 c.Assert(err, IsNil)
2021 time.Sleep(timeoutInOperation)
2022 _, err = client.GetBucketCORS(bucketNameTest)
2023 c.Assert(err, NotNil)
2025 // Delete after deleting
2026 err = client.DeleteBucketCORS(bucketNameTest)
2027 c.Assert(err, IsNil)
2029 err = client.DeleteBucket(bucketNameTest)
2030 c.Assert(err, IsNil)
2033 // TestGetBucketInfo
2034 func (s *OssClientSuite) TestGetBucketInfo(c *C) {
2035 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
2037 client, err := New(endpoint, accessID, accessKey)
2038 c.Assert(err, IsNil)
2040 err = client.CreateBucket(bucketNameTest)
2041 c.Assert(err, IsNil)
2043 res, err := client.GetBucketInfo(bucketNameTest)
2044 c.Assert(err, IsNil)
2045 c.Assert(res.BucketInfo.Name, Equals, bucketNameTest)
2046 c.Assert(strings.HasPrefix(res.BucketInfo.Location, "oss-"), Equals, true)
2047 c.Assert(res.BucketInfo.ACL, Equals, "private")
2048 c.Assert(strings.HasSuffix(res.BucketInfo.ExtranetEndpoint, ".com"), Equals, true)
2049 c.Assert(strings.HasSuffix(res.BucketInfo.IntranetEndpoint, ".com"), Equals, true)
2050 c.Assert(res.BucketInfo.CreationDate, NotNil)
2052 err = client.DeleteBucket(bucketNameTest)
2053 c.Assert(err, IsNil)
2056 // TestGetBucketInfoNegative
2057 func (s *OssClientSuite) TestGetBucketInfoNegative(c *C) {
2058 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
2060 client, err := New(endpoint, accessID, accessKey)
2061 c.Assert(err, IsNil)
2064 _, err = client.GetBucketInfo(bucketNameTest)
2065 c.Assert(err, NotNil)
2067 // Bucket name invalid
2068 _, err = client.GetBucketInfo("InvalidBucketName_")
2069 c.Assert(err, NotNil)
2072 // TestEndpointFormat
2073 func (s *OssClientSuite) TestEndpointFormat(c *C) {
2074 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
2077 client, err := New(endpoint, accessID, accessKey)
2078 c.Assert(err, IsNil)
2080 err = client.CreateBucket(bucketNameTest)
2081 c.Assert(err, IsNil)
2082 time.Sleep(timeoutInOperation)
2084 res, err := client.GetBucketACL(bucketNameTest)
2085 c.Assert(err, IsNil)
2086 c.Assert(res.ACL, Equals, string(ACLPrivate))
2088 err = client.DeleteBucket(bucketNameTest)
2089 c.Assert(err, IsNil)
2090 time.Sleep(timeoutInOperation)
2093 client, err = New(endpoint+":80", accessID, accessKey)
2094 c.Assert(err, IsNil)
2096 err = client.CreateBucket(bucketNameTest)
2097 c.Assert(err, IsNil)
2099 time.Sleep(timeoutInOperation)
2100 res, err = client.GetBucketACL(bucketNameTest)
2101 c.Assert(err, IsNil)
2102 c.Assert(res.ACL, Equals, string(ACLPrivate))
2104 err = client.DeleteBucket(bucketNameTest)
2105 c.Assert(err, IsNil)
2109 func (s *OssClientSuite) _TestCname(c *C) {
2110 var bucketNameTest = "<my-bucket-cname>"
2112 client, err := New("<endpoint>", "<accessKeyId>", "<accessKeySecret>", UseCname(true))
2113 c.Assert(err, IsNil)
2115 err = client.CreateBucket(bucketNameTest)
2116 c.Assert(err, IsNil)
2118 _, err = client.ListBuckets()
2119 c.Assert(err, NotNil)
2121 res, err := client.GetBucketACL(bucketNameTest)
2122 c.Assert(err, IsNil)
2123 c.Assert(res.ACL, Equals, string(ACLPrivate))
2126 // TestCnameNegative
2127 func (s *OssClientSuite) _TestCnameNegative(c *C) {
2128 var bucketNameTest = "<my-bucket-cname>"
2130 client, err := New("<endpoint>", "<accessKeyId>", "<accessKeySecret>", UseCname(true))
2131 c.Assert(err, IsNil)
2133 err = client.CreateBucket(bucketNameTest)
2134 c.Assert(err, NotNil)
2136 _, err = client.ListBuckets()
2137 c.Assert(err, NotNil)
2139 _, err = client.GetBucketACL(bucketNameTest)
2140 c.Assert(err, NotNil)
2144 func (s *OssClientSuite) _TestHTTPS(c *C) {
2145 var bucketNameTest = "<my-bucket-https>"
2147 client, err := New("<endpoint>", "<accessKeyId>", "<accessKeySecret>")
2148 c.Assert(err, IsNil)
2150 err = client.CreateBucket(bucketNameTest)
2151 c.Assert(err, IsNil)
2153 res, err := client.GetBucketACL(bucketNameTest)
2154 c.Assert(err, IsNil)
2155 c.Assert(res.ACL, Equals, string(ACLPrivate))
2157 err = client.DeleteBucket(bucketNameTest)
2158 c.Assert(err, IsNil)
2162 func (s *OssClientSuite) TestClientOption(c *C) {
2163 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
2165 client, err := New(endpoint, accessID, accessKey, UseCname(true),
2166 Timeout(11, 12), SecurityToken("token"), Proxy(proxyHost))
2167 c.Assert(err, IsNil)
2169 // CreateBucket timeout
2170 err = client.CreateBucket(bucketNameTest)
2171 c.Assert(err, NotNil)
2173 c.Assert(client.Conn.config.HTTPTimeout.ConnectTimeout, Equals, time.Second*11)
2174 c.Assert(client.Conn.config.HTTPTimeout.ReadWriteTimeout, Equals, time.Second*12)
2175 c.Assert(client.Conn.config.HTTPTimeout.HeaderTimeout, Equals, time.Second*12)
2176 c.Assert(client.Conn.config.HTTPTimeout.IdleConnTimeout, Equals, time.Second*12)
2177 c.Assert(client.Conn.config.HTTPTimeout.LongTimeout, Equals, time.Second*12*10)
2179 c.Assert(client.Conn.config.SecurityToken, Equals, "token")
2180 c.Assert(client.Conn.config.IsCname, Equals, true)
2182 c.Assert(client.Conn.config.IsUseProxy, Equals, true)
2183 c.Assert(client.Config.ProxyHost, Equals, proxyHost)
2185 client, err = New(endpoint, accessID, accessKey, AuthProxy(proxyHost, proxyUser, proxyPasswd))
2187 c.Assert(client.Conn.config.IsUseProxy, Equals, true)
2188 c.Assert(client.Config.ProxyHost, Equals, proxyHost)
2189 c.Assert(client.Conn.config.IsAuthProxy, Equals, true)
2190 c.Assert(client.Conn.config.ProxyUser, Equals, proxyUser)
2191 c.Assert(client.Conn.config.ProxyPassword, Equals, proxyPasswd)
2193 client, err = New(endpoint, accessID, accessKey, UserAgent("go sdk user agent"))
2194 c.Assert(client.Conn.config.UserAgent, Equals, "go sdk user agent")
2196 // Check we can overide the http.Client
2197 httpClient := new(http.Client)
2198 client, err = New(endpoint, accessID, accessKey, HTTPClient(httpClient))
2199 c.Assert(client.HTTPClient, Equals, httpClient)
2200 c.Assert(client.Conn.client, Equals, httpClient)
2201 client, err = New(endpoint, accessID, accessKey)
2202 c.Assert(client.HTTPClient, IsNil)
2206 func (s *OssClientSuite) ProxyTestFunc(c *C, authVersion AuthVersionType, extraHeaders []string) {
2207 bucketNameTest := bucketNamePrefix + RandLowStr(6)
2208 objectName := "体育/奥运/首金"
2209 objectValue := "大江东去,浪淘尽,千古风流人物。 故垒西边,人道是、三国周郎赤壁。"
2211 client, err := New(endpoint, accessID, accessKey, AuthProxy(proxyHost, proxyUser, proxyPasswd))
2213 oldType := client.Config.AuthVersion
2214 oldHeaders := client.Config.AdditionalHeaders
2215 client.Config.AuthVersion = authVersion
2216 client.Config.AdditionalHeaders = extraHeaders
2219 err = client.CreateBucket(bucketNameTest)
2220 c.Assert(err, IsNil)
2223 _, err = client.GetBucketInfo(bucketNameTest)
2224 c.Assert(err, IsNil)
2226 bucket, err := client.Bucket(bucketNameTest)
2229 str, err := bucket.SignURL(objectName, HTTPPut, 60)
2230 c.Assert(err, IsNil)
2231 if bucket.Client.Config.AuthVersion == AuthV1 {
2232 c.Assert(strings.Contains(str, HTTPParamExpires+"="), Equals, true)
2233 c.Assert(strings.Contains(str, HTTPParamAccessKeyID+"="), Equals, true)
2234 c.Assert(strings.Contains(str, HTTPParamSignature+"="), Equals, true)
2236 c.Assert(strings.Contains(str, HTTPParamSignatureVersion+"=OSS2"), Equals, true)
2237 c.Assert(strings.Contains(str, HTTPParamExpiresV2+"="), Equals, true)
2238 c.Assert(strings.Contains(str, HTTPParamAccessKeyIDV2+"="), Equals, true)
2239 c.Assert(strings.Contains(str, HTTPParamSignatureV2+"="), Equals, true)
2242 // Put object with URL
2243 err = bucket.PutObjectWithURL(str, strings.NewReader(objectValue))
2244 c.Assert(err, IsNil)
2246 // Sign URL for get object
2247 str, err = bucket.SignURL(objectName, HTTPGet, 60)
2248 c.Assert(err, IsNil)
2249 if bucket.Client.Config.AuthVersion == AuthV1 {
2250 c.Assert(strings.Contains(str, HTTPParamExpires+"="), Equals, true)
2251 c.Assert(strings.Contains(str, HTTPParamAccessKeyID+"="), Equals, true)
2252 c.Assert(strings.Contains(str, HTTPParamSignature+"="), Equals, true)
2254 c.Assert(strings.Contains(str, HTTPParamSignatureVersion+"=OSS2"), Equals, true)
2255 c.Assert(strings.Contains(str, HTTPParamExpiresV2+"="), Equals, true)
2256 c.Assert(strings.Contains(str, HTTPParamAccessKeyIDV2+"="), Equals, true)
2257 c.Assert(strings.Contains(str, HTTPParamSignatureV2+"="), Equals, true)
2260 // Get object with URL
2261 body, err := bucket.GetObjectWithURL(str)
2262 c.Assert(err, IsNil)
2263 str, err = readBody(body)
2264 c.Assert(err, IsNil)
2265 c.Assert(str, Equals, objectValue)
2268 err = bucket.PutObject(objectName, strings.NewReader(objectValue))
2269 c.Assert(err, IsNil)
2272 _, err = bucket.GetObject(objectName)
2273 c.Assert(err, IsNil)
2276 _, err = bucket.ListObjects()
2277 c.Assert(err, IsNil)
2280 err = bucket.DeleteObject(objectName)
2281 c.Assert(err, IsNil)
2284 err = client.DeleteBucket(bucketNameTest)
2285 c.Assert(err, IsNil)
2287 client.Config.AuthVersion = oldType
2288 client.Config.AdditionalHeaders = oldHeaders
2291 func (s *OssClientSuite) TestProxy(c *C) {
2292 s.ProxyTestFunc(c, AuthV1, []string{})
2293 s.ProxyTestFunc(c, AuthV2, []string{})
2294 s.ProxyTestFunc(c, AuthV2, []string{"host", "range", "user-agent"})
2297 // TestProxy for https endpoint
2298 func (s *OssClientSuite) TestHttpsEndpointProxy(c *C) {
2299 bucketNameTest := bucketNamePrefix + RandLowStr(6)
2300 objectName := objectNamePrefix + RandLowStr(6)
2301 objectValue := RandLowStr(100)
2304 if strings.HasPrefix(endpoint, "http://") {
2305 httpsEndPoint = strings.Replace(endpoint, "http://", "https://", 1)
2306 } else if !strings.HasPrefix(endpoint, "https://") {
2307 httpsEndPoint = "https://" + endpoint
2309 httpsEndPoint = endpoint
2312 client, err := New(httpsEndPoint, accessID, accessKey, AuthProxy(proxyHost, proxyUser, proxyPasswd))
2315 err = client.CreateBucket(bucketNameTest)
2316 c.Assert(err, IsNil)
2318 bucket, err := client.Bucket(bucketNameTest)
2321 err = bucket.PutObject(objectName, strings.NewReader(objectValue))
2322 c.Assert(err, IsNil)
2325 _, err = bucket.GetObject(objectName)
2326 c.Assert(err, IsNil)
2329 _, err = bucket.ListObjects()
2330 c.Assert(err, IsNil)
2333 err = bucket.DeleteObject(objectName)
2334 c.Assert(err, IsNil)
2337 err = client.DeleteBucket(bucketNameTest)
2338 c.Assert(err, IsNil)
2342 func (s *OssClientSuite) checkBucket(buckets []BucketProperties, bucket string) bool {
2343 for _, v := range buckets {
2344 if v.Name == bucket {
2351 func (s *OssClientSuite) getBucket(buckets []BucketProperties, bucket string) (bool, BucketProperties) {
2352 for _, v := range buckets {
2353 if v.Name == bucket {
2357 return false, BucketProperties{}
2360 func (s *OssClientSuite) TestHttpLogNotSignUrl(c *C) {
2361 logName := "." + string(os.PathSeparator) + "test-go-sdk-httpdebug.log" + RandStr(5)
2362 f, err := os.OpenFile(logName, os.O_CREATE|os.O_TRUNC|os.O_RDWR, 0660)
2363 c.Assert(err, IsNil)
2365 client, err := New(endpoint, accessID, accessKey)
2366 client.Config.LogLevel = Debug
2368 client.Config.Logger = log.New(f, "", log.LstdFlags)
2370 var testBucketName = bucketNamePrefix + RandLowStr(6)
2373 err = client.CreateBucket(testBucketName)
2376 // read log file,get http info
2377 contents, err := ioutil.ReadFile(logName)
2378 c.Assert(err, IsNil)
2380 httpContent := string(contents)
2381 //fmt.Println(httpContent)
2383 c.Assert(strings.Contains(httpContent, "signStr"), Equals, true)
2384 c.Assert(strings.Contains(httpContent, "Method:"), Equals, true)
2386 // delete test bucket and log
2388 client.DeleteBucket(testBucketName)
2391 func (s *OssClientSuite) HttpLogSignUrlTestFunc(c *C, authVersion AuthVersionType, extraHeaders []string) {
2392 logName := "." + string(os.PathSeparator) + "test-go-sdk-httpdebug-signurl.log" + RandStr(5)
2393 f, err := os.OpenFile(logName, os.O_CREATE|os.O_TRUNC|os.O_RDWR, 0660)
2394 c.Assert(err, IsNil)
2396 client, err := New(endpoint, accessID, accessKey)
2397 client.Config.LogLevel = Debug
2398 client.Config.Logger = log.New(f, "", log.LstdFlags)
2400 oldType := client.Config.AuthVersion
2401 oldHeaders := client.Config.AdditionalHeaders
2402 client.Config.AuthVersion = authVersion
2403 client.Config.AdditionalHeaders = extraHeaders
2405 var testBucketName = bucketNamePrefix + RandLowStr(6)
2408 err = client.CreateBucket(testBucketName)
2412 f, err = os.OpenFile(logName, os.O_CREATE|os.O_TRUNC|os.O_RDWR, 0660)
2413 client.Config.Logger = log.New(f, "", log.LstdFlags)
2415 bucket, _ := client.Bucket(testBucketName)
2416 objectName := objectNamePrefix + RandStr(8)
2417 objectValue := RandStr(20)
2420 str, err := bucket.SignURL(objectName, HTTPPut, 60)
2421 c.Assert(err, IsNil)
2422 if bucket.Client.Config.AuthVersion == AuthV1 {
2423 c.Assert(strings.Contains(str, HTTPParamExpires+"="), Equals, true)
2424 c.Assert(strings.Contains(str, HTTPParamAccessKeyID+"="), Equals, true)
2425 c.Assert(strings.Contains(str, HTTPParamSignature+"="), Equals, true)
2427 c.Assert(strings.Contains(str, HTTPParamSignatureVersion+"=OSS2"), Equals, true)
2428 c.Assert(strings.Contains(str, HTTPParamExpiresV2+"="), Equals, true)
2429 c.Assert(strings.Contains(str, HTTPParamAccessKeyIDV2+"="), Equals, true)
2430 c.Assert(strings.Contains(str, HTTPParamSignatureV2+"="), Equals, true)
2433 // Error put object with URL
2434 err = bucket.PutObjectWithURL(str, strings.NewReader(objectValue), ContentType("image/tiff"))
2437 // read log file,get http info
2438 contents, err := ioutil.ReadFile(logName)
2439 c.Assert(err, IsNil)
2441 httpContent := string(contents)
2442 //fmt.Println(httpContent)
2444 c.Assert(strings.Contains(httpContent, "signStr"), Equals, true)
2445 c.Assert(strings.Contains(httpContent, "Method:"), Equals, true)
2447 // delete test bucket and log
2449 client.DeleteBucket(testBucketName)
2451 client.Config.AuthVersion = oldType
2452 client.Config.AdditionalHeaders = oldHeaders
2455 func (s *OssClientSuite) TestHttpLogSignUrl(c *C) {
2456 s.HttpLogSignUrlTestFunc(c, AuthV1, []string{})
2457 s.HttpLogSignUrlTestFunc(c, AuthV2, []string{})
2458 s.HttpLogSignUrlTestFunc(c, AuthV2, []string{"host", "range", "user-agent"})
2461 func (s *OssClientSuite) TestSetLimitUploadSpeed(c *C) {
2462 client, err := New(endpoint, accessID, accessKey)
2463 c.Assert(err, IsNil)
2465 err = client.LimitUploadSpeed(100)
2467 goVersion := runtime.Version()
2468 pSlice := strings.Split(strings.ToLower(goVersion), ".")
2470 // compare with go1.7
2471 if len(pSlice) >= 2 {
2472 if pSlice[0] > "go1" {
2473 c.Assert(err, IsNil)
2474 } else if pSlice[0] == "go1" {
2475 subVersion, _ := strconv.Atoi(pSlice[1])
2476 if subVersion >= 7 {
2477 c.Assert(err, IsNil)
2479 c.Assert(err, NotNil)
2482 c.Assert(err, NotNil)
2487 func (s *OssClientSuite) TestBucketEncyptionError(c *C) {
2488 client, err := New(endpoint, accessID, accessKey)
2489 c.Assert(err, IsNil)
2491 bucketName := bucketNamePrefix + RandLowStr(5)
2492 err = client.CreateBucket(bucketName)
2493 c.Assert(err, IsNil)
2495 // SetBucketEncryption:AES256 ,"123"
2496 encryptionRule := ServerEncryptionRule{}
2497 encryptionRule.SSEDefault.SSEAlgorithm = string(AESAlgorithm)
2498 encryptionRule.SSEDefault.KMSMasterKeyID = "123"
2500 var responseHeader http.Header
2501 err = client.SetBucketEncryption(bucketName, encryptionRule, GetResponseHeader(&responseHeader))
2502 c.Assert(err, NotNil)
2503 requestId := GetRequestId(responseHeader)
2504 c.Assert(len(requestId) > 0, Equals, true)
2506 // GetBucketEncryption
2507 _, err = client.GetBucketEncryption(bucketName, GetResponseHeader(&responseHeader))
2508 c.Assert(err, NotNil)
2509 requestId = GetRequestId(responseHeader)
2510 c.Assert(len(requestId) > 0, Equals, true)
2512 // Get default bucket info
2513 bucketResult, err := client.GetBucketInfo(bucketName)
2514 c.Assert(err, IsNil)
2516 c.Assert(bucketResult.BucketInfo.SseRule.SSEAlgorithm, Equals, "")
2517 c.Assert(bucketResult.BucketInfo.SseRule.KMSMasterKeyID, Equals, "")
2518 c.Assert(bucketResult.BucketInfo.Versioning, Equals, "")
2520 err = client.DeleteBucket(bucketName)
2521 c.Assert(err, IsNil)
2524 func (s *OssClientSuite) TestBucketEncryptionPutAndGetAndDelete(c *C) {
2525 client, err := New(endpoint, accessID, accessKey)
2526 c.Assert(err, IsNil)
2528 bucketName := bucketNamePrefix + RandLowStr(5)
2529 err = client.CreateBucket(bucketName)
2530 c.Assert(err, IsNil)
2532 // SetBucketEncryption:KMS ,""
2533 encryptionRule := ServerEncryptionRule{}
2534 encryptionRule.SSEDefault.SSEAlgorithm = string(KMSAlgorithm)
2536 var responseHeader http.Header
2537 err = client.SetBucketEncryption(bucketName, encryptionRule, GetResponseHeader(&responseHeader))
2538 c.Assert(err, IsNil)
2539 requestId := GetRequestId(responseHeader)
2540 c.Assert(len(requestId) > 0, Equals, true)
2542 // GetBucketEncryption
2543 getResult, err := client.GetBucketEncryption(bucketName, GetResponseHeader(&responseHeader))
2544 c.Assert(err, IsNil)
2545 requestId = GetRequestId(responseHeader)
2546 c.Assert(len(requestId) > 0, Equals, true)
2548 // check encryption value
2549 c.Assert(encryptionRule.SSEDefault.SSEAlgorithm, Equals, getResult.SSEDefault.SSEAlgorithm)
2550 c.Assert(encryptionRule.SSEDefault.KMSMasterKeyID, Equals, getResult.SSEDefault.KMSMasterKeyID)
2552 // delete bucket encyption
2553 err = client.DeleteBucketEncryption(bucketName, GetResponseHeader(&responseHeader))
2554 c.Assert(err, IsNil)
2555 requestId = GetRequestId(responseHeader)
2556 c.Assert(len(requestId) > 0, Equals, true)
2558 // GetBucketEncryption failure
2559 _, err = client.GetBucketEncryption(bucketName, GetResponseHeader(&responseHeader))
2560 c.Assert(err, NotNil)
2561 requestId = GetRequestId(responseHeader)
2562 c.Assert(len(requestId) > 0, Equals, true)
2564 // Get default bucket info
2565 bucketResult, err := client.GetBucketInfo(bucketName)
2566 c.Assert(err, IsNil)
2568 c.Assert(bucketResult.BucketInfo.SseRule.SSEAlgorithm, Equals, "")
2569 c.Assert(bucketResult.BucketInfo.SseRule.KMSMasterKeyID, Equals, "")
2570 c.Assert(bucketResult.BucketInfo.Versioning, Equals, "")
2572 err = client.DeleteBucket(bucketName)
2573 c.Assert(err, IsNil)
2576 func (s *OssClientSuite) TestBucketEncryptionWithSm4(c *C) {
2577 client, err := New(endpoint, accessID, accessKey)
2578 c.Assert(err, IsNil)
2580 bucketName := bucketNamePrefix + RandLowStr(5)
2581 err = client.CreateBucket(bucketName)
2582 c.Assert(err, IsNil)
2584 // SetBucketEncryption:SM4 ,""
2585 encryptionRule := ServerEncryptionRule{}
2586 encryptionRule.SSEDefault.SSEAlgorithm = string(SM4Algorithm)
2588 var responseHeader http.Header
2589 err = client.SetBucketEncryption(bucketName, encryptionRule, GetResponseHeader(&responseHeader))
2590 c.Assert(err, IsNil)
2591 requestId := GetRequestId(responseHeader)
2592 c.Assert(len(requestId) > 0, Equals, true)
2594 // GetBucketEncryption
2595 getResult, err := client.GetBucketEncryption(bucketName, GetResponseHeader(&responseHeader))
2596 c.Assert(err, IsNil)
2597 requestId = GetRequestId(responseHeader)
2598 c.Assert(len(requestId) > 0, Equals, true)
2600 // check encryption value
2601 c.Assert(getResult.SSEDefault.SSEAlgorithm, Equals, string(SM4Algorithm))
2602 c.Assert(getResult.SSEDefault.KMSMasterKeyID, Equals, "")
2603 c.Assert(getResult.SSEDefault.KMSDataEncryption, Equals, "")
2605 // Get default bucket info
2606 bucketResult, err := client.GetBucketInfo(bucketName)
2607 c.Assert(err, IsNil)
2609 c.Assert(bucketResult.BucketInfo.SseRule.SSEAlgorithm, Equals, string(SM4Algorithm))
2610 c.Assert(bucketResult.BucketInfo.SseRule.KMSMasterKeyID, Equals, "")
2611 c.Assert(bucketResult.BucketInfo.SseRule.KMSDataEncryption, Equals, "")
2613 err = client.DeleteBucket(bucketName)
2614 c.Assert(err, IsNil)
2617 func (s *OssClientSuite) TestBucketEncryptionWithKmsSm4(c *C) {
2618 client, err := New(endpoint, accessID, accessKey)
2619 c.Assert(err, IsNil)
2621 bucketName := bucketNamePrefix + RandLowStr(5)
2622 err = client.CreateBucket(bucketName)
2623 c.Assert(err, IsNil)
2625 // SetBucketEncryption:SM4 ,""
2626 encryptionRule := ServerEncryptionRule{}
2627 encryptionRule.SSEDefault.SSEAlgorithm = string(KMSAlgorithm)
2628 encryptionRule.SSEDefault.KMSDataEncryption = string(SM4Algorithm)
2630 var responseHeader http.Header
2631 err = client.SetBucketEncryption(bucketName, encryptionRule, GetResponseHeader(&responseHeader))
2632 c.Assert(err, IsNil)
2633 requestId := GetRequestId(responseHeader)
2634 c.Assert(len(requestId) > 0, Equals, true)
2636 // GetBucketEncryption
2637 getResult, err := client.GetBucketEncryption(bucketName, GetResponseHeader(&responseHeader))
2638 c.Assert(err, IsNil)
2639 requestId = GetRequestId(responseHeader)
2640 c.Assert(len(requestId) > 0, Equals, true)
2642 // check encryption value
2643 c.Assert(getResult.SSEDefault.SSEAlgorithm, Equals, string(KMSAlgorithm))
2644 c.Assert(getResult.SSEDefault.KMSMasterKeyID, Equals, "")
2645 c.Assert(getResult.SSEDefault.KMSDataEncryption, Equals, string(SM4Algorithm))
2647 // Get default bucket info
2648 bucketResult, err := client.GetBucketInfo(bucketName)
2649 c.Assert(err, IsNil)
2651 c.Assert(bucketResult.BucketInfo.SseRule.SSEAlgorithm, Equals, string(KMSAlgorithm))
2652 c.Assert(bucketResult.BucketInfo.SseRule.KMSMasterKeyID, Equals, "")
2653 c.Assert(bucketResult.BucketInfo.SseRule.KMSDataEncryption, Equals, string(SM4Algorithm))
2655 err = client.DeleteBucket(bucketName)
2656 c.Assert(err, IsNil)
2659 func (s *OssClientSuite) TestBucketEncyptionPutObjectSuccess(c *C) {
2660 client, err := New(endpoint, accessID, accessKey)
2661 c.Assert(err, IsNil)
2663 bucketName := bucketNamePrefix + RandLowStr(5)
2664 err = client.CreateBucket(bucketName)
2665 c.Assert(err, IsNil)
2667 // SetBucketEncryption:KMS ,""
2668 encryptionRule := ServerEncryptionRule{}
2669 encryptionRule.SSEDefault.SSEAlgorithm = string(KMSAlgorithm)
2671 var responseHeader http.Header
2672 err = client.SetBucketEncryption(bucketName, encryptionRule, GetResponseHeader(&responseHeader))
2673 c.Assert(err, IsNil)
2674 requestId := GetRequestId(responseHeader)
2675 c.Assert(len(requestId) > 0, Equals, true)
2677 // GetBucketEncryption
2678 getResult, err := client.GetBucketEncryption(bucketName, GetResponseHeader(&responseHeader))
2679 c.Assert(err, IsNil)
2680 requestId = GetRequestId(responseHeader)
2681 c.Assert(len(requestId) > 0, Equals, true)
2683 // check encryption value
2684 c.Assert(encryptionRule.SSEDefault.SSEAlgorithm, Equals, getResult.SSEDefault.SSEAlgorithm)
2685 c.Assert(encryptionRule.SSEDefault.KMSMasterKeyID, Equals, getResult.SSEDefault.KMSMasterKeyID)
2687 // Get default bucket info
2688 bucketResult, err := client.GetBucketInfo(bucketName)
2689 c.Assert(err, IsNil)
2691 c.Assert(bucketResult.BucketInfo.SseRule.SSEAlgorithm, Equals, "KMS")
2692 c.Assert(bucketResult.BucketInfo.SseRule.KMSMasterKeyID, Equals, "")
2693 c.Assert(bucketResult.BucketInfo.Versioning, Equals, "")
2695 err = client.DeleteBucket(bucketName)
2696 c.Assert(err, IsNil)
2699 func (s *OssClientSuite) TestBucketEncyptionPutObjectError(c *C) {
2700 client, err := New(endpoint, accessID, accessKey)
2701 c.Assert(err, IsNil)
2703 bucketName := bucketNamePrefix + RandLowStr(5)
2704 err = client.CreateBucket(bucketName)
2705 c.Assert(err, IsNil)
2707 // SetBucketEncryption:KMS ,""
2708 encryptionRule := ServerEncryptionRule{}
2709 encryptionRule.SSEDefault.SSEAlgorithm = string(KMSAlgorithm)
2711 encryptionRule.SSEDefault.KMSMasterKeyID = kmsId
2713 var responseHeader http.Header
2714 err = client.SetBucketEncryption(bucketName, encryptionRule, GetResponseHeader(&responseHeader))
2715 c.Assert(err, IsNil)
2716 requestId := GetRequestId(responseHeader)
2717 c.Assert(len(requestId) > 0, Equals, true)
2719 // GetBucketEncryption
2720 getResult, err := client.GetBucketEncryption(bucketName, GetResponseHeader(&responseHeader))
2721 c.Assert(err, IsNil)
2722 requestId = GetRequestId(responseHeader)
2723 c.Assert(len(requestId) > 0, Equals, true)
2725 // check encryption value
2726 c.Assert(encryptionRule.SSEDefault.SSEAlgorithm, Equals, getResult.SSEDefault.SSEAlgorithm)
2727 c.Assert(encryptionRule.SSEDefault.KMSMasterKeyID, Equals, getResult.SSEDefault.KMSMasterKeyID)
2729 // Get default bucket info
2730 bucketResult, err := client.GetBucketInfo(bucketName)
2731 c.Assert(err, IsNil)
2733 c.Assert(bucketResult.BucketInfo.SseRule.SSEAlgorithm, Equals, "KMS")
2734 c.Assert(bucketResult.BucketInfo.SseRule.KMSMasterKeyID, Equals, kmsId)
2735 c.Assert(bucketResult.BucketInfo.Versioning, Equals, "")
2737 // put and get object failure
2738 bucket, err := client.Bucket(bucketName)
2739 c.Assert(err, IsNil)
2741 // put object failure
2742 objectName := objectNamePrefix + RandStr(8)
2743 context := RandStr(100)
2744 err = bucket.PutObject(objectName, strings.NewReader(context))
2745 c.Assert(err, NotNil)
2747 err = client.DeleteBucket(bucketName)
2748 c.Assert(err, IsNil)
2751 func (s *OssClientSuite) TestBucketTaggingOperation(c *C) {
2752 client, err := New(endpoint, accessID, accessKey)
2753 c.Assert(err, IsNil)
2755 bucketName := bucketNamePrefix + RandLowStr(5)
2756 err = client.CreateBucket(bucketName)
2757 c.Assert(err, IsNil)
2759 var respHeader http.Header
2763 tagging.Tags = []Tag{Tag{Key: "testkey2", Value: "testvalue2"}}
2764 err = client.SetBucketTagging(bucketName, tagging, GetResponseHeader(&respHeader))
2765 c.Assert(err, IsNil)
2766 c.Assert(GetRequestId(respHeader) != "", Equals, true)
2768 getResult, err := client.GetBucketTagging(bucketName)
2769 c.Assert(err, IsNil)
2770 c.Assert(getResult.Tags[0].Key, Equals, tagging.Tags[0].Key)
2771 c.Assert(getResult.Tags[0].Value, Equals, tagging.Tags[0].Value)
2773 // delete BucketTagging
2774 err = client.DeleteBucketTagging(bucketName, GetResponseHeader(&respHeader))
2775 c.Assert(err, IsNil)
2776 c.Assert(GetRequestId(respHeader) != "", Equals, true)
2778 getResult, err = client.GetBucketTagging(bucketName, GetResponseHeader(&respHeader))
2779 c.Assert(err, IsNil)
2780 c.Assert(GetRequestId(respHeader) != "", Equals, true)
2781 c.Assert(len(getResult.Tags), Equals, 0)
2783 err = client.DeleteBucket(bucketName)
2784 c.Assert(err, IsNil)
2787 func (s *OssClientSuite) TestListBucketsTagging(c *C) {
2788 client, err := New(endpoint, accessID, accessKey)
2789 c.Assert(err, IsNil)
2791 bucketName1 := bucketNamePrefix + RandLowStr(5)
2792 err = client.CreateBucket(bucketName1)
2793 c.Assert(err, IsNil)
2795 bucketName2 := bucketNamePrefix + RandLowStr(5)
2796 err = client.CreateBucket(bucketName2)
2797 c.Assert(err, IsNil)
2801 tagging.Tags = []Tag{Tag{Key: "testkey", Value: "testvalue"}}
2802 err = client.SetBucketTagging(bucketName1, tagging)
2803 c.Assert(err, IsNil)
2806 listResult, err := client.ListBuckets(TagKey("testkey"))
2807 c.Assert(err, IsNil)
2808 c.Assert(len(listResult.Buckets), Equals, 1)
2809 c.Assert(listResult.Buckets[0].Name, Equals, bucketName1)
2811 client.DeleteBucket(bucketName1)
2812 client.DeleteBucket(bucketName2)
2815 func (s *OssClientSuite) TestGetBucketStat(c *C) {
2816 client, err := New(endpoint, accessID, accessKey)
2817 c.Assert(err, IsNil)
2819 bucketName := bucketNamePrefix + RandLowStr(5)
2820 err = client.CreateBucket(bucketName)
2821 c.Assert(err, IsNil)
2823 bucket, err := client.Bucket(bucketName)
2824 c.Assert(err, IsNil)
2827 objectName := objectNamePrefix + RandLowStr(5)
2828 err = bucket.PutObject(objectName, strings.NewReader(RandStr(10)))
2829 c.Assert(err, IsNil)
2831 bucket.DeleteObject(objectName)
2832 err = bucket.PutObject(objectName, strings.NewReader(RandStr(10)))
2833 c.Assert(err, IsNil)
2834 bucket.DeleteObject(objectName)
2836 _, err = client.GetBucketStat(bucketName)
2837 c.Assert(err, IsNil)
2839 client.DeleteBucket(bucketName)
2842 func (s *OssBucketSuite) TestGetBucketVersioning(c *C) {
2843 // create a bucket with default proprety
2844 client, err := New(endpoint, accessID, accessKey)
2845 c.Assert(err, IsNil)
2847 bucketName := bucketNamePrefix + RandLowStr(6)
2849 var respHeader http.Header
2850 err = client.CreateBucket(bucketName, GetResponseHeader(&respHeader))
2851 c.Assert(err, IsNil)
2852 c.Assert(GetRequestId(respHeader) != "", Equals, true)
2854 // put bucket version:enabled
2855 var versioningConfig VersioningConfig
2856 versioningConfig.Status = string(VersionEnabled)
2857 err = client.SetBucketVersioning(bucketName, versioningConfig)
2858 c.Assert(err, IsNil)
2860 // get bucket version success
2861 versioningResult, err := client.GetBucketVersioning(bucketName, GetResponseHeader(&respHeader))
2862 c.Assert(versioningResult.Status, Equals, "Enabled")
2863 c.Assert(GetRequestId(respHeader) != "", Equals, true)
2865 ForceDeleteBucket(client, bucketName, c)
2868 func (s *OssClientSuite) TestBucketPolicy(c *C) {
2869 client, err := New(endpoint, accessID, accessKey)
2870 c.Assert(err, IsNil)
2872 bucketName := bucketNamePrefix + RandLowStr(5)
2873 err = client.CreateBucket(bucketName)
2874 c.Assert(err, IsNil)
2876 var responseHeader http.Header
2877 ret, err := client.GetBucketPolicy(bucketName, GetResponseHeader(&responseHeader))
2878 c.Assert(err, NotNil)
2879 requestId := GetRequestId(responseHeader)
2880 c.Assert(len(requestId) > 0, Equals, true)
2892 "Principal":"[123456790]",
2893 "Resource":["acs:oss:*:1234567890:*/*"]
2898 err = client.SetBucketPolicy(bucketName, policyInfo, GetResponseHeader(&responseHeader))
2899 c.Assert(err, IsNil)
2900 requestId = GetRequestId(responseHeader)
2901 c.Assert(len(requestId) > 0, Equals, true)
2903 ret, err = client.GetBucketPolicy(bucketName, GetResponseHeader(&responseHeader))
2904 c.Assert(err, IsNil)
2905 testLogger.Println("policy:", ret)
2906 c.Assert(ret, Equals, policyInfo)
2907 requestId = GetRequestId(responseHeader)
2908 c.Assert(len(requestId) > 0, Equals, true)
2910 err = client.DeleteBucketPolicy(bucketName, GetResponseHeader(&responseHeader))
2911 c.Assert(err, IsNil)
2912 requestId = GetRequestId(responseHeader)
2913 c.Assert(len(requestId) > 0, Equals, true)
2914 client.DeleteBucket(bucketName)
2917 func (s *OssClientSuite) TestBucketPolicyNegative(c *C) {
2918 client, err := New(endpoint, accessID, accessKey)
2919 c.Assert(err, IsNil)
2921 bucketName := bucketNamePrefix + RandLowStr(5)
2922 err = client.CreateBucket(bucketName)
2923 c.Assert(err, IsNil)
2925 var responseHeader http.Header
2926 _, err = client.GetBucketPolicy(bucketName, GetResponseHeader(&responseHeader))
2927 c.Assert(err, NotNil)
2928 requestId := GetRequestId(responseHeader)
2929 c.Assert(len(requestId) > 0, Equals, true)
2931 // Setting the Version is 2, this is error policy
2942 "Principal":"[123456790]",
2943 "Resource":["acs:oss:*:1234567890:*/*"]
2947 err = client.SetBucketPolicy(bucketName, errPolicy, GetResponseHeader(&responseHeader))
2948 c.Assert(err, NotNil)
2949 testLogger.Println("err:", err)
2950 requestId = GetRequestId(responseHeader)
2951 c.Assert(len(requestId) > 0, Equals, true)
2953 err = client.DeleteBucketPolicy(bucketName, GetResponseHeader(&responseHeader))
2954 c.Assert(err, IsNil)
2956 bucketNameEmpty := bucketNamePrefix + RandLowStr(5)
2957 client.DeleteBucket(bucketNameEmpty)
2959 err = client.DeleteBucketPolicy(bucketNameEmpty, GetResponseHeader(&responseHeader))
2960 c.Assert(err, NotNil)
2961 requestId = GetRequestId(responseHeader)
2962 c.Assert(len(requestId) > 0, Equals, true)
2964 client.DeleteBucket(bucketName)
2967 func (s *OssClientSuite) TestSetBucketRequestPayment(c *C) {
2968 client, err := New(endpoint, accessID, accessKey)
2969 c.Assert(err, IsNil)
2971 bucketName := bucketNamePrefix + RandLowStr(5)
2972 err = client.CreateBucket(bucketName)
2973 c.Assert(err, IsNil)
2975 reqPayConf := RequestPaymentConfiguration{
2978 err = client.SetBucketRequestPayment(bucketName, reqPayConf)
2979 c.Assert(err, IsNil)
2981 ret, err := client.GetBucketRequestPayment(bucketName)
2982 c.Assert(err, IsNil)
2983 c.Assert(ret.Payer, Equals, "Requester")
2985 client.DeleteBucket(bucketName)
2986 c.Assert(err, IsNil)
2989 func (s *OssClientSuite) TestSetBucketRequestPaymentNegative(c *C) {
2990 client, err := New(endpoint, accessID, accessKey)
2991 c.Assert(err, IsNil)
2993 bucketName := bucketNamePrefix + RandLowStr(5)
2994 err = client.CreateBucket(bucketName)
2995 c.Assert(err, IsNil)
2997 reqPayConf := RequestPaymentConfiguration{
2998 Payer: "Requesterttttt", // this is a error configuration
3000 err = client.SetBucketRequestPayment(bucketName, reqPayConf)
3001 c.Assert(err, NotNil)
3003 ret, err := client.GetBucketRequestPayment(bucketName)
3004 c.Assert(err, IsNil)
3005 c.Assert(ret.Payer, Equals, "BucketOwner")
3007 client.DeleteBucket(bucketName)
3008 c.Assert(err, IsNil)
3011 func (s *OssClientSuite) TestBucketQos(c *C) {
3012 client, err := New(endpoint, accessID, accessKey)
3013 c.Assert(err, IsNil)
3015 ret, err := client.GetUserQoSInfo()
3016 c.Assert(err, IsNil)
3017 testLogger.Println("QosInfo:", ret)
3019 bucketName := bucketNamePrefix + RandLowStr(5)
3020 _ = client.DeleteBucket(bucketName)
3022 err = client.CreateBucket(bucketName)
3023 c.Assert(err, IsNil)
3025 _, err = client.GetBucketQosInfo(bucketName)
3026 c.Assert(err, NotNil)
3028 // case 1 set BucketQoSConfiguration every member
3032 qosConf := BucketQoSConfiguration{
3033 TotalUploadBandwidth: &five,
3034 IntranetUploadBandwidth: &four,
3035 ExtranetUploadBandwidth: &four,
3036 TotalDownloadBandwidth: &four,
3037 IntranetDownloadBandwidth: &four,
3038 ExtranetDownloadBandwidth: &four,
3039 TotalQPS: &totalQps,
3040 IntranetQPS: &totalQps,
3041 ExtranetQPS: &totalQps,
3043 var responseHeader http.Header
3044 err = client.SetBucketQoSInfo(bucketName, qosConf, GetResponseHeader(&responseHeader))
3045 c.Assert(err, IsNil)
3046 requestId := GetRequestId(responseHeader)
3047 c.Assert(len(requestId) > 0, Equals, true)
3049 // wait a moment for configuration effect
3050 time.Sleep(time.Second)
3052 retQos, err := client.GetBucketQosInfo(bucketName)
3053 c.Assert(err, IsNil)
3055 // set qosConf default value
3056 qosConf.XMLName.Local = "QoSConfiguration"
3057 c.Assert(struct2string(retQos, c), Equals, struct2string(qosConf, c))
3059 // case 2 set BucketQoSConfiguration not every member
3060 qosConfNo := BucketQoSConfiguration{
3061 TotalUploadBandwidth: &five,
3062 IntranetUploadBandwidth: &four,
3063 ExtranetUploadBandwidth: &four,
3064 TotalDownloadBandwidth: &four,
3065 IntranetDownloadBandwidth: &four,
3066 ExtranetDownloadBandwidth: &four,
3067 TotalQPS: &totalQps,
3069 err = client.SetBucketQoSInfo(bucketName, qosConfNo)
3070 c.Assert(err, IsNil)
3072 // wait a moment for configuration effect
3073 time.Sleep(time.Second)
3075 retQos, err = client.GetBucketQosInfo(bucketName)
3076 c.Assert(err, IsNil)
3078 // set qosConfNo default value
3079 qosConfNo.XMLName.Local = "QoSConfiguration"
3081 qosConfNo.IntranetQPS = &defNum
3082 qosConfNo.ExtranetQPS = &defNum
3083 c.Assert(struct2string(retQos, c), Equals, struct2string(qosConfNo, c))
3085 err = client.DeleteBucketQosInfo(bucketName)
3086 c.Assert(err, IsNil)
3088 // wait a moment for configuration effect
3089 time.Sleep(time.Second)
3091 _, err = client.GetBucketQosInfo(bucketName)
3092 c.Assert(err, NotNil)
3094 // this is a error qos configuration
3095 to := *ret.TotalUploadBandwidth + 2
3096 qosErrConf := BucketQoSConfiguration{
3097 TotalUploadBandwidth: &to, // this exceed user TotalUploadBandwidth
3098 IntranetUploadBandwidth: &four,
3099 ExtranetUploadBandwidth: &four,
3100 TotalDownloadBandwidth: &four,
3101 IntranetDownloadBandwidth: &four,
3102 ExtranetDownloadBandwidth: &four,
3103 TotalQPS: &totalQps,
3104 IntranetQPS: &totalQps,
3105 ExtranetQPS: &totalQps,
3107 err = client.SetBucketQoSInfo(bucketName, qosErrConf)
3108 c.Assert(err, NotNil)
3110 err = client.DeleteBucketQosInfo(bucketName)
3111 c.Assert(err, IsNil)
3113 err = client.DeleteBucket(bucketName)
3114 c.Assert(err, IsNil)
3118 func struct2string(obj interface{}, c *C) string {
3119 t := reflect.TypeOf(obj)
3120 v := reflect.ValueOf(obj)
3122 var data = make(map[string]interface{})
3123 for i := 0; i < t.NumField(); i++ {
3124 data[t.Field(i).Name] = v.Field(i).Interface()
3126 str, err := json.Marshal(data)
3127 c.Assert(err, IsNil)
3131 type TestCredentials struct {
3134 func (testCreInf *TestCredentials) GetAccessKeyID() string {
3135 return os.Getenv("OSS_TEST_ACCESS_KEY_ID")
3138 func (testCreInf *TestCredentials) GetAccessKeySecret() string {
3139 return os.Getenv("OSS_TEST_ACCESS_KEY_SECRET")
3142 func (testCreInf *TestCredentials) GetSecurityToken() string {
3146 type TestCredentialsProvider struct {
3149 func (testInfBuild *TestCredentialsProvider) GetCredentials() Credentials {
3150 return &TestCredentials{}
3153 func (s *OssClientSuite) TestClientCredentialInfBuild(c *C) {
3154 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
3155 var defaultBuild TestCredentialsProvider
3156 client, err := New(endpoint, "", "", SetCredentialsProvider(&defaultBuild))
3157 c.Assert(err, IsNil)
3158 err = client.CreateBucket(bucketNameTest)
3159 c.Assert(err, IsNil)
3160 err = client.DeleteBucket(bucketNameTest)
3161 c.Assert(err, IsNil)
3164 func (s *OssClientSuite) TestClientSetLocalIpError(c *C) {
3165 // create client and bucket
3166 ipAddr, err := net.ResolveIPAddr("ip", "127.0.0.1")
3167 c.Assert(err, IsNil)
3168 localTCPAddr := &(net.TCPAddr{IP: ipAddr.IP})
3169 client, err := New(endpoint, accessID, accessKey, SetLocalAddr(localTCPAddr))
3170 c.Assert(err, IsNil)
3172 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
3173 err = client.CreateBucket(bucketNameTest)
3174 c.Assert(err, NotNil)
3177 func (s *OssClientSuite) TestClientSetLocalIpSuccess(c *C) {
3179 conn, err := net.Dial("udp", "8.8.8.8:80")
3180 c.Assert(err, IsNil)
3181 localAddr := conn.LocalAddr().(*net.UDPAddr)
3182 localIp := localAddr.IP.String()
3185 ipAddr, err := net.ResolveIPAddr("ip", localIp)
3186 c.Assert(err, IsNil)
3187 localTCPAddr := &(net.TCPAddr{IP: ipAddr.IP})
3188 client, err := New(endpoint, accessID, accessKey, SetLocalAddr(localTCPAddr))
3189 c.Assert(err, IsNil)
3191 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
3192 err = client.CreateBucket(bucketNameTest)
3193 c.Assert(err, IsNil)
3194 err = client.DeleteBucket(bucketNameTest)
3195 c.Assert(err, IsNil)
3198 // TestCreateBucketInvalidName
3199 func (s *OssClientSuite) TestCreateBucketInvalidName(c *C) {
3200 var bucketNameTest = "-" + bucketNamePrefix + RandLowStr(6)
3201 client, err := New(endpoint, accessID, accessKey)
3202 c.Assert(err, IsNil)
3204 err = client.CreateBucket(bucketNameTest)
3205 c.Assert(err, NotNil)
3208 // TestClientProcessEndpointSuccess
3209 func (s *OssClientSuite) TestClientProcessEndpointSuccess(c *C) {
3210 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
3212 testEndpoint := endpoint + "/" + "sina.com" + "?" + "para=abc"
3214 client, err := New(testEndpoint, accessID, accessKey)
3215 c.Assert(err, IsNil)
3218 err = client.CreateBucket(bucketNameTest)
3219 c.Assert(err, IsNil)
3222 err = client.DeleteBucket(bucketNameTest)
3223 c.Assert(err, IsNil)
3226 // TestClientProcessEndpointSuccess
3227 func (s *OssClientSuite) TestClientProcessEndpointError(c *C) {
3228 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
3230 testEndpoint := "https://127.0.0.1/" + endpoint
3232 client, err := New(testEndpoint, accessID, accessKey)
3233 c.Assert(err, IsNil)
3236 err = client.CreateBucket(bucketNameTest)
3237 c.Assert(err, NotNil)
3240 // TestClientBucketError
3241 func (s *OssClientSuite) TestClientBucketError(c *C) {
3242 client, err := New(endpoint, accessID, accessKey)
3243 c.Assert(err, IsNil)
3245 bucketName := "-" + RandLowStr(5)
3246 _, err = client.Bucket(bucketName)
3247 c.Assert(err, NotNil)
3250 func (s *OssClientSuite) TestSetBucketInventory(c *C) {
3251 client, err := New(endpoint, accessID, accessKey)
3252 c.Assert(err, IsNil)
3254 bucketName := bucketNamePrefix + RandLowStr(5)
3255 err = client.CreateBucket(bucketName)
3256 c.Assert(err, IsNil)
3258 // encryption config
3259 var invSseOss InvSseOss
3260 invSseKms := InvSseKms{
3263 var invEncryption InvEncryption
3266 // not any encryption
3267 invConfig := InventoryConfiguration{
3270 Prefix: "filterPrefix/",
3271 OSSBucketDestination: OSSBucketDestination{
3273 AccountId: accountID,
3275 Bucket: "acs:oss:::" + bucketName,
3279 IncludedObjectVersions: "All",
3280 OptionalFields: OptionalFields{
3282 "Size", "LastModifiedDate", "ETag", "StorageClass", "IsMultipartUploaded", "EncryptionStatus",
3287 // case 1: not any encryption
3288 err = client.SetBucketInventory(bucketName, invConfig)
3289 c.Assert(err, IsNil)
3291 // case 2: use kms encryption
3292 invConfig.Id = "report2"
3293 invEncryption.SseKms = &invSseKms
3294 invEncryption.SseOss = nil
3295 invConfig.OSSBucketDestination.Encryption = &invEncryption
3296 err = client.SetBucketInventory(bucketName, invConfig)
3297 c.Assert(err, IsNil)
3299 // case 3: use SseOss encryption
3300 invConfig.Id = "report3"
3301 invEncryption.SseKms = nil
3302 invEncryption.SseOss = &invSseOss
3303 invConfig.OSSBucketDestination.Encryption = &invEncryption
3304 err = client.SetBucketInventory(bucketName, invConfig)
3305 c.Assert(err, IsNil)
3307 //case 4: use two type encryption
3308 invConfig.Id = "report4"
3309 invEncryption.SseKms = &invSseKms
3310 invEncryption.SseOss = &invSseOss
3311 invConfig.OSSBucketDestination.Encryption = &invEncryption
3312 err = client.SetBucketInventory(bucketName, invConfig)
3313 c.Assert(err, NotNil)
3315 err = client.DeleteBucket(bucketName)
3316 c.Assert(err, IsNil)
3319 func (s *OssClientSuite) TestBucketInventory(c *C) {
3320 client, err := New(endpoint, accessID, accessKey)
3321 c.Assert(err, IsNil)
3323 bucketName := bucketNamePrefix + RandLowStr(5)
3324 err = client.CreateBucket(bucketName)
3325 c.Assert(err, IsNil)
3328 invConfig := InventoryConfiguration{
3331 Prefix: "filterPrefix/",
3332 OSSBucketDestination: OSSBucketDestination{
3334 AccountId: accountID,
3336 Bucket: "acs:oss:::" + bucketName,
3340 IncludedObjectVersions: "All",
3341 OptionalFields: OptionalFields{
3343 "Size", "LastModifiedDate", "ETag", "StorageClass", "IsMultipartUploaded", "EncryptionStatus",
3348 // case 1: test SetBucketInventory
3349 err = client.SetBucketInventory(bucketName, invConfig)
3350 c.Assert(err, IsNil)
3352 // case 2: test GetBucketInventory
3353 out, err := client.GetBucketInventory(bucketName, "report1")
3354 c.Assert(err, IsNil)
3355 invConfig.XMLName.Local = "InventoryConfiguration"
3356 invConfig.OSSBucketDestination.XMLName.Local = "OSSBucketDestination"
3357 invConfig.OptionalFields.XMLName.Local = "OptionalFields"
3358 c.Assert(struct2string(invConfig, c), Equals, struct2string(out, c))
3360 // case 3: test ListBucketInventory
3361 invConfig2 := InventoryConfiguration{
3364 Prefix: "filterPrefix/",
3365 OSSBucketDestination: OSSBucketDestination{
3367 AccountId: accountID,
3369 Bucket: "acs:oss:::" + bucketName,
3373 IncludedObjectVersions: "All",
3374 OptionalFields: OptionalFields{
3376 "Size", "LastModifiedDate", "ETag", "StorageClass", "IsMultipartUploaded", "EncryptionStatus",
3380 invConfig2.XMLName.Local = "InventoryConfiguration"
3381 invConfig2.OSSBucketDestination.XMLName.Local = "OSSBucketDestination"
3382 invConfig2.OptionalFields.XMLName.Local = "OptionalFields"
3384 err = client.SetBucketInventory(bucketName, invConfig2)
3385 c.Assert(err, IsNil)
3387 listInvConf, err := client.ListBucketInventory(bucketName, "", Marker("report1"), MaxKeys(2))
3388 c.Assert(err, IsNil)
3389 var listInvLocal ListInventoryConfigurationsResult
3390 listInvLocal.InventoryConfiguration = []InventoryConfiguration{
3395 listInvLocal.IsTruncated = &bo
3396 listInvLocal.XMLName.Local = "ListInventoryConfigurationsResult"
3397 c.Assert(struct2string(listInvLocal, c), Equals, struct2string(listInvConf, c))
3399 for i := 3; i < 109; i++ {
3400 invConfig2 := InventoryConfiguration{
3401 Id: "report" + strconv.Itoa(i),
3403 Prefix: "filterPrefix/",
3404 OSSBucketDestination: OSSBucketDestination{
3406 AccountId: accountID,
3408 Bucket: "acs:oss:::" + bucketName,
3412 IncludedObjectVersions: "All",
3413 OptionalFields: OptionalFields{
3415 "Size", "LastModifiedDate", "ETag", "StorageClass", "IsMultipartUploaded", "EncryptionStatus",
3419 err = client.SetBucketInventory(bucketName, invConfig2)
3420 c.Assert(err, IsNil)
3424 listInvConf1, err := client.ListBucketInventory(bucketName, token)
3425 c.Assert(err, IsNil)
3426 token = listInvConf1.NextContinuationToken
3427 testLogger.Println(listInvConf1.NextContinuationToken, *listInvConf1.IsTruncated, token)
3428 if *listInvConf1.IsTruncated == false {
3431 c.Assert(listInvConf1.NextContinuationToken, Equals, "report91")
3435 // case 4: test DeleteBucketInventory
3436 for i := 1; i < 109; i++ {
3437 err = client.DeleteBucketInventory(bucketName, "report"+strconv.Itoa(i))
3438 c.Assert(err, IsNil)
3441 err = client.DeleteBucket(bucketName)
3442 c.Assert(err, IsNil)
3445 func (s *OssClientSuite) TestBucketInventoryNegative(c *C) {
3446 client, err := New(endpoint, accessID, accessKey)
3447 c.Assert(err, IsNil)
3449 bucketName := bucketNamePrefix + RandLowStr(5)
3450 err = client.CreateBucket(bucketName)
3451 c.Assert(err, IsNil)
3454 invConfigErr := InventoryConfiguration{
3457 Prefix: "filterPrefix/",
3458 OSSBucketDestination: OSSBucketDestination{
3460 AccountId: accountID,
3466 IncludedObjectVersions: "All",
3467 OptionalFields: OptionalFields{
3469 "Size", "LastModifiedDate", "ETag", "StorageClass", "IsMultipartUploaded", "EncryptionStatus",
3473 // case 1: test SetBucketInventory
3474 err = client.SetBucketInventory(bucketName, invConfigErr)
3475 c.Assert(err, NotNil)
3477 // case 2: test GetBucketInventory
3478 _, err = client.GetBucketInventory(bucketName, "report1")
3479 c.Assert(err, NotNil)
3481 // case 3: test ListBucketInventory
3482 _, err = client.ListBucketInventory(bucketName, "", Marker("report1"), MaxKeys(2))
3483 c.Assert(err, NotNil)
3485 // case 4: test DeleteBucketInventory
3486 err = client.DeleteBucketInventory(bucketName, "report1")
3487 c.Assert(err, IsNil)
3489 err = client.DeleteBucket(bucketName)
3490 c.Assert(err, IsNil)
3493 func (s *OssClientSuite) TestBucketAsyncTask(c *C) {
3494 client, err := New(endpoint, accessID, accessKey)
3495 c.Assert(err, IsNil)
3497 bucketName := bucketNamePrefix + RandLowStr(5)
3498 err = client.CreateBucket(bucketName)
3499 c.Assert(err, IsNil)
3501 objectName := objectNamePrefix + RandLowStr(6)
3503 // set asyn task,IgnoreSameKey is false
3504 asynConf := AsyncFetchTaskConfiguration{
3505 Url: "http://www.baidu.com",
3511 IgnoreSameKey: false,
3514 asynResult, err := client.SetBucketAsyncTask(bucketName, asynConf)
3515 c.Assert(err, IsNil)
3516 c.Assert(len(asynResult.TaskId) > 0, Equals, true)
3519 asynTask, err := client.GetBucketAsyncTask(bucketName, asynResult.TaskId)
3520 c.Assert(err, IsNil)
3521 c.Assert(asynResult.TaskId, Equals, asynTask.TaskId)
3522 c.Assert(len(asynTask.State) > 0, Equals, true)
3523 c.Assert(asynConf.Url, Equals, asynTask.TaskInfo.Url)
3524 c.Assert(asynConf.Object, Equals, asynTask.TaskInfo.Object)
3525 c.Assert(asynConf.Callback, Equals, asynTask.TaskInfo.Callback)
3526 c.Assert(asynConf.IgnoreSameKey, Equals, asynTask.TaskInfo.IgnoreSameKey)
3528 // test again,IgnoreSameKey is true
3529 asynConf.IgnoreSameKey = true
3530 asynResult, err = client.SetBucketAsyncTask(bucketName, asynConf)
3531 c.Assert(err, IsNil)
3532 c.Assert(len(asynResult.TaskId) > 0, Equals, true)
3534 asynTask, err = client.GetBucketAsyncTask(bucketName, asynResult.TaskId)
3535 c.Assert(asynConf.IgnoreSameKey, Equals, asynTask.TaskInfo.IgnoreSameKey)
3537 err = client.DeleteBucket(bucketName)
3538 c.Assert(err, IsNil)
3541 func (s *OssClientSuite) TestClientOptionHeader(c *C) {
3542 // create a bucket with default proprety
3543 client, err := New(endpoint, accessID, accessKey)
3544 c.Assert(err, IsNil)
3546 bucketName := bucketNamePrefix + RandLowStr(6)
3548 var respHeader http.Header
3549 err = client.CreateBucket(bucketName, GetResponseHeader(&respHeader))
3550 c.Assert(err, IsNil)
3551 c.Assert(GetRequestId(respHeader) != "", Equals, true)
3553 // put bucket version:enabled
3554 var versioningConfig VersioningConfig
3555 versioningConfig.Status = string(VersionEnabled)
3556 err = client.SetBucketVersioning(bucketName, versioningConfig)
3557 c.Assert(err, IsNil)
3559 // get bucket version success,use payer
3560 options := []Option{RequestPayer(BucketOwner), GetResponseHeader(&respHeader)}
3561 versioningResult, err := client.GetBucketVersioning(bucketName, options...)
3562 c.Assert(versioningResult.Status, Equals, "Enabled")
3563 c.Assert(GetRequestId(respHeader) != "", Equals, true)
3565 //list buckets,use payer
3566 _, err = client.ListBuckets(options...)
3567 c.Assert(err, IsNil)
3569 ForceDeleteBucket(client, bucketName, c)
3572 // compare with go1.7
3573 func compareVersion(goVersion string) bool {
3574 nowVersion := runtime.Version()
3575 nowVersion = strings.Replace(nowVersion, "go", "", -1)
3576 pSlice1 := strings.Split(goVersion, ".")
3577 pSlice2 := strings.Split(nowVersion, ".")
3578 for k, v := range pSlice2 {
3579 n2, _ := strconv.Atoi(string(v))
3580 n1, _ := strconv.Atoi(string(pSlice1[k]))
3591 func homeHandler(w http.ResponseWriter, r *http.Request) {
3592 http.Redirect(w, r, "/redirectTo", http.StatusFound)
3594 func targetHandler(w http.ResponseWriter, r *http.Request) {
3595 fmt.Fprintf(w, "You have been redirected here!")
3598 func (s *OssClientSuite) TestClientRedirect(c *C) {
3599 // must go1.7.0 onward
3600 if !compareVersion("1.7.0") {
3605 rand.Seed(time.Now().Unix())
3606 port := 10000 + rand.Intn(10000)
3608 // start http server
3609 httpAddr := fmt.Sprintf("127.0.0.1:%d", port)
3610 mux := http.NewServeMux()
3611 mux.HandleFunc("/redirectTo", targetHandler)
3612 mux.HandleFunc("/", homeHandler)
3613 svr := &http.Server{
3615 ReadTimeout: 10 * time.Second,
3616 WriteTimeout: 10 * time.Second,
3617 MaxHeaderBytes: 1 << 20,
3622 svr.ListenAndServe()
3625 url := "http://" + httpAddr
3627 // create client 1,redirect disable
3628 client1, err := New(endpoint, accessID, accessKey, RedirectEnabled(false))
3629 resp, err := client1.Conn.client.Get(url)
3630 c.Assert(err, IsNil)
3631 c.Assert(resp.StatusCode, Equals, http.StatusFound)
3634 // create client2, redirect enabled
3635 client2, err := New(endpoint, accessID, accessKey, RedirectEnabled(true))
3636 resp, err = client2.Conn.client.Get(url)
3637 c.Assert(err, IsNil)
3638 c.Assert(resp.StatusCode, Equals, 200)
3639 data, err := ioutil.ReadAll(resp.Body)
3640 c.Assert(string(data), Equals, "You have been redirected here!")
3644 // TestInitiateBucketWormSuccess
3645 func (s *OssClientSuite) TestInitiateBucketWormSuccess(c *C) {
3646 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
3647 client, err := New(endpoint, accessID, accessKey)
3648 c.Assert(err, IsNil)
3650 err = client.CreateBucket(bucketNameTest)
3651 c.Assert(err, IsNil)
3653 // InitiateBucketWorm
3654 wormId, err := client.InitiateBucketWorm(bucketNameTest, 10)
3655 c.Assert(err, IsNil)
3656 c.Assert(len(wormId) > 0, Equals, true)
3659 wormConfig, err := client.GetBucketWorm(bucketNameTest)
3660 c.Assert(err, IsNil)
3661 c.Assert(wormConfig.WormId, Equals, wormId)
3662 c.Assert(wormConfig.State, Equals, "InProgress")
3663 c.Assert(wormConfig.RetentionPeriodInDays, Equals, 10)
3665 err = client.DeleteBucket(bucketNameTest)
3666 c.Assert(err, IsNil)
3669 // TestInitiateBucketWormFailure
3670 func (s *OssClientSuite) TestInitiateBucketWormFailure(c *C) {
3671 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
3672 client, err := New(endpoint, accessID, accessKey)
3673 c.Assert(err, IsNil)
3676 wormId, err := client.InitiateBucketWorm(bucketNameTest, 10)
3677 c.Assert(err, NotNil)
3678 c.Assert(len(wormId), Equals, 0)
3681 // TestAbortBucketWorm
3682 func (s *OssClientSuite) TestAbortBucketWorm(c *C) {
3683 var bucketNameTest = bucketNamePrefix + RandLowStr(6)
3684 client, err := New(endpoint, accessID, accessKey)
3685 c.Assert(err, IsNil)
3687 err = client.CreateBucket(bucketNameTest)
3688 c.Assert(err, IsNil)
3690 // InitiateBucketWorm
3691 wormId, err := client.InitiateBucketWorm(bucketNameTest, 10)
3692 c.Assert(err, IsNil)
3693 c.Assert(len(wormId) > 0, Equals, true)
3695 // GetBucketWorm success
3696 wormConfig, err := client.GetBucketWorm(bucketNameTest)
3697 c.Assert(err, IsNil)
3698 c.Assert(wormConfig.WormId, Equals, wormId)
3699 c.Assert(wormConfig.State, Equals, "InProgress")
3700 c.Assert(wormConfig.RetentionPeriodInDays, Equals, 10)
3703 err = client.AbortBucketWorm(bucketNameTest)
3704 c.Assert(err, IsNil)
3706 // GetBucketWorm failure
3707 _, err = client.GetBucketWorm(bucketNameTest)
3708 c.Assert(err, NotNil)
3710 err = client.DeleteBucket(bucketNameTest)
3711 c.Assert(err, IsNil)
3714 // TestCompleteBucketWorm
3715 func (s *OssClientSuite) TestCompleteBucketWorm(c *C) {
3716 var bucketNameTest = bucketNamePrefix + "-worm-" + RandLowStr(6)
3717 client, err := New(endpoint, accessID, accessKey)
3718 c.Assert(err, IsNil)
3720 err = client.CreateBucket(bucketNameTest)
3721 c.Assert(err, IsNil)
3723 // InitiateBucketWorm
3724 wormId, err := client.InitiateBucketWorm(bucketNameTest, 1)
3725 c.Assert(err, IsNil)
3726 c.Assert(len(wormId) > 0, Equals, true)
3729 wormConfig, err := client.GetBucketWorm(bucketNameTest)
3730 c.Assert(err, IsNil)
3731 c.Assert(wormConfig.WormId, Equals, wormId)
3732 c.Assert(wormConfig.State, Equals, "InProgress")
3733 c.Assert(wormConfig.RetentionPeriodInDays, Equals, 1)
3735 // CompleteBucketWorm
3736 err = client.CompleteBucketWorm(bucketNameTest, wormId)
3737 c.Assert(err, IsNil)
3739 // GetBucketWorm again
3740 wormConfig, err = client.GetBucketWorm(bucketNameTest)
3741 c.Assert(err, IsNil)
3742 c.Assert(wormConfig.WormId, Equals, wormId)
3743 c.Assert(wormConfig.State, Equals, "Locked")
3744 c.Assert(wormConfig.RetentionPeriodInDays, Equals, 1)
3746 err = client.DeleteBucket(bucketNameTest)
3747 c.Assert(err, IsNil)
3750 // TestExtendBucketWorm
3751 func (s *OssClientSuite) TestExtendBucketWorm(c *C) {
3752 var bucketNameTest = bucketNamePrefix + "-worm-" + RandLowStr(6)
3753 client, err := New(endpoint, accessID, accessKey)
3754 c.Assert(err, IsNil)
3756 err = client.CreateBucket(bucketNameTest)
3757 c.Assert(err, IsNil)
3759 // InitiateBucketWorm
3760 wormId, err := client.InitiateBucketWorm(bucketNameTest, 1)
3761 c.Assert(err, IsNil)
3762 c.Assert(len(wormId) > 0, Equals, true)
3764 // CompleteBucketWorm
3765 err = client.CompleteBucketWorm(bucketNameTest, wormId)
3766 c.Assert(err, IsNil)
3769 wormConfig, err := client.GetBucketWorm(bucketNameTest)
3770 c.Assert(err, IsNil)
3771 c.Assert(wormConfig.WormId, Equals, wormId)
3772 c.Assert(wormConfig.State, Equals, "Locked")
3773 c.Assert(wormConfig.RetentionPeriodInDays, Equals, 1)
3775 // CompleteBucketWorm
3776 err = client.ExtendBucketWorm(bucketNameTest, 2, wormId)
3777 c.Assert(err, IsNil)
3779 // GetBucketWorm again
3780 wormConfig, err = client.GetBucketWorm(bucketNameTest)
3781 c.Assert(err, IsNil)
3782 c.Assert(wormConfig.WormId, Equals, wormId)
3783 c.Assert(wormConfig.State, Equals, "Locked")
3784 c.Assert(wormConfig.RetentionPeriodInDays, Equals, 2)
3786 err = client.DeleteBucket(bucketNameTest)
3787 c.Assert(err, IsNil)