@@ -4500,3 +4500,140 @@ def _progress_fn(n, written, total):
45004500 self .assertEqual ("Multipart" , hresult .object_type )
45014501 self .assertEqual (src_crc64 , hresult .hash_crc64 )
45024502
4503+
4504+ class TestUploader (TestIntegration ):
4505+ def test_uploader_progress_with_single_upload (self ):
4506+ length = 100 * 1024 + 123
4507+ data = random_str (length )
4508+ object_name = OBJECTNAME_PREFIX + random_str (16 )
4509+
4510+ global bytes_added , total_bytes_transferred , total_bytes_expected , last_written
4511+ bytes_added = 0
4512+ total_bytes_transferred = 0
4513+ total_bytes_expected = 0
4514+ last_written = 0
4515+
4516+ def _progress_fn (n , written , total ):
4517+ global last_written
4518+ global bytes_added
4519+ global total_bytes_transferred
4520+ global total_bytes_expected
4521+
4522+ n = written - last_written
4523+ bytes_added += n
4524+ total_bytes_transferred = written
4525+ last_written = written
4526+ total_bytes_expected = total
4527+
4528+ uploader = self .client .uploader ()
4529+
4530+ result = uploader .upload_from (oss .PutObjectRequest (
4531+ bucket = self .bucket_name ,
4532+ key = object_name ,
4533+ progress_fn = _progress_fn
4534+ ), io .StringIO (data ),
4535+ part_size = 500 * 1024 ,
4536+ parallel_num = 5 ,
4537+ leave_parts_on_error = True
4538+ )
4539+ self .assertIsNotNone (result )
4540+ self .assertEqual (200 , result .status_code )
4541+ self .assertEqual (total_bytes_transferred , length )
4542+ self .assertEqual (total_bytes_expected , length )
4543+
4544+ hresult = self .client .head_object (oss .HeadObjectRequest (
4545+ bucket = self .bucket_name ,
4546+ key = object_name
4547+ ))
4548+ self .assertEqual ("Normal" , hresult .object_type )
4549+ self .assertEqual (length , hresult .content_length )
4550+
4551+ def test_uploader_progress_with_single_multipart (self ):
4552+ length = 500 * 1024 + 123
4553+ data = random_str (length )
4554+ object_name = OBJECTNAME_PREFIX + random_str (16 )
4555+
4556+ global bytes_added , total_bytes_transferred , total_bytes_expected , last_written
4557+ bytes_added = 0
4558+ total_bytes_transferred = 0
4559+ total_bytes_expected = 0
4560+ last_written = 0
4561+
4562+ def _progress_fn (n , written , total ):
4563+ global last_written
4564+ global bytes_added
4565+ global total_bytes_transferred
4566+ global total_bytes_expected
4567+
4568+ n = written - last_written
4569+ bytes_added += n
4570+ total_bytes_transferred = written
4571+ last_written = written
4572+ total_bytes_expected = total
4573+
4574+ uploader = self .client .uploader ()
4575+ result = uploader .upload_from (oss .PutObjectRequest (
4576+ bucket = self .bucket_name ,
4577+ key = object_name ,
4578+ progress_fn = _progress_fn
4579+ ), io .StringIO (data ),
4580+ part_size = 100 * 1024 ,
4581+ parallel_num = 1 ,
4582+ leave_parts_on_error = True ,
4583+ )
4584+ self .assertIsNotNone (result )
4585+ self .assertEqual (200 , result .status_code )
4586+ self .assertEqual (total_bytes_transferred , length )
4587+ self .assertEqual (total_bytes_expected , length )
4588+
4589+ hresult = self .client .head_object (oss .HeadObjectRequest (
4590+ bucket = self .bucket_name ,
4591+ key = object_name
4592+ ))
4593+ self .assertEqual ("Multipart" , hresult .object_type )
4594+ self .assertEqual (length , hresult .content_length )
4595+
4596+ def test_uploader_progress_with_thread_multipart (self ):
4597+ length = 500 * 1024 + 123
4598+ data = random_str (length )
4599+ object_name = OBJECTNAME_PREFIX + random_str (16 )
4600+
4601+ global bytes_added , total_bytes_transferred , total_bytes_expected , last_written
4602+ bytes_added = 0
4603+ total_bytes_transferred = 0
4604+ total_bytes_expected = 0
4605+ last_written = 0
4606+
4607+ def _progress_fn (n , written , total ):
4608+ global last_written
4609+ global bytes_added
4610+ global total_bytes_transferred
4611+ global total_bytes_expected
4612+
4613+ n = written - last_written
4614+ bytes_added += n
4615+ total_bytes_transferred = written
4616+ last_written = written
4617+ total_bytes_expected = total
4618+
4619+ uploader = self .client .uploader ()
4620+ result = uploader .upload_from (oss .PutObjectRequest (
4621+ bucket = self .bucket_name ,
4622+ key = object_name ,
4623+ progress_fn = _progress_fn
4624+ ), io .StringIO (data ),
4625+ part_size = 100 * 1024 ,
4626+ parallel_num = 3 ,
4627+ leave_parts_on_error = True ,
4628+ )
4629+ self .assertIsNotNone (result )
4630+ self .assertEqual (200 , result .status_code )
4631+ self .assertEqual (total_bytes_transferred , length )
4632+ self .assertEqual (total_bytes_expected , length )
4633+
4634+ hresult = self .client .head_object (oss .HeadObjectRequest (
4635+ bucket = self .bucket_name ,
4636+ key = object_name
4637+ ))
4638+ self .assertEqual ("Multipart" , hresult .object_type )
4639+ self .assertEqual (length , hresult .content_length )
0 commit comments