15 type OssCredentialBucketSuite struct {
22 var _ = Suite(&OssCredentialBucketSuite{})
24 func (cs *OssCredentialBucketSuite) credentialSubUser(c *C) {
25 client, err := New(endpoint, accessID, accessKey)
27 err = client.CreateBucket(credentialBucketName)
39 "Principal":["` + credentialUID + `"],
40 "Resource":["acs:oss:*:*:` + credentialBucketName + `", "acs:oss:*:*:` + credentialBucketName + `/*"]
45 err = client.SetBucketPolicy(credentialBucketName, policyInfo)
48 bucket, err := cs.client.Bucket(credentialBucketName)
53 // SetUpSuite runs once when the suite starts running.
54 func (cs *OssCredentialBucketSuite) SetUpSuite(c *C) {
55 if credentialUID == "" {
56 testLogger.Println("the cerdential UID is NULL, skip the credential test")
57 c.Skip("the credential Uid is null")
60 cs.credentialSubUser(c)
61 client, err := New(endpoint, credentialAccessID, credentialAccessKey)
65 bucket, err := cs.creClient.Bucket(credentialBucketName)
69 testLogger.Println("test credetial bucket started")
72 func (cs *OssCredentialBucketSuite) TearDownSuite(c *C) {
73 if credentialUID == "" {
74 c.Skip("the credential Uid is null")
76 for _, bucket := range []*Bucket{cs.bucket} {
78 keyMarker := KeyMarker("")
79 uploadIDMarker := UploadIDMarker("")
81 lmu, err := bucket.ListMultipartUploads(keyMarker, uploadIDMarker)
83 for _, upload := range lmu.Uploads {
84 imur := InitiateMultipartUploadResult{Bucket: credentialBucketName, Key: upload.Key, UploadID: upload.UploadID}
85 err = bucket.AbortMultipartUpload(imur)
88 keyMarker = KeyMarker(lmu.NextKeyMarker)
89 uploadIDMarker = UploadIDMarker(lmu.NextUploadIDMarker)
97 lor, err := bucket.ListObjects(marker)
99 for _, object := range lor.Objects {
100 err = bucket.DeleteObject(object.Key)
103 marker = Marker(lor.NextMarker)
104 if !lor.IsTruncated {
109 err := cs.client.DeleteBucket(credentialBucketName)
111 testLogger.Println("test credential bucket completed")
114 // Test put/get/list/delte object
115 func (cs *OssCredentialBucketSuite) TestReqerPaymentNoRequester(c *C) {
116 // Set bucket is requester who send the request
117 reqPayConf := RequestPaymentConfiguration{
118 Payer: string(Requester),
120 err := cs.client.SetBucketRequestPayment(credentialBucketName, reqPayConf)
123 key := objectNamePrefix + RandStr(8)
124 objectValue := RandStr(18)
127 err = cs.creBucket.PutObject(key, strings.NewReader(objectValue))
128 c.Assert(err, NotNil)
131 _, err = cs.creBucket.GetObject(key)
132 c.Assert(err, NotNil)
135 _, err = cs.creBucket.ListObjects()
136 c.Assert(err, NotNil)
138 err = cs.creBucket.DeleteObject(key)
139 c.Assert(err, NotNil)
141 // Set bucket is BucketOwner
142 reqPayConf.Payer = string(BucketOwner)
143 err = cs.client.SetBucketRequestPayment(credentialBucketName, reqPayConf)
147 // Test put/get/list/delte object
148 func (cs *OssCredentialBucketSuite) TestReqerPaymentWithRequester(c *C) {
149 // Set bucket is requester who send the request
150 reqPayConf := RequestPaymentConfiguration{
151 Payer: string(Requester),
153 err := cs.client.SetBucketRequestPayment(credentialBucketName, reqPayConf)
156 key := objectNamePrefix + RandStr(8)
157 objectValue := RandStr(18)
159 // Put object with a bucketowner
160 err = cs.creBucket.PutObject(key, strings.NewReader(objectValue), RequestPayer(BucketOwner))
161 c.Assert(err, NotNil)
164 err = cs.creBucket.PutObject(key, strings.NewReader(objectValue), RequestPayer(Requester))
168 body, err := cs.creBucket.GetObject(key, RequestPayer(Requester))
172 data, err := ioutil.ReadAll(body)
174 c.Assert(string(data), Equals, objectValue)
177 lor, err := cs.creBucket.ListObjects(RequestPayer(Requester))
179 c.Assert(len(lor.Objects), Equals, 1)
181 err = cs.creBucket.DeleteObject(key, RequestPayer(Requester))
184 // Set bucket is BucketOwner
185 reqPayConf.Payer = string(BucketOwner)
186 err = cs.client.SetBucketRequestPayment(credentialBucketName, reqPayConf)
190 // Test put/get/list/delte object
191 func (cs *OssCredentialBucketSuite) TestOwnerPaymentNoRequester(c *C) {
192 // Set bucket is requester who send the request
193 reqPayConf := RequestPaymentConfiguration{
194 Payer: string(BucketOwner),
196 err := cs.client.SetBucketRequestPayment(credentialBucketName, reqPayConf)
199 key := objectNamePrefix + RandStr(8)
200 objectValue := RandStr(18)
203 err = cs.creBucket.PutObject(key, strings.NewReader(objectValue))
207 body, err := cs.creBucket.GetObject(key)
211 data, err := ioutil.ReadAll(body)
213 c.Assert(string(data), Equals, objectValue)
216 lor, err := cs.creBucket.ListObjects()
218 c.Assert(len(lor.Objects), Equals, 1)
220 err = cs.creBucket.DeleteObject(key)
224 // Test put/get/list/delte object
225 func (cs *OssCredentialBucketSuite) TestOwnerPaymentWithRequester(c *C) {
226 // Set bucket is BucketOwner payer
227 reqPayConf := RequestPaymentConfiguration{
228 Payer: string(BucketOwner),
231 err := cs.client.SetBucketRequestPayment(credentialBucketName, reqPayConf)
234 key := objectNamePrefix + RandStr(8)
235 objectValue := RandStr(18)
238 err = cs.creBucket.PutObject(key, strings.NewReader(objectValue), RequestPayer(BucketOwner))
242 err = cs.creBucket.PutObject(key, strings.NewReader(objectValue), RequestPayer(Requester))
246 body, err := cs.creBucket.GetObject(key, RequestPayer(Requester))
250 data, err := ioutil.ReadAll(body)
252 c.Assert(string(data), Equals, objectValue)
255 lor, err := cs.creBucket.ListObjects(RequestPayer(Requester))
257 c.Assert(len(lor.Objects), Equals, 1)
259 err = cs.creBucket.DeleteObject(key, RequestPayer(Requester))
263 // TestPutObjectFromFile
264 func (cs *OssCredentialBucketSuite) TestPutObjectFromFile(c *C) {
265 objectName := objectNamePrefix + RandStr(8)
266 localFile := "../sample/BingWallpaper-2015-11-07.jpg"
267 newFile := RandStr(8) + ".jpg"
270 err := cs.creBucket.PutObjectFromFile(objectName, localFile, RequestPayer(Requester))
274 err = cs.creBucket.GetObjectToFile(objectName, newFile, RequestPayer(Requester))
276 eq, err := compareFiles(localFile, newFile)
278 c.Assert(eq, Equals, true)
280 meta, err := cs.creBucket.GetObjectDetailedMeta(objectName, RequestPayer(Requester))
282 c.Assert(meta.Get("Content-Type"), Equals, "image/jpeg")
284 acl, err := cs.creBucket.GetObjectACL(objectName, RequestPayer(Requester))
286 testLogger.Println("aclRes:", acl)
287 c.Assert(acl.ACL, Equals, "default")
289 err = cs.creBucket.DeleteObject(objectName, RequestPayer(Requester))
292 // Put with properties
295 ObjectACL(ACLPublicRead),
296 Meta("myprop", "mypropval"),
297 RequestPayer(Requester),
299 err = cs.creBucket.PutObjectFromFile(objectName, localFile, options...)
303 err = cs.creBucket.GetObjectToFile(objectName, newFile, RequestPayer(Requester))
305 eq, err = compareFiles(localFile, newFile)
307 c.Assert(eq, Equals, true)
309 acl, err = cs.creBucket.GetObjectACL(objectName, RequestPayer(Requester))
311 testLogger.Println("GetObjectACL:", acl)
312 c.Assert(acl.ACL, Equals, string(ACLPublicRead))
314 meta, err = cs.creBucket.GetObjectDetailedMeta(objectName, RequestPayer(Requester))
316 testLogger.Println("GetObjectDetailedMeta:", meta)
317 c.Assert(meta.Get("X-Oss-Meta-Myprop"), Equals, "mypropval")
319 err = cs.creBucket.DeleteObject(objectName, RequestPayer(Requester))
325 func (cs *OssCredentialBucketSuite) TestCopyObject(c *C) {
326 objectName := objectNamePrefix + RandStr(8)
327 objectValue := RandStr(18)
329 err := cs.creBucket.PutObject(objectName, strings.NewReader(objectValue),
330 ACL(ACLPublicRead), Meta("my", "myprop"), RequestPayer(Requester))
334 var objectNameDest = objectName + "dest"
335 _, err = cs.creBucket.CopyObject(objectName, objectNameDest, RequestPayer(Requester))
339 lor, err := cs.creBucket.ListObjects(Prefix(objectName), RequestPayer(Requester))
341 testLogger.Println("objects:", lor.Objects)
342 c.Assert(len(lor.Objects), Equals, 2)
344 body, err := cs.creBucket.GetObject(objectName, RequestPayer(Requester))
346 str, err := readBody(body)
348 c.Assert(str, Equals, objectValue)
350 err = cs.creBucket.DeleteObject(objectNameDest, RequestPayer(Requester))
353 // Copy with constraints x-oss-copy-source-if-modified-since
354 _, err = cs.creBucket.CopyObject(objectName, objectNameDest, CopySourceIfModifiedSince(futureDate), RequestPayer(Requester))
355 c.Assert(err, NotNil)
356 testLogger.Println("CopyObject:", err)
358 // Copy with constraints x-oss-copy-source-if-unmodified-since
359 _, err = cs.creBucket.CopyObject(objectName, objectNameDest, CopySourceIfUnmodifiedSince(futureDate), RequestPayer(Requester))
363 lor, err = cs.creBucket.ListObjects(Prefix(objectName), RequestPayer(Requester))
365 testLogger.Println("objects:", lor.Objects)
366 c.Assert(len(lor.Objects), Equals, 2)
368 body, err = cs.creBucket.GetObject(objectName, RequestPayer(Requester))
370 str, err = readBody(body)
372 c.Assert(str, Equals, objectValue)
374 err = cs.creBucket.DeleteObject(objectNameDest, RequestPayer(Requester))
377 // Copy with constraints x-oss-copy-source-if-match
378 meta, err := cs.creBucket.GetObjectDetailedMeta(objectName, RequestPayer(Requester))
380 testLogger.Println("GetObjectDetailedMeta:", meta)
382 _, err = cs.creBucket.CopyObject(objectName, objectNameDest, CopySourceIfMatch(meta.Get("Etag")), RequestPayer(Requester))
386 body, err = cs.creBucket.GetObject(objectName, RequestPayer(Requester))
388 str, err = readBody(body)
390 c.Assert(str, Equals, objectValue)
392 err = cs.creBucket.DeleteObject(objectNameDest, RequestPayer(Requester))
395 // Copy with constraints x-oss-copy-source-if-none-match
396 _, err = cs.creBucket.CopyObject(objectName, objectNameDest, CopySourceIfNoneMatch(meta.Get("Etag")), RequestPayer(Requester))
397 c.Assert(err, NotNil)
399 // Copy with constraints x-oss-metadata-directive
400 _, err = cs.creBucket.CopyObject(objectName, objectNameDest, Meta("my", "mydestprop"),
401 MetadataDirective(MetaCopy), RequestPayer(Requester))
405 body, err = cs.creBucket.GetObject(objectName, RequestPayer(Requester))
407 str, err = readBody(body)
409 c.Assert(str, Equals, objectValue)
411 destMeta, err := cs.creBucket.GetObjectDetailedMeta(objectNameDest, RequestPayer(Requester))
413 c.Assert(meta.Get("X-Oss-Meta-My"), Equals, "myprop")
415 acl, err := cs.creBucket.GetObjectACL(objectNameDest, RequestPayer(Requester))
417 c.Assert(acl.ACL, Equals, "default")
419 err = cs.creBucket.DeleteObject(objectNameDest, RequestPayer(Requester))
422 // Copy with constraints x-oss-metadata-directive and self defined dest object meta
424 ObjectACL(ACLPublicReadWrite),
425 Meta("my", "mydestprop"),
426 MetadataDirective(MetaReplace),
427 RequestPayer(Requester),
429 _, err = cs.creBucket.CopyObject(objectName, objectNameDest, options...)
433 body, err = cs.creBucket.GetObject(objectName, RequestPayer(Requester))
435 str, err = readBody(body)
437 c.Assert(str, Equals, objectValue)
439 destMeta, err = cs.creBucket.GetObjectDetailedMeta(objectNameDest, RequestPayer(Requester))
441 c.Assert(destMeta.Get("X-Oss-Meta-My"), Equals, "mydestprop")
443 acl, err = cs.creBucket.GetObjectACL(objectNameDest, RequestPayer(Requester))
445 c.Assert(acl.ACL, Equals, string(ACLPublicReadWrite))
447 err = cs.creBucket.DeleteObject(objectNameDest, RequestPayer(Requester))
450 err = cs.creBucket.DeleteObject(objectName, RequestPayer(Requester))
454 // TestCopyObjectToOrFrom
455 func (cs *OssCredentialBucketSuite) TestCopyObjectToOrFrom(c *C) {
456 objectName := objectNamePrefix + RandStr(8)
457 objectValue := RandStr(18)
458 sorBucketName := credentialBucketName + "-sor"
459 objectNameDest := objectName + "-Dest"
461 err := cs.client.CreateBucket(sorBucketName)
464 err = cs.client.SetBucketACL(sorBucketName, ACLPublicRead)
467 sorBucket, err := cs.client.Bucket(sorBucketName)
470 err = sorBucket.PutObject(objectName, strings.NewReader(objectValue))
474 _, err = cs.creBucket.CopyObjectFrom(sorBucketName, objectName, objectNameDest, RequestPayer(Requester))
478 body, err := cs.creBucket.GetObject(objectNameDest, RequestPayer(Requester))
480 str, err := readBody(body)
482 c.Assert(str, Equals, objectValue)
484 err = cs.creBucket.DeleteObject(objectNameDest, RequestPayer(Requester))
488 _, err = sorBucket.CopyObjectTo(credentialBucketName, objectName, objectName)
492 body, err = cs.creBucket.GetObject(objectName, RequestPayer(Requester))
494 str, err = readBody(body)
496 c.Assert(str, Equals, objectValue)
499 err = sorBucket.DeleteObject(objectName)
502 err = cs.creBucket.DeleteObject(objectName, RequestPayer(Requester))
505 err = cs.client.DeleteBucket(sorBucketName)
510 func (cs *OssCredentialBucketSuite) TestAppendObject(c *C) {
511 objectName := objectNamePrefix + RandStr(8)
512 objectValue1 := RandStr(18)
513 objectValue2 := RandStr(18)
514 objectValue := objectValue1 + objectValue2
515 var val = []byte(objectValue)
516 var localFile = RandStr(8) + ".txt"
518 var midPos = 1 + rand.Intn(len(val)-1)
520 var err = CreateFileAndWrite(localFile+"1", val[0:midPos])
522 err = CreateFileAndWrite(localFile+"2", val[midPos:])
526 nextPos, err = cs.creBucket.AppendObject(objectName, strings.NewReader(objectValue1), nextPos, RequestPayer(Requester))
528 nextPos, err = cs.creBucket.AppendObject(objectName, strings.NewReader(objectValue2), nextPos, RequestPayer(Requester))
531 body, err := cs.creBucket.GetObject(objectName, RequestPayer(Requester))
533 str, err := readBody(body)
535 c.Assert(str, Equals, objectValue)
537 err = cs.creBucket.DeleteObject(objectName, RequestPayer(Requester))
542 nextPos, err = cs.creBucket.AppendObject(objectName, bytes.NewReader(val[0:midPos]), nextPos, RequestPayer(Requester))
544 nextPos, err = cs.creBucket.AppendObject(objectName, bytes.NewReader(val[midPos:]), nextPos, RequestPayer(Requester))
547 body, err = cs.creBucket.GetObject(objectName, RequestPayer(Requester))
549 str, err = readBody(body)
551 c.Assert(str, Equals, objectValue)
553 err = cs.creBucket.DeleteObject(objectName, RequestPayer(Requester))
558 ObjectACL(ACLPublicReadWrite),
559 Meta("my", "myprop"),
560 RequestPayer(Requester),
563 fd, err := os.Open(localFile + "1")
567 nextPos, err = cs.creBucket.AppendObject(objectName, fd, nextPos, options...)
570 meta, err := cs.creBucket.GetObjectDetailedMeta(objectName, RequestPayer(Requester))
572 testLogger.Println("GetObjectDetailedMeta:", meta, ",", nextPos)
573 c.Assert(meta.Get("X-Oss-Object-Type"), Equals, "Appendable")
574 c.Assert(meta.Get("X-Oss-Meta-My"), Equals, "myprop")
575 c.Assert(meta.Get("x-oss-Meta-Mine"), Equals, "")
576 c.Assert(meta.Get("X-Oss-Next-Append-Position"), Equals, strconv.FormatInt(nextPos, 10))
578 acl, err := cs.creBucket.GetObjectACL(objectName, RequestPayer(Requester))
580 testLogger.Println("GetObjectACL:", acl)
581 c.Assert(acl.ACL, Equals, string(ACLPublicReadWrite))
585 ObjectACL(ACLPublicRead),
586 Meta("my", "myproptwo"),
587 Meta("mine", "mypropmine"),
588 RequestPayer(Requester),
590 fd, err = os.Open(localFile + "2")
593 nextPos, err = cs.creBucket.AppendObject(objectName, fd, nextPos, options...)
596 body, err = cs.creBucket.GetObject(objectName, RequestPayer(Requester))
598 str, err = readBody(body)
600 c.Assert(str, Equals, objectValue)
602 meta, err = cs.creBucket.GetObjectDetailedMeta(objectName, RequestPayer(Requester))
604 testLogger.Println("GetObjectDetailedMeta xxx:", meta)
605 c.Assert(meta.Get("X-Oss-Object-Type"), Equals, "Appendable")
606 c.Assert(meta.Get("X-Oss-Meta-My"), Equals, "myprop")
607 c.Assert(meta.Get("x-Oss-Meta-Mine"), Equals, "")
608 c.Assert(meta.Get("X-Oss-Next-Append-Position"), Equals, strconv.FormatInt(nextPos, 10))
610 acl, err = cs.creBucket.GetObjectACL(objectName, RequestPayer(Requester))
612 c.Assert(acl.ACL, Equals, string(ACLPublicRead))
614 err = cs.creBucket.DeleteObject(objectName, RequestPayer(Requester))