github.com/aliyun/aliyun-oss-go-sdk@v3.0.2+incompatible/oss/progress_test.go (about)

     1  // bucket test
     2  
     3  package oss
     4  
     5  import (
     6  	"bytes"
     7  	"io/ioutil"
     8  	"math/rand"
     9  	"os"
    10  	"strings"
    11  	"sync/atomic"
    12  
    13  	. "gopkg.in/check.v1"
    14  )
    15  
    16  type OssProgressSuite struct {
    17  	cloudBoxControlClient *Client
    18  	client                *Client
    19  	bucket                *Bucket
    20  }
    21  
    22  var _ = Suite(&OssProgressSuite{})
    23  
    24  // SetUpSuite runs once when the suite starts running
    25  func (s *OssProgressSuite) SetUpSuite(c *C) {
    26  	bucketName = bucketNamePrefix + RandLowStr(6)
    27  	if cloudboxControlEndpoint == "" {
    28  		client, err := New(endpoint, accessID, accessKey)
    29  		c.Assert(err, IsNil)
    30  		s.client = client
    31  
    32  		s.client.CreateBucket(bucketName)
    33  
    34  		bucket, err := s.client.Bucket(bucketName)
    35  		c.Assert(err, IsNil)
    36  		s.bucket = bucket
    37  	} else {
    38  		client, err := New(cloudboxEndpoint, accessID, accessKey)
    39  		c.Assert(err, IsNil)
    40  		s.client = client
    41  
    42  		controlClient, err := New(cloudboxControlEndpoint, accessID, accessKey)
    43  		c.Assert(err, IsNil)
    44  		s.cloudBoxControlClient = controlClient
    45  		controlClient.CreateBucket(bucketName)
    46  
    47  		bucket, err := s.client.Bucket(bucketName)
    48  		c.Assert(err, IsNil)
    49  		s.bucket = bucket
    50  	}
    51  
    52  	testLogger.Println("test progress started")
    53  }
    54  
    55  // TearDownSuite runs before each test or benchmark starts running
    56  func (s *OssProgressSuite) TearDownSuite(c *C) {
    57  	// Abort multipart uploads
    58  	keyMarker := KeyMarker("")
    59  	uploadIDMarker := UploadIDMarker("")
    60  	for {
    61  		lmu, err := s.bucket.ListMultipartUploads(keyMarker, uploadIDMarker)
    62  		c.Assert(err, IsNil)
    63  		for _, upload := range lmu.Uploads {
    64  			imur := InitiateMultipartUploadResult{Bucket: bucketName, Key: upload.Key, UploadID: upload.UploadID}
    65  			err = s.bucket.AbortMultipartUpload(imur)
    66  			c.Assert(err, IsNil)
    67  		}
    68  		keyMarker = KeyMarker(lmu.NextKeyMarker)
    69  		uploadIDMarker = UploadIDMarker(lmu.NextUploadIDMarker)
    70  		if !lmu.IsTruncated {
    71  			break
    72  		}
    73  	}
    74  
    75  	// Delete objects
    76  	marker := Marker("")
    77  	for {
    78  		lor, err := s.bucket.ListObjects(marker)
    79  		c.Assert(err, IsNil)
    80  		for _, object := range lor.Objects {
    81  			err = s.bucket.DeleteObject(object.Key)
    82  			c.Assert(err, IsNil)
    83  		}
    84  		marker = Marker(lor.NextMarker)
    85  		if !lor.IsTruncated {
    86  			break
    87  		}
    88  	}
    89  
    90  	// Delete bucket
    91  	if s.cloudBoxControlClient != nil {
    92  		err := s.cloudBoxControlClient.DeleteBucket(s.bucket.BucketName)
    93  		c.Assert(err, IsNil)
    94  	} else {
    95  		err := s.client.DeleteBucket(s.bucket.BucketName)
    96  		c.Assert(err, IsNil)
    97  	}
    98  
    99  	testLogger.Println("test progress completed")
   100  }
   101  
   102  // SetUpTest runs after each test or benchmark runs
   103  func (s *OssProgressSuite) SetUpTest(c *C) {
   104  	err := removeTempFiles("../oss", ".jpg")
   105  	c.Assert(err, IsNil)
   106  
   107  	err = removeTempFiles("../oss", ".txt")
   108  	c.Assert(err, IsNil)
   109  
   110  	err = removeTempFiles("../oss", ".html")
   111  	c.Assert(err, IsNil)
   112  }
   113  
   114  // TearDownTest runs once after all tests or benchmarks have finished running
   115  func (s *OssProgressSuite) TearDownTest(c *C) {
   116  	err := removeTempFiles("../oss", ".jpg")
   117  	c.Assert(err, IsNil)
   118  
   119  	err = removeTempFiles("../oss", ".txt")
   120  	c.Assert(err, IsNil)
   121  
   122  	err = removeTempFiles("../oss", ".html")
   123  	c.Assert(err, IsNil)
   124  }
   125  
   126  // OssProgressListener is the progress listener
   127  type OssProgressListener struct {
   128  	TotalRwBytes int64
   129  }
   130  
   131  // ProgressChanged handles progress event
   132  func (listener *OssProgressListener) ProgressChanged(event *ProgressEvent) {
   133  	switch event.EventType {
   134  	case TransferStartedEvent:
   135  		testLogger.Printf("Transfer Started, ConsumedBytes: %d, TotalBytes %d.\n",
   136  			event.ConsumedBytes, event.TotalBytes)
   137  	case TransferDataEvent:
   138  		atomic.AddInt64(&listener.TotalRwBytes, event.RwBytes)
   139  		testLogger.Printf("Transfer Data, ConsumedBytes: %d, TotalBytes %d, %d%%.\n",
   140  			event.ConsumedBytes, event.TotalBytes, event.ConsumedBytes*100/event.TotalBytes)
   141  	case TransferCompletedEvent:
   142  		testLogger.Printf("Transfer Completed, ConsumedBytes: %d, TotalBytes %d.\n",
   143  			event.ConsumedBytes, event.TotalBytes)
   144  	case TransferFailedEvent:
   145  		testLogger.Printf("Transfer Failed, ConsumedBytes: %d, TotalBytes %d.\n",
   146  			event.ConsumedBytes, event.TotalBytes)
   147  	default:
   148  	}
   149  }
   150  
   151  // TestPutObject
   152  func (s *OssProgressSuite) TestPutObject(c *C) {
   153  	objectName := RandStr(8) + ".jpg"
   154  	localFile := "../sample/The Go Programming Language.html"
   155  
   156  	fileInfo, err := os.Stat(localFile)
   157  	c.Assert(err, IsNil)
   158  
   159  	// PutObject
   160  	fd, err := os.Open(localFile)
   161  	c.Assert(err, IsNil)
   162  	defer fd.Close()
   163  
   164  	progressListener := OssProgressListener{}
   165  	err = s.bucket.PutObject(objectName, fd, Progress(&progressListener))
   166  	c.Assert(err, IsNil)
   167  	c.Assert(progressListener.TotalRwBytes, Equals, fileInfo.Size())
   168  
   169  	// PutObjectFromFile
   170  	progressListener.TotalRwBytes = 0
   171  	err = s.bucket.PutObjectFromFile(objectName, localFile, Progress(&progressListener))
   172  	c.Assert(err, IsNil)
   173  	c.Assert(progressListener.TotalRwBytes, Equals, fileInfo.Size())
   174  
   175  	// DoPutObject
   176  	fd, err = os.Open(localFile)
   177  	c.Assert(err, IsNil)
   178  	defer fd.Close()
   179  
   180  	request := &PutObjectRequest{
   181  		ObjectKey: objectName,
   182  		Reader:    fd,
   183  	}
   184  
   185  	progressListener.TotalRwBytes = 0
   186  	options := []Option{Progress(&progressListener)}
   187  	_, err = s.bucket.DoPutObject(request, options)
   188  	c.Assert(err, IsNil)
   189  	c.Assert(progressListener.TotalRwBytes, Equals, fileInfo.Size())
   190  
   191  	// PutObject size is 0
   192  	progressListener.TotalRwBytes = 0
   193  	err = s.bucket.PutObject(objectName, strings.NewReader(""), Progress(&progressListener))
   194  	c.Assert(err, IsNil)
   195  	c.Assert(progressListener.TotalRwBytes, Equals, int64(0))
   196  
   197  	testLogger.Println("OssProgressSuite.TestPutObject")
   198  }
   199  
   200  // TestSignURL
   201  func (s *OssProgressSuite) SignURLTestFunc(c *C, authVersion AuthVersionType, extraHeaders []string) {
   202  	objectName := objectNamePrefix + RandStr(8)
   203  	filePath := RandLowStr(10)
   204  	content := RandStr(20)
   205  	CreateFile(filePath, content, c)
   206  
   207  	oldType := s.bucket.Client.Config.AuthVersion
   208  	oldHeaders := s.bucket.Client.Config.AdditionalHeaders
   209  	s.bucket.Client.Config.AuthVersion = authVersion
   210  	s.bucket.Client.Config.AdditionalHeaders = extraHeaders
   211  
   212  	// Sign URL for put
   213  	progressListener := OssProgressListener{}
   214  	str, err := s.bucket.SignURL(objectName, HTTPPut, 60, Progress(&progressListener))
   215  	c.Assert(err, IsNil)
   216  	if s.bucket.Client.Config.AuthVersion == AuthV1 {
   217  		c.Assert(strings.Contains(str, HTTPParamExpires+"="), Equals, true)
   218  		c.Assert(strings.Contains(str, HTTPParamAccessKeyID+"="), Equals, true)
   219  		c.Assert(strings.Contains(str, HTTPParamSignature+"="), Equals, true)
   220  	} else {
   221  		c.Assert(strings.Contains(str, HTTPParamSignatureVersion+"=OSS2"), Equals, true)
   222  		c.Assert(strings.Contains(str, HTTPParamExpiresV2+"="), Equals, true)
   223  		c.Assert(strings.Contains(str, HTTPParamAccessKeyIDV2+"="), Equals, true)
   224  		c.Assert(strings.Contains(str, HTTPParamSignatureV2+"="), Equals, true)
   225  	}
   226  
   227  	// Put object with URL
   228  	fd, err := os.Open(filePath)
   229  	c.Assert(err, IsNil)
   230  	defer fd.Close()
   231  
   232  	err = s.bucket.PutObjectWithURL(str, fd, Progress(&progressListener))
   233  	c.Assert(err, IsNil)
   234  	c.Assert(progressListener.TotalRwBytes, Equals, int64(len(content)))
   235  
   236  	// Put object from file with URL
   237  	progressListener.TotalRwBytes = 0
   238  	err = s.bucket.PutObjectFromFileWithURL(str, filePath, Progress(&progressListener))
   239  	c.Assert(err, IsNil)
   240  	c.Assert(progressListener.TotalRwBytes, Equals, int64(len(content)))
   241  
   242  	// DoPutObject
   243  	fd, err = os.Open(filePath)
   244  	c.Assert(err, IsNil)
   245  	defer fd.Close()
   246  
   247  	progressListener.TotalRwBytes = 0
   248  	options := []Option{Progress(&progressListener)}
   249  	_, err = s.bucket.DoPutObjectWithURL(str, fd, options)
   250  	c.Assert(err, IsNil)
   251  	c.Assert(progressListener.TotalRwBytes, Equals, int64(len(content)))
   252  
   253  	// Sign URL for get
   254  	str, err = s.bucket.SignURL(objectName, HTTPGet, 60, Progress(&progressListener))
   255  	c.Assert(err, IsNil)
   256  	if s.bucket.Client.Config.AuthVersion == AuthV1 {
   257  		c.Assert(strings.Contains(str, HTTPParamExpires+"="), Equals, true)
   258  		c.Assert(strings.Contains(str, HTTPParamAccessKeyID+"="), Equals, true)
   259  		c.Assert(strings.Contains(str, HTTPParamSignature+"="), Equals, true)
   260  	} else {
   261  		c.Assert(strings.Contains(str, HTTPParamSignatureVersion+"=OSS2"), Equals, true)
   262  		c.Assert(strings.Contains(str, HTTPParamExpiresV2+"="), Equals, true)
   263  		c.Assert(strings.Contains(str, HTTPParamAccessKeyIDV2+"="), Equals, true)
   264  		c.Assert(strings.Contains(str, HTTPParamSignatureV2+"="), Equals, true)
   265  	}
   266  
   267  	// Get object with URL
   268  	progressListener.TotalRwBytes = 0
   269  	body, err := s.bucket.GetObjectWithURL(str, Progress(&progressListener))
   270  	c.Assert(err, IsNil)
   271  	str, err = readBody(body)
   272  	c.Assert(err, IsNil)
   273  	c.Assert(str, Equals, content)
   274  	c.Assert(progressListener.TotalRwBytes, Equals, int64(len(content)))
   275  
   276  	// Get object to file with URL
   277  	progressListener.TotalRwBytes = 0
   278  	str, err = s.bucket.SignURL(objectName, HTTPGet, 10, Progress(&progressListener))
   279  	c.Assert(err, IsNil)
   280  
   281  	newFile := RandStr(10)
   282  	progressListener.TotalRwBytes = 0
   283  	err = s.bucket.GetObjectToFileWithURL(str, newFile, Progress(&progressListener))
   284  	c.Assert(progressListener.TotalRwBytes, Equals, int64(len(content)))
   285  	c.Assert(err, IsNil)
   286  	eq, err := compareFiles(filePath, newFile)
   287  	c.Assert(err, IsNil)
   288  	c.Assert(eq, Equals, true)
   289  
   290  	os.Remove(filePath)
   291  	os.Remove(newFile)
   292  
   293  	err = s.bucket.DeleteObject(objectName)
   294  	c.Assert(err, IsNil)
   295  
   296  	testLogger.Println("OssProgressSuite.TestSignURL")
   297  
   298  	s.bucket.Client.Config.AuthVersion = oldType
   299  	s.bucket.Client.Config.AdditionalHeaders = oldHeaders
   300  }
   301  
   302  func (s *OssProgressSuite) TestSignURL(c *C) {
   303  	s.SignURLTestFunc(c, AuthV1, []string{})
   304  	s.SignURLTestFunc(c, AuthV2, []string{})
   305  	s.SignURLTestFunc(c, AuthV2, []string{"host", "range", "user-agent"})
   306  }
   307  
   308  func (s *OssProgressSuite) TestPutObjectNegative(c *C) {
   309  	objectName := objectNamePrefix + RandStr(8)
   310  	localFile := "../sample/The Go Programming Language.html"
   311  
   312  	// Invalid endpoint
   313  	client, err := New("http://oss-cn-taikang.aliyuncs.com", accessID, accessKey)
   314  	c.Assert(err, IsNil)
   315  
   316  	bucket, err := client.Bucket(bucketName)
   317  	c.Assert(err, IsNil)
   318  
   319  	err = bucket.PutObjectFromFile(objectName, localFile, Progress(&OssProgressListener{}))
   320  	testLogger.Println(err)
   321  	c.Assert(err, NotNil)
   322  
   323  	testLogger.Println("OssProgressSuite.TestPutObjectNegative")
   324  }
   325  
   326  // TestAppendObject
   327  func (s *OssProgressSuite) TestAppendObject(c *C) {
   328  	objectName := objectNamePrefix + RandStr(8)
   329  	objectValue := RandStr(100)
   330  	var val = []byte(objectValue)
   331  	var nextPos int64
   332  	var midPos = 1 + rand.Intn(len(val)-1)
   333  
   334  	// AppendObject
   335  	progressListener := OssProgressListener{}
   336  	nextPos, err := s.bucket.AppendObject(objectName, bytes.NewReader(val[0:midPos]), nextPos, Progress(&progressListener))
   337  	c.Assert(err, IsNil)
   338  	c.Assert(progressListener.TotalRwBytes, Equals, nextPos)
   339  
   340  	// DoAppendObject
   341  	request := &AppendObjectRequest{
   342  		ObjectKey: objectName,
   343  		Reader:    bytes.NewReader(val[midPos:]),
   344  		Position:  nextPos,
   345  	}
   346  	options := []Option{Progress(&OssProgressListener{})}
   347  	_, err = s.bucket.DoAppendObject(request, options)
   348  	c.Assert(err, IsNil)
   349  
   350  	testLogger.Println("OssProgressSuite.TestAppendObject")
   351  }
   352  
   353  // TestMultipartUpload
   354  func (s *OssProgressSuite) TestMultipartUpload(c *C) {
   355  	objectName := objectNamePrefix + RandStr(8)
   356  	var fileName = "../sample/BingWallpaper-2015-11-07.jpg"
   357  
   358  	fileInfo, err := os.Stat(fileName)
   359  	c.Assert(err, IsNil)
   360  
   361  	chunks, err := SplitFileByPartNum(fileName, 3)
   362  	c.Assert(err, IsNil)
   363  	testLogger.Println("chunks:", chunks)
   364  
   365  	fd, err := os.Open(fileName)
   366  	c.Assert(err, IsNil)
   367  	defer fd.Close()
   368  
   369  	// Initiate
   370  	progressListener := OssProgressListener{}
   371  	imur, err := s.bucket.InitiateMultipartUpload(objectName)
   372  	c.Assert(err, IsNil)
   373  
   374  	// UploadPart
   375  	var parts []UploadPart
   376  	for _, chunk := range chunks {
   377  		fd.Seek(chunk.Offset, os.SEEK_SET)
   378  		part, err := s.bucket.UploadPart(imur, fd, chunk.Size, chunk.Number, Progress(&progressListener))
   379  		c.Assert(err, IsNil)
   380  		parts = append(parts, part)
   381  	}
   382  
   383  	// Complete
   384  	_, err = s.bucket.CompleteMultipartUpload(imur, parts)
   385  	c.Assert(err, IsNil)
   386  	c.Assert(progressListener.TotalRwBytes, Equals, fileInfo.Size())
   387  
   388  	err = s.bucket.DeleteObject(objectName)
   389  	c.Assert(err, IsNil)
   390  
   391  	testLogger.Println("OssProgressSuite.TestMultipartUpload")
   392  }
   393  
   394  // TestMultipartUploadFromFile
   395  func (s *OssProgressSuite) TestMultipartUploadFromFile(c *C) {
   396  	objectName := objectNamePrefix + RandStr(8)
   397  	var fileName = "../sample/BingWallpaper-2015-11-07.jpg"
   398  	fileInfo, err := os.Stat(fileName)
   399  	c.Assert(err, IsNil)
   400  
   401  	chunks, err := SplitFileByPartNum(fileName, 3)
   402  	c.Assert(err, IsNil)
   403  
   404  	// Initiate
   405  	imur, err := s.bucket.InitiateMultipartUpload(objectName)
   406  	c.Assert(err, IsNil)
   407  
   408  	// UploadPart
   409  	progressListener := OssProgressListener{}
   410  	var parts []UploadPart
   411  	for _, chunk := range chunks {
   412  		part, err := s.bucket.UploadPartFromFile(imur, fileName, chunk.Offset, chunk.Size, chunk.Number, Progress(&progressListener))
   413  		c.Assert(err, IsNil)
   414  		parts = append(parts, part)
   415  	}
   416  
   417  	// Complete
   418  	_, err = s.bucket.CompleteMultipartUpload(imur, parts)
   419  	c.Assert(err, IsNil)
   420  	c.Assert(progressListener.TotalRwBytes, Equals, fileInfo.Size())
   421  
   422  	err = s.bucket.DeleteObject(objectName)
   423  	c.Assert(err, IsNil)
   424  
   425  	testLogger.Println("OssProgressSuite.TestMultipartUploadFromFile")
   426  }
   427  
   428  // TestGetObject
   429  func (s *OssProgressSuite) TestGetObject(c *C) {
   430  	objectName := objectNamePrefix + RandStr(8)
   431  	localFile := "../sample/BingWallpaper-2015-11-07.jpg"
   432  	newFile := "newpic-progress-1.jpg"
   433  
   434  	fileInfo, err := os.Stat(localFile)
   435  	c.Assert(err, IsNil)
   436  
   437  	progressListener := OssProgressListener{}
   438  	// PutObject
   439  	err = s.bucket.PutObjectFromFile(objectName, localFile, Progress(&progressListener))
   440  	c.Assert(err, IsNil)
   441  	c.Assert(progressListener.TotalRwBytes, Equals, fileInfo.Size())
   442  
   443  	// GetObject
   444  	progressListener.TotalRwBytes = 0
   445  	body, err := s.bucket.GetObject(objectName, Progress(&progressListener))
   446  	c.Assert(err, IsNil)
   447  	_, err = ioutil.ReadAll(body)
   448  	c.Assert(err, IsNil)
   449  	body.Close()
   450  	c.Assert(progressListener.TotalRwBytes, Equals, fileInfo.Size())
   451  
   452  	// GetObjectToFile
   453  	progressListener.TotalRwBytes = 0
   454  	err = s.bucket.GetObjectToFile(objectName, newFile, Progress(&progressListener))
   455  	c.Assert(err, IsNil)
   456  	c.Assert(progressListener.TotalRwBytes, Equals, fileInfo.Size())
   457  
   458  	// DoGetObject
   459  	progressListener.TotalRwBytes = 0
   460  	request := &GetObjectRequest{objectName}
   461  	options := []Option{Progress(&progressListener)}
   462  	result, err := s.bucket.DoGetObject(request, options)
   463  	c.Assert(err, IsNil)
   464  	_, err = ioutil.ReadAll(result.Response.Body)
   465  	c.Assert(err, IsNil)
   466  	result.Response.Body.Close()
   467  	c.Assert(progressListener.TotalRwBytes, Equals, fileInfo.Size())
   468  
   469  	// GetObject with range
   470  	progressListener.TotalRwBytes = 0
   471  	body, err = s.bucket.GetObject(objectName, Range(1024, 4*1024), Progress(&progressListener))
   472  	c.Assert(err, IsNil)
   473  	text, err := ioutil.ReadAll(body)
   474  	c.Assert(err, IsNil)
   475  	body.Close()
   476  	c.Assert(progressListener.TotalRwBytes, Equals, int64(len(text)))
   477  
   478  	// PutObject size is 0
   479  	progressListener.TotalRwBytes = 0
   480  	err = s.bucket.PutObject(objectName, strings.NewReader(""), Progress(&progressListener))
   481  	c.Assert(err, IsNil)
   482  	c.Assert(progressListener.TotalRwBytes, Equals, int64(0))
   483  
   484  	// GetObject size is 0
   485  	progressListener.TotalRwBytes = 0
   486  	body, err = s.bucket.GetObject(objectName, Progress(&progressListener))
   487  	c.Assert(err, IsNil)
   488  	_, err = ioutil.ReadAll(body)
   489  	c.Assert(err, IsNil)
   490  	body.Close()
   491  	c.Assert(progressListener.TotalRwBytes, Equals, int64(0))
   492  
   493  	testLogger.Println("OssProgressSuite.TestGetObject")
   494  }
   495  
   496  // TestGetObjectNegative
   497  func (s *OssProgressSuite) TestGetObjectNegative(c *C) {
   498  	objectName := objectNamePrefix + RandStr(8)
   499  	localFile := "../sample/BingWallpaper-2015-11-07.jpg"
   500  
   501  	// PutObject
   502  	err := s.bucket.PutObjectFromFile(objectName, localFile)
   503  	c.Assert(err, IsNil)
   504  
   505  	// GetObject
   506  	body, err := s.bucket.GetObject(objectName, Progress(&OssProgressListener{}))
   507  	c.Assert(err, IsNil)
   508  
   509  	buf := make([]byte, 4*1024)
   510  	n, err := body.Read(buf)
   511  	c.Assert(err, IsNil)
   512  
   513  	//time.Sleep(70 * time.Second) TODO
   514  
   515  	// Read should fail
   516  	for err == nil {
   517  		n, err = body.Read(buf)
   518  		n += n
   519  	}
   520  	c.Assert(err, NotNil)
   521  	body.Close()
   522  
   523  	testLogger.Println("OssProgressSuite.TestGetObjectNegative")
   524  }
   525  
   526  // TestUploadFile
   527  func (s *OssProgressSuite) TestUploadFile(c *C) {
   528  	objectName := objectNamePrefix + RandStr(8)
   529  	fileName := "../sample/BingWallpaper-2015-11-07.jpg"
   530  
   531  	fileInfo, err := os.Stat(fileName)
   532  	c.Assert(err, IsNil)
   533  
   534  	progressListener := OssProgressListener{}
   535  	err = s.bucket.UploadFile(objectName, fileName, 100*1024, Routines(5), Progress(&progressListener))
   536  	c.Assert(err, IsNil)
   537  	c.Assert(progressListener.TotalRwBytes, Equals, fileInfo.Size())
   538  
   539  	progressListener.TotalRwBytes = 0
   540  	err = s.bucket.UploadFile(objectName, fileName, 100*1024, Routines(3), Checkpoint(true, objectName+".cp"), Progress(&progressListener))
   541  	c.Assert(err, IsNil)
   542  	c.Assert(progressListener.TotalRwBytes, Equals, fileInfo.Size())
   543  
   544  	testLogger.Println("OssProgressSuite.TestUploadFile")
   545  }
   546  
   547  // TestDownloadFile
   548  func (s *OssProgressSuite) TestDownloadFile(c *C) {
   549  	objectName := objectNamePrefix + RandStr(8)
   550  	fileName := "../sample/BingWallpaper-2015-11-07.jpg"
   551  	newFile := "down-new-file-progress-2.jpg"
   552  
   553  	fileInfo, err := os.Stat(fileName)
   554  	c.Assert(err, IsNil)
   555  
   556  	// Upload
   557  	err = s.bucket.UploadFile(objectName, fileName, 100*1024, Routines(3))
   558  	c.Assert(err, IsNil)
   559  
   560  	progressListener := OssProgressListener{}
   561  	err = s.bucket.DownloadFile(objectName, newFile, 100*1024, Routines(5), Progress(&progressListener))
   562  	c.Assert(err, IsNil)
   563  	c.Assert(progressListener.TotalRwBytes, Equals, fileInfo.Size())
   564  
   565  	progressListener.TotalRwBytes = 0
   566  	err = s.bucket.DownloadFile(objectName, newFile, 1024*1024, Routines(3), Progress(&progressListener))
   567  	c.Assert(err, IsNil)
   568  	c.Assert(progressListener.TotalRwBytes, Equals, fileInfo.Size())
   569  
   570  	progressListener.TotalRwBytes = 0
   571  	err = s.bucket.DownloadFile(objectName, newFile, 50*1024, Routines(3), Checkpoint(true, ""), Progress(&progressListener))
   572  	c.Assert(err, IsNil)
   573  	c.Assert(progressListener.TotalRwBytes, Equals, fileInfo.Size())
   574  
   575  	testLogger.Println("OssProgressSuite.TestDownloadFile")
   576  }
   577  
   578  // TestCopyFile
   579  func (s *OssProgressSuite) TestCopyFile(c *C) {
   580  	srcObjectName := objectNamePrefix + RandStr(8)
   581  	destObjectName := srcObjectName + "-copy"
   582  	fileName := "../sample/BingWallpaper-2015-11-07.jpg"
   583  
   584  	fileInfo, err := os.Stat(fileName)
   585  	c.Assert(err, IsNil)
   586  
   587  	// Upload
   588  	progressListener := OssProgressListener{}
   589  	err = s.bucket.UploadFile(srcObjectName, fileName, 100*1024, Routines(3), Progress(&progressListener))
   590  	c.Assert(err, IsNil)
   591  	c.Assert(progressListener.TotalRwBytes, Equals, fileInfo.Size())
   592  
   593  	progressListener.TotalRwBytes = 0
   594  	err = s.bucket.CopyFile(bucketName, srcObjectName, destObjectName, 100*1024, Routines(5), Progress(&progressListener))
   595  	c.Assert(err, IsNil)
   596  	c.Assert(progressListener.TotalRwBytes, Equals, fileInfo.Size())
   597  
   598  	progressListener.TotalRwBytes = 0
   599  	err = s.bucket.CopyFile(bucketName, srcObjectName, destObjectName, 1024*100, Routines(3), Checkpoint(true, ""), Progress(&progressListener))
   600  	c.Assert(err, IsNil)
   601  	c.Assert(progressListener.TotalRwBytes, Equals, fileInfo.Size())
   602  
   603  	testLogger.Println("OssProgressSuite.TestCopyFile")
   604  }