14 type OssBucketMultipartSuite struct {
19 var _ = Suite(&OssBucketMultipartSuite{})
21 // SetUpSuite runs once when the suite starts running
22 func (s *OssBucketMultipartSuite) SetUpSuite(c *C) {
23 client, err := New(endpoint, accessID, accessKey)
27 s.client.CreateBucket(bucketName)
29 bucket, err := s.client.Bucket(bucketName)
34 keyMarker := KeyMarker("")
35 uploadIDMarker := UploadIDMarker("")
37 lmur, err := s.bucket.ListMultipartUploads(keyMarker, uploadIDMarker)
39 for _, upload := range lmur.Uploads {
40 var imur = InitiateMultipartUploadResult{Bucket: s.bucket.BucketName,
41 Key: upload.Key, UploadID: upload.UploadID}
42 err = s.bucket.AbortMultipartUpload(imur)
45 keyMarker = KeyMarker(lmur.NextKeyMarker)
46 uploadIDMarker = UploadIDMarker(lmur.NextUploadIDMarker)
47 if !lmur.IsTruncated {
55 lor, err := s.bucket.ListObjects(marker)
57 for _, object := range lor.Objects {
58 err = s.bucket.DeleteObject(object.Key)
61 marker = Marker(lor.NextMarker)
67 testLogger.Println("test multipart started")
70 // TearDownSuite runs before each test or benchmark starts running
71 func (s *OssBucketMultipartSuite) TearDownSuite(c *C) {
73 keyMarker := KeyMarker("")
74 uploadIDMarker := UploadIDMarker("")
76 lmur, err := s.bucket.ListMultipartUploads(keyMarker, uploadIDMarker)
78 for _, upload := range lmur.Uploads {
79 var imur = InitiateMultipartUploadResult{Bucket: s.bucket.BucketName,
80 Key: upload.Key, UploadID: upload.UploadID}
81 err = s.bucket.AbortMultipartUpload(imur)
84 keyMarker = KeyMarker(lmur.NextKeyMarker)
85 uploadIDMarker = UploadIDMarker(lmur.NextUploadIDMarker)
86 if !lmur.IsTruncated {
94 lor, err := s.bucket.ListObjects(marker)
96 for _, object := range lor.Objects {
97 err = s.bucket.DeleteObject(object.Key)
100 marker = Marker(lor.NextMarker)
101 if !lor.IsTruncated {
107 err := s.client.DeleteBucket(s.bucket.BucketName)
110 testLogger.Println("test multipart completed")
113 // SetUpTest runs after each test or benchmark runs
114 func (s *OssBucketMultipartSuite) SetUpTest(c *C) {
115 err := removeTempFiles("../oss", ".jpg")
119 // TearDownTest runs once after all tests or benchmarks have finished running
120 func (s *OssBucketMultipartSuite) TearDownTest(c *C) {
121 err := removeTempFiles("../oss", ".jpg")
124 err = removeTempFiles("../oss", ".temp")
127 err = removeTempFiles("../oss", ".txt1")
130 err = removeTempFiles("../oss", ".txt2")
134 // TestMultipartUpload
135 func (s *OssBucketMultipartSuite) TestMultipartUpload(c *C) {
136 objectName := objectNamePrefix + RandStr(8)
137 var fileName = "../sample/BingWallpaper-2015-11-07.jpg"
139 chunks, err := SplitFileByPartNum(fileName, 3)
141 testLogger.Println("chunks:", chunks)
144 Expires(futureDate), Meta("my", "myprop"),
147 fd, err := os.Open(fileName)
151 imur, err := s.bucket.InitiateMultipartUpload(objectName, options...)
153 var parts []UploadPart
154 for _, chunk := range chunks {
155 fd.Seek(chunk.Offset, os.SEEK_SET)
156 part, err := s.bucket.UploadPart(imur, fd, chunk.Size, chunk.Number)
158 parts = append(parts, part)
161 cmur, err := s.bucket.CompleteMultipartUpload(imur, parts)
163 testLogger.Println("cmur:", cmur)
165 meta, err := s.bucket.GetObjectDetailedMeta(objectName)
167 testLogger.Println("GetObjectDetailedMeta:", meta)
168 c.Assert(meta.Get("X-Oss-Meta-My"), Equals, "myprop")
169 c.Assert(meta.Get("Expires"), Equals, futureDate.Format(http.TimeFormat))
170 c.Assert(meta.Get("X-Oss-Object-Type"), Equals, "Multipart")
172 err = s.bucket.GetObjectToFile(objectName, "newpic1.jpg")
175 err = s.bucket.DeleteObject(objectName)
179 // TestMultipartUploadFromFile
180 func (s *OssBucketMultipartSuite) TestMultipartUploadFromFile(c *C) {
181 objectName := objectNamePrefix + RandStr(8)
182 var fileName = "../sample/BingWallpaper-2015-11-07.jpg"
184 chunks, err := SplitFileByPartNum(fileName, 3)
186 testLogger.Println("chunks:", chunks)
189 Expires(futureDate), Meta("my", "myprop"),
191 imur, err := s.bucket.InitiateMultipartUpload(objectName, options...)
193 var parts []UploadPart
194 for _, chunk := range chunks {
195 part, err := s.bucket.UploadPartFromFile(imur, fileName, chunk.Offset, chunk.Size, chunk.Number)
197 parts = append(parts, part)
200 cmur, err := s.bucket.CompleteMultipartUpload(imur, parts)
202 testLogger.Println("cmur:", cmur)
204 meta, err := s.bucket.GetObjectDetailedMeta(objectName)
206 testLogger.Println("GetObjectDetailedMeta:", meta)
207 c.Assert(meta.Get("X-Oss-Meta-My"), Equals, "myprop")
208 c.Assert(meta.Get("Expires"), Equals, futureDate.Format(http.TimeFormat))
209 c.Assert(meta.Get("X-Oss-Object-Type"), Equals, "Multipart")
211 err = s.bucket.GetObjectToFile(objectName, "newpic1.jpg")
214 err = s.bucket.DeleteObject(objectName)
218 // TestUploadPartCopy
219 func (s *OssBucketMultipartSuite) TestUploadPartCopy(c *C) {
220 objectSrc := objectNamePrefix + RandStr(8) + "-src"
221 objectDest := objectNamePrefix + RandStr(8) + "-dest"
222 var fileName = "../sample/BingWallpaper-2015-11-07.jpg"
224 chunks, err := SplitFileByPartNum(fileName, 3)
226 testLogger.Println("chunks:", chunks)
228 err = s.bucket.PutObjectFromFile(objectSrc, fileName)
232 Expires(futureDate), Meta("my", "myprop"),
234 imur, err := s.bucket.InitiateMultipartUpload(objectDest, options...)
236 var parts []UploadPart
237 for _, chunk := range chunks {
238 part, err := s.bucket.UploadPartCopy(imur, bucketName, objectSrc, chunk.Offset, chunk.Size, (int)(chunk.Number))
240 parts = append(parts, part)
243 cmur, err := s.bucket.CompleteMultipartUpload(imur, parts)
245 testLogger.Println("cmur:", cmur)
247 meta, err := s.bucket.GetObjectDetailedMeta(objectDest)
249 testLogger.Println("GetObjectDetailedMeta:", meta)
250 c.Assert(meta.Get("X-Oss-Meta-My"), Equals, "myprop")
251 c.Assert(meta.Get("Expires"), Equals, futureDate.Format(http.TimeFormat))
252 c.Assert(meta.Get("X-Oss-Object-Type"), Equals, "Multipart")
254 err = s.bucket.GetObjectToFile(objectDest, "newpic2.jpg")
257 err = s.bucket.DeleteObject(objectSrc)
259 err = s.bucket.DeleteObject(objectDest)
263 func (s *OssBucketMultipartSuite) TestListUploadedParts(c *C) {
264 objectName := objectNamePrefix + RandStr(8)
265 objectSrc := objectName + "-src"
266 objectDest := objectName + "-dest"
267 var fileName = "../sample/BingWallpaper-2015-11-07.jpg"
269 chunks, err := SplitFileByPartSize(fileName, 100*1024)
271 testLogger.Println("chunks:", chunks)
273 err = s.bucket.PutObjectFromFile(objectSrc, fileName)
277 imurUpload, err := s.bucket.InitiateMultipartUpload(objectName)
278 var partsUpload []UploadPart
279 for _, chunk := range chunks {
280 part, err := s.bucket.UploadPartFromFile(imurUpload, fileName, chunk.Offset, chunk.Size, (int)(chunk.Number))
282 partsUpload = append(partsUpload, part)
286 imurCopy, err := s.bucket.InitiateMultipartUpload(objectDest)
287 var partsCopy []UploadPart
288 for _, chunk := range chunks {
289 part, err := s.bucket.UploadPartCopy(imurCopy, bucketName, objectSrc, chunk.Offset, chunk.Size, (int)(chunk.Number))
291 partsCopy = append(partsCopy, part)
295 lupr, err := s.bucket.ListUploadedParts(imurUpload)
297 testLogger.Println("lupr:", lupr)
298 c.Assert(len(lupr.UploadedParts), Equals, len(chunks))
300 lupr, err = s.bucket.ListUploadedParts(imurCopy)
302 testLogger.Println("lupr:", lupr)
303 c.Assert(len(lupr.UploadedParts), Equals, len(chunks))
305 lmur, err := s.bucket.ListMultipartUploads()
307 testLogger.Println("lmur:", lmur)
310 _, err = s.bucket.CompleteMultipartUpload(imurUpload, partsUpload)
312 _, err = s.bucket.CompleteMultipartUpload(imurCopy, partsCopy)
316 err = s.bucket.GetObjectToFile(objectDest, "newpic3.jpg")
318 err = s.bucket.GetObjectToFile(objectName, "newpic4.jpg")
321 err = s.bucket.DeleteObject(objectName)
323 err = s.bucket.DeleteObject(objectDest)
325 err = s.bucket.DeleteObject(objectSrc)
329 func (s *OssBucketMultipartSuite) TestAbortMultipartUpload(c *C) {
330 objectName := objectNamePrefix + RandStr(8)
331 objectSrc := objectName + "-src"
332 objectDest := objectName + "-dest"
333 var fileName = "../sample/BingWallpaper-2015-11-07.jpg"
335 chunks, err := SplitFileByPartSize(fileName, 100*1024)
337 testLogger.Println("chunks:", chunks)
339 err = s.bucket.PutObjectFromFile(objectSrc, fileName)
343 imurUpload, err := s.bucket.InitiateMultipartUpload(objectName)
344 var partsUpload []UploadPart
345 for _, chunk := range chunks {
346 part, err := s.bucket.UploadPartFromFile(imurUpload, fileName, chunk.Offset, chunk.Size, (int)(chunk.Number))
348 partsUpload = append(partsUpload, part)
352 imurCopy, err := s.bucket.InitiateMultipartUpload(objectDest)
353 var partsCopy []UploadPart
354 for _, chunk := range chunks {
355 part, err := s.bucket.UploadPartCopy(imurCopy, bucketName, objectSrc, chunk.Offset, chunk.Size, (int)(chunk.Number))
357 partsCopy = append(partsCopy, part)
361 lupr, err := s.bucket.ListUploadedParts(imurUpload)
363 testLogger.Println("lupr:", lupr)
364 c.Assert(len(lupr.UploadedParts), Equals, len(chunks))
366 lupr, err = s.bucket.ListUploadedParts(imurCopy)
368 testLogger.Println("lupr:", lupr)
369 c.Assert(len(lupr.UploadedParts), Equals, len(chunks))
371 lmur, err := s.bucket.ListMultipartUploads()
373 testLogger.Println("lmur:", lmur)
374 c.Assert(len(lmur.Uploads), Equals, 2)
377 err = s.bucket.AbortMultipartUpload(imurUpload)
379 err = s.bucket.AbortMultipartUpload(imurCopy)
382 lmur, err = s.bucket.ListMultipartUploads()
384 testLogger.Println("lmur:", lmur)
385 c.Assert(len(lmur.Uploads), Equals, 0)
388 err = s.bucket.GetObjectToFile(objectDest, "newpic3.jpg")
389 c.Assert(err, NotNil)
390 err = s.bucket.GetObjectToFile(objectName, "newpic4.jpg")
391 c.Assert(err, NotNil)
394 // TestUploadPartCopyWithConstraints
395 func (s *OssBucketMultipartSuite) TestUploadPartCopyWithConstraints(c *C) {
396 objectSrc := objectNamePrefix + RandStr(8) + "-src"
397 objectDest := objectNamePrefix + RandStr(8) + "-dest"
398 var fileName = "../sample/BingWallpaper-2015-11-07.jpg"
400 chunks, err := SplitFileByPartNum(fileName, 3)
402 testLogger.Println("chunks:", chunks)
404 err = s.bucket.PutObjectFromFile(objectSrc, fileName)
407 imur, err := s.bucket.InitiateMultipartUpload(objectDest)
408 var parts []UploadPart
409 for _, chunk := range chunks {
410 _, err = s.bucket.UploadPartCopy(imur, bucketName, objectSrc, chunk.Offset, chunk.Size, (int)(chunk.Number),
411 CopySourceIfModifiedSince(futureDate))
412 c.Assert(err, NotNil)
415 for _, chunk := range chunks {
416 _, err = s.bucket.UploadPartCopy(imur, bucketName, objectSrc, chunk.Offset, chunk.Size, (int)(chunk.Number),
417 CopySourceIfUnmodifiedSince(futureDate))
421 meta, err := s.bucket.GetObjectDetailedMeta(objectSrc)
423 testLogger.Println("GetObjectDetailedMeta:", meta)
425 for _, chunk := range chunks {
426 _, err = s.bucket.UploadPartCopy(imur, bucketName, objectSrc, chunk.Offset, chunk.Size, (int)(chunk.Number),
427 CopySourceIfNoneMatch(meta.Get("Etag")))
428 c.Assert(err, NotNil)
431 for _, chunk := range chunks {
432 part, err := s.bucket.UploadPartCopy(imur, bucketName, objectSrc, chunk.Offset, chunk.Size, (int)(chunk.Number),
433 CopySourceIfMatch(meta.Get("Etag")))
435 parts = append(parts, part)
438 cmur, err := s.bucket.CompleteMultipartUpload(imur, parts)
440 testLogger.Println("cmur:", cmur)
442 err = s.bucket.GetObjectToFile(objectDest, "newpic5.jpg")
445 err = s.bucket.DeleteObject(objectSrc)
447 err = s.bucket.DeleteObject(objectDest)
451 // TestMultipartUploadFromFileOutofOrder
452 func (s *OssBucketMultipartSuite) TestMultipartUploadFromFileOutofOrder(c *C) {
453 objectName := objectNamePrefix + RandStr(8)
454 var fileName = "../sample/BingWallpaper-2015-11-07.jpg"
456 chunks, err := SplitFileByPartSize(fileName, 1024*100)
459 testLogger.Println("chunks:", chunks)
461 imur, err := s.bucket.InitiateMultipartUpload(objectName)
462 var parts []UploadPart
463 for _, chunk := range chunks {
464 _, err := s.bucket.UploadPartFromFile(imur, fileName, chunk.Offset, chunk.Size, (int)(chunk.Number))
468 for _, chunk := range chunks {
469 part, err := s.bucket.UploadPartFromFile(imur, fileName, chunk.Offset, chunk.Size, (int)(chunk.Number))
471 parts = append(parts, part)
474 cmur, err := s.bucket.CompleteMultipartUpload(imur, parts)
476 testLogger.Println("cmur:", cmur)
478 err = s.bucket.GetObjectToFile(objectName, "newpic6.jpg")
481 err = s.bucket.DeleteObject(objectName)
485 // TestUploadPartCopyOutofOrder
486 func (s *OssBucketMultipartSuite) TestUploadPartCopyOutofOrder(c *C) {
487 objectSrc := objectNamePrefix + RandStr(8) + "-src"
488 objectDest := objectNamePrefix + RandStr(8) + "-dest"
489 var fileName = "../sample/BingWallpaper-2015-11-07.jpg"
491 chunks, err := SplitFileByPartSize(fileName, 1024*100)
494 testLogger.Println("chunks:", chunks)
496 err = s.bucket.PutObjectFromFile(objectSrc, fileName)
499 imur, err := s.bucket.InitiateMultipartUpload(objectDest)
500 var parts []UploadPart
501 for _, chunk := range chunks {
502 _, err := s.bucket.UploadPartCopy(imur, bucketName, objectSrc, chunk.Offset, chunk.Size, (int)(chunk.Number))
506 for _, chunk := range chunks {
507 part, err := s.bucket.UploadPartCopy(imur, bucketName, objectSrc, chunk.Offset, chunk.Size, (int)(chunk.Number))
509 parts = append(parts, part)
512 cmur, err := s.bucket.CompleteMultipartUpload(imur, parts)
514 testLogger.Println("cmur:", cmur)
516 err = s.bucket.GetObjectToFile(objectDest, "newpic7.jpg")
519 err = s.bucket.DeleteObject(objectSrc)
521 err = s.bucket.DeleteObject(objectDest)
525 // TestMultipartUploadFromFileType
526 func (s *OssBucketMultipartSuite) TestMultipartUploadFromFileType(c *C) {
527 objectName := objectNamePrefix + RandStr(8) + ".jpg"
528 var fileName = "../sample/BingWallpaper-2015-11-07.jpg"
530 chunks, err := SplitFileByPartNum(fileName, 4)
532 testLogger.Println("chunks:", chunks)
534 imur, err := s.bucket.InitiateMultipartUpload(objectName)
535 var parts []UploadPart
536 for _, chunk := range chunks {
537 part, err := s.bucket.UploadPartFromFile(imur, fileName, chunk.Offset, chunk.Size, chunk.Number)
539 parts = append(parts, part)
542 testLogger.Println("parts:", parts)
543 cmur, err := s.bucket.CompleteMultipartUpload(imur, parts)
545 testLogger.Println("cmur:", cmur)
547 err = s.bucket.GetObjectToFile(objectName, "newpic8.jpg")
550 meta, err := s.bucket.GetObjectDetailedMeta(objectName)
552 c.Assert(meta.Get("Content-Type"), Equals, "image/jpeg")
554 err = s.bucket.DeleteObject(objectName)
558 func (s *OssBucketMultipartSuite) TestListMultipartUploads(c *C) {
559 objectName := objectNamePrefix + RandStr(8)
561 imurs := []InitiateMultipartUploadResult{}
562 for i := 0; i < 20; i++ {
563 imur, err := s.bucket.InitiateMultipartUpload(objectName + strconv.Itoa(i))
565 imurs = append(imurs, imur)
568 lmpu, err := s.bucket.ListMultipartUploads()
570 c.Assert(len(lmpu.Uploads), Equals, 20)
572 lmpu, err = s.bucket.ListMultipartUploads(MaxUploads(3))
574 c.Assert(len(lmpu.Uploads), Equals, 3)
576 lmpu, err = s.bucket.ListMultipartUploads(Prefix(objectName))
578 c.Assert(len(lmpu.Uploads), Equals, 20)
580 lmpu, err = s.bucket.ListMultipartUploads(Prefix(objectName + "1"))
582 c.Assert(len(lmpu.Uploads), Equals, 11)
584 lmpu, err = s.bucket.ListMultipartUploads(Prefix(objectName + "22"))
586 c.Assert(len(lmpu.Uploads), Equals, 0)
588 lmpu, err = s.bucket.ListMultipartUploads(KeyMarker(objectName + "10"))
590 c.Assert(len(lmpu.Uploads), Equals, 17)
592 lmpu, err = s.bucket.ListMultipartUploads(KeyMarker(objectName+"10"), MaxUploads(3))
594 c.Assert(len(lmpu.Uploads), Equals, 3)
596 lmpu, err = s.bucket.ListMultipartUploads(Prefix(objectName), Delimiter("4"))
598 c.Assert(len(lmpu.Uploads), Equals, 18)
599 c.Assert(len(lmpu.CommonPrefixes), Equals, 2)
601 upLoadIDStr := RandStr(3)
602 lmpu, err = s.bucket.ListMultipartUploads(KeyMarker(objectName+"12"), UploadIDMarker(upLoadIDStr))
605 for _, im := range imurs {
606 if im.Key == objectName+"12" && im.UploadID > upLoadIDStr {
611 c.Assert(len(lmpu.Uploads), Equals, checkNum)
612 //testLogger.Println("UploadIDMarker", lmpu.Uploads)
614 for _, imur := range imurs {
615 err = s.bucket.AbortMultipartUpload(imur)
620 func (s *OssBucketMultipartSuite) TestListMultipartUploadsEncodingKey(c *C) {
621 prefix := objectNamePrefix + "è®©ä½ ä»»æ€§è®©ä½ ç‹‚" + RandStr(8)
623 imurs := []InitiateMultipartUploadResult{}
624 for i := 0; i < 3; i++ {
625 imur, err := s.bucket.InitiateMultipartUpload(prefix + strconv.Itoa(i))
627 imurs = append(imurs, imur)
630 lmpu, err := s.bucket.ListMultipartUploads()
632 c.Assert(len(lmpu.Uploads), Equals, 3)
634 lmpu, err = s.bucket.ListMultipartUploads(Prefix(prefix + "1"))
636 c.Assert(len(lmpu.Uploads), Equals, 1)
638 lmpu, err = s.bucket.ListMultipartUploads(KeyMarker(prefix + "1"))
640 c.Assert(len(lmpu.Uploads), Equals, 1)
642 lmpu, err = s.bucket.ListMultipartUploads(EncodingType("url"))
644 for i, upload := range lmpu.Uploads {
645 c.Assert(upload.Key, Equals, prefix+strconv.Itoa(i))
648 for _, imur := range imurs {
649 err = s.bucket.AbortMultipartUpload(imur)
654 func (s *OssBucketMultipartSuite) TestMultipartNegative(c *C) {
655 objectName := objectNamePrefix + RandStr(8)
658 data := make([]byte, 100*1024)
659 imur, err := s.bucket.InitiateMultipartUpload(string(data))
660 c.Assert(err, NotNil)
663 fileName := "../sample/BingWallpaper-2015-11-07.jpg"
664 fd, err := os.Open(fileName)
668 _, err = s.bucket.UploadPart(imur, fd, 1024, 1)
669 c.Assert(err, NotNil)
671 _, err = s.bucket.UploadPartFromFile(imur, fileName, 0, 1024, 1)
672 c.Assert(err, NotNil)
674 _, err = s.bucket.UploadPartCopy(imur, bucketName, fileName, 0, 1024, 1)
675 c.Assert(err, NotNil)
677 err = s.bucket.AbortMultipartUpload(imur)
678 c.Assert(err, NotNil)
680 _, err = s.bucket.ListUploadedParts(imur)
681 c.Assert(err, NotNil)
684 imur, err = s.bucket.InitiateMultipartUpload(objectName)
687 _, err = s.bucket.UploadPart(imur, fd, 1024, 1)
690 _, err = s.bucket.UploadPart(imur, fd, 102400, 10001)
691 c.Assert(err, NotNil)
693 // _, err = s.bucket.UploadPartFromFile(imur, fileName, 0, 1024, 1)
694 // c.Assert(err, IsNil)
696 _, err = s.bucket.UploadPartFromFile(imur, fileName, 0, 102400, 10001)
697 c.Assert(err, NotNil)
699 _, err = s.bucket.UploadPartCopy(imur, bucketName, fileName, 0, 1024, 1)
700 c.Assert(err, NotNil)
702 _, err = s.bucket.UploadPartCopy(imur, bucketName, fileName, 0, 1024, 1000)
703 c.Assert(err, NotNil)
705 err = s.bucket.AbortMultipartUpload(imur)
709 _, err = s.bucket.InitiateMultipartUpload(objectName, IfModifiedSince(futureDate))
713 func (s *OssBucketMultipartSuite) TestMultipartUploadFromFileBigFile(c *C) {
714 objectName := objectNamePrefix + RandStr(8)
715 bigFile := "D:\\tmp\\bigfile.zip"
716 newFile := "D:\\tmp\\newbigfile.zip"
718 exist, err := isFileExist(bigFile)
724 chunks, err := SplitFileByPartNum(bigFile, 64)
726 testLogger.Println("chunks:", chunks)
728 imur, err := s.bucket.InitiateMultipartUpload(objectName)
729 var parts []UploadPart
731 for _, chunk := range chunks {
732 part, err := s.bucket.UploadPartFromFile(imur, bigFile, chunk.Offset, chunk.Size, (int)(chunk.Number))
734 parts = append(parts, part)
737 testLogger.Println("Uplaod big file:", bigFile, "use sec:", end-start)
739 testLogger.Println("parts:", parts)
740 _, err = s.bucket.CompleteMultipartUpload(imur, parts)
744 err = s.bucket.GetObjectToFile(objectName, newFile)
747 testLogger.Println("Download big file:", bigFile, "use sec:", end-start)
750 eq, err := compareFiles(bigFile, newFile)
752 c.Assert(eq, Equals, true)
754 testLogger.Println("Compare big file:", bigFile, "use sec:", end-start)
756 err = s.bucket.DeleteObject(objectName)
761 func (s *OssBucketMultipartSuite) TestUploadFile(c *C) {
762 objectName := objectNamePrefix + RandStr(8)
763 var fileName = "../sample/BingWallpaper-2015-11-07.jpg"
764 newFile := RandStr(8) + ".jpg"
766 // Upload with 100K part size
767 err := s.bucket.UploadFile(objectName, fileName, 100*1024)
771 err = s.bucket.GetObjectToFile(objectName, newFile)
774 eq, err := compareFiles(fileName, newFile)
776 c.Assert(eq, Equals, true)
778 err = s.bucket.DeleteObject(objectName)
781 // Upload with part size equals to 1/4 of the file size
782 err = s.bucket.UploadFile(objectName, fileName, 482048/4)
786 err = s.bucket.GetObjectToFile(objectName, newFile)
789 eq, err = compareFiles(fileName, newFile)
791 c.Assert(eq, Equals, true)
793 err = s.bucket.DeleteObject(objectName)
796 // Upload with part size equals to the file size
797 err = s.bucket.UploadFile(objectName, fileName, 482048)
801 err = s.bucket.GetObjectToFile(objectName, newFile)
804 eq, err = compareFiles(fileName, newFile)
806 c.Assert(eq, Equals, true)
808 err = s.bucket.DeleteObject(objectName)
811 // Upload with part size is bigger than the file size
812 err = s.bucket.UploadFile(objectName, fileName, 482049)
816 err = s.bucket.GetObjectToFile(objectName, newFile)
819 eq, err = compareFiles(fileName, newFile)
821 c.Assert(eq, Equals, true)
823 err = s.bucket.DeleteObject(objectName)
829 ObjectACL(ACLPublicRead),
830 Meta("myprop", "mypropval")}
831 err = s.bucket.UploadFile(objectName, fileName, 482049, options...)
836 err = s.bucket.GetObjectToFile(objectName, newFile)
839 eq, err = compareFiles(fileName, newFile)
841 c.Assert(eq, Equals, true)
843 acl, err := s.bucket.GetObjectACL(objectName)
845 testLogger.Println("GetObjectAcl:", acl)
846 c.Assert(acl.ACL, Equals, "public-read")
848 meta, err := s.bucket.GetObjectDetailedMeta(objectName)
850 testLogger.Println("GetObjectDetailedMeta:", meta)
851 c.Assert(meta.Get("X-Oss-Meta-Myprop"), Equals, "mypropval")
854 func (s *OssBucketMultipartSuite) TestUploadFileNegative(c *C) {
855 objectName := objectNamePrefix + RandStr(8)
856 var fileName = "../sample/BingWallpaper-2015-11-07.jpg"
858 // Smaller than the required minimal part size (100KB)
859 err := s.bucket.UploadFile(objectName, fileName, 100*1024-1)
860 c.Assert(err, NotNil)
862 // Bigger than the max part size (5G)
863 err = s.bucket.UploadFile(objectName, fileName, 1024*1024*1024*5+1)
864 c.Assert(err, NotNil)
866 // File does not exist
867 err = s.bucket.UploadFile(objectName, "/root1/123abc9874", 1024*1024*1024)
868 c.Assert(err, NotNil)
870 // Invalid key , key is empty.
871 err = s.bucket.UploadFile("", fileName, 100*1024)
872 c.Assert(err, NotNil)
876 func (s *OssBucketMultipartSuite) TestDownloadFile(c *C) {
877 objectName := objectNamePrefix + RandStr(8)
878 var fileName = "../sample/BingWallpaper-2015-11-07.jpg"
879 newFile := RandStr(8) + ".jpg"
881 err := s.bucket.UploadFile(objectName, fileName, 100*1024)
884 // Download file with part size of 100K
885 err = s.bucket.DownloadFile(objectName, newFile, 100*1024)
889 err = s.bucket.GetObjectToFile(objectName, newFile)
892 eq, err := compareFiles(fileName, newFile)
894 c.Assert(eq, Equals, true)
896 // Download the file with part size equals to 1/4 of the file size
897 err = s.bucket.DownloadFile(objectName, newFile, 482048/4)
901 err = s.bucket.GetObjectToFile(objectName, newFile)
904 eq, err = compareFiles(fileName, newFile)
906 c.Assert(eq, Equals, true)
908 // Download the file with part size same as the file size
909 err = s.bucket.DownloadFile(objectName, newFile, 482048)
913 err = s.bucket.GetObjectToFile(objectName, newFile)
916 eq, err = compareFiles(fileName, newFile)
918 c.Assert(eq, Equals, true)
920 // Download the file with part size bigger than the file size
921 err = s.bucket.DownloadFile(objectName, newFile, 482049)
925 err = s.bucket.GetObjectToFile(objectName, newFile)
928 eq, err = compareFiles(fileName, newFile)
930 c.Assert(eq, Equals, true)
933 meta, err := s.bucket.GetObjectDetailedMeta(objectName)
935 testLogger.Println("GetObjectDetailedMeta:", meta)
938 err = s.bucket.DownloadFile(objectName, newFile, 482048/4, IfMatch(meta.Get("Etag")))
942 err = s.bucket.GetObjectToFile(objectName, newFile)
945 eq, err = compareFiles(fileName, newFile)
947 c.Assert(eq, Equals, true)
950 err = s.bucket.DownloadFile(objectName, newFile, 482048, IfNoneMatch(meta.Get("Etag")))
951 c.Assert(err, NotNil)
954 err = s.bucket.DeleteObject(objectName)
958 func (s *OssBucketMultipartSuite) TestDownloadFileNegative(c *C) {
959 objectName := objectNamePrefix + RandStr(8)
960 newFile := RandStr(8) + ".jpg"
962 // Smaller than the required minimal part size (100KB)
963 err := s.bucket.DownloadFile(objectName, newFile, 100*1024-1)
964 c.Assert(err, NotNil)
966 // Bigger than the required max part size (5G)
967 err = s.bucket.DownloadFile(objectName, newFile, 1024*1024*1024+1)
968 c.Assert(err, NotNil)
970 // File does not exist
971 err = s.bucket.DownloadFile(objectName, "/OSS/TEMP/ZIBI/QUQU/BALA", 1024*1024*1024+1)
972 c.Assert(err, NotNil)
974 // Key does not exist
975 err = s.bucket.DownloadFile(objectName, newFile, 100*1024)
976 c.Assert(err, NotNil)
980 func shuffleArray(chunks []FileChunk) []FileChunk {
981 for i := range chunks {
982 j := rand.Intn(i + 1)
983 chunks[i], chunks[j] = chunks[j], chunks[i]