def test_lifecycle_without_versioning(self): auth = oss2.Auth(OSS_ID, OSS_SECRET) bucket_name = OSS_BUCKET + "-test-lifecycle-without-versioning" bucket = oss2.Bucket(auth, self.endpoint, bucket_name) bucket.create_bucket(oss2.BUCKET_ACL_PRIVATE) wait_meta_sync() rule1 = LifecycleRule('rule1', 'tests/', status=LifecycleRule.ENABLED, expiration=LifecycleExpiration(days=3)) rule2 = LifecycleRule( 'rule2', 'logging-', status=LifecycleRule.ENABLED, expiration=LifecycleExpiration( created_before_date=datetime.date(2020, 12, 12))) rule3 = LifecycleRule( 'rule3', 'tests1/', status=LifecycleRule.ENABLED, abort_multipart_upload=AbortMultipartUpload(days=3)) rule4 = LifecycleRule( 'rule4', 'logging1-', status=LifecycleRule.ENABLED, abort_multipart_upload=AbortMultipartUpload( created_before_date=datetime.date(2020, 12, 12))) tagging_rule = TaggingRule() tagging_rule.add('test_key1', 'test_value1') tagging_rule.add('test_key2', 'test_value2') tagging = Tagging(tagging_rule) rule5 = LifecycleRule( 'rule5', 'logging2-', status=LifecycleRule.ENABLED, storage_transitions=[ StorageTransition(days=100, storage_class=oss2.BUCKET_STORAGE_CLASS_IA), StorageTransition( days=356, storage_class=oss2.BUCKET_STORAGE_CLASS_ARCHIVE) ], tagging=tagging) lifecycle = BucketLifecycle([rule1, rule2, rule3, rule4, rule5]) bucket.put_bucket_lifecycle(lifecycle) lifecycle = bucket.get_bucket_lifecycle() self.assertEquals(5, len(lifecycle.rules)) bucket.delete_bucket()
def test_lifecycle_abort_multipart_upload_date(self): from oss2.models import LifecycleExpiration, LifecycleRule, BucketLifecycle, AbortMultipartUpload rule = LifecycleRule( random_string(10), '中文前缀/', status=LifecycleRule.ENABLED, expiration=LifecycleExpiration( created_before_date=datetime.date(2016, 12, 25))) rule.abort_multipart_upload = AbortMultipartUpload( created_before_date=datetime.date(2016, 12, 20)) lifecycle = BucketLifecycle([rule]) self.bucket.put_bucket_lifecycle(lifecycle) wait_meta_sync() result = self.bucket.get_bucket_lifecycle() self.assertEqual(1, len(result.rules)) self.assertEqual( datetime.date(2016, 12, 20), result.rules[0].abort_multipart_upload.created_before_date) self.assertTrue(result.rules[0].tagging is None) self.bucket.delete_bucket_lifecycle()
def test_lifecycle_all(self): from oss2.models import LifecycleExpiration, LifecycleRule, BucketLifecycle, AbortMultipartUpload, StorageTransition rule = LifecycleRule(random_string(10), '中文前缀/', status=LifecycleRule.ENABLED, expiration=LifecycleExpiration(days=357)) self.assertRaises(oss2.exceptions.ClientError, LifecycleExpiration, days=356, created_before_date=datetime.date(2016, 12, 25)) self.assertRaises(oss2.exceptions.ClientError, AbortMultipartUpload, days=356, created_before_date=datetime.date(2016, 12, 25)) self.assertRaises(oss2.exceptions.ClientError, StorageTransition, days=356, created_before_date=datetime.date(2016, 12, 25)) rule.abort_multipart_upload = AbortMultipartUpload(days=356) rule.storage_transitions = [StorageTransition(days=356, storage_class=oss2.BUCKET_STORAGE_CLASS_IA)] lifecycle = BucketLifecycle([rule]) self.bucket.put_bucket_lifecycle(lifecycle) result = self.bucket.get_bucket_lifecycle() self.assertEqual(1, len(result.rules)) self.assertEqual(356, result.rules[0].abort_multipart_upload.days) self.assertEqual(1, len(result.rules[0].storage_transitions)) self.assertEqual(356, result.rules[0].storage_transitions[0].days) self.bucket.delete_bucket_lifecycle()
def test_put_lifecycle_days(self, do_request): from oss2.models import (LifecycleExpiration, LifecycleRule, BucketLifecycle, AbortMultipartUpload, StorageTransition) request_text = '''PUT /?lifecycle= HTTP/1.1 Host: ming-oss-share.oss-cn-hangzhou.aliyuncs.com Accept-Encoding: identity Connection: keep-alive Content-Length: 178 date: Sat, 12 Dec 2015 00:35:39 GMT User-Agent: aliyun-sdk-python/2.0.2(Windows/7/;3.3.3) Accept: */* authorization: OSS ZCDmm7TPZKHtx77j:BdIgh0100HCI1QkZKsArQvQafzY= <LifecycleConfiguration><Rule><ID>{0}</ID><Prefix>{1}</Prefix><Status>{2}</Status>\ <Expiration><Days>{3}</Days></Expiration><AbortMultipartUpload><Days>{5}</Days></AbortMultipartUpload>\ <Transition><StorageClass>Standard</StorageClass><Days>{4}</Days></Transition></Rule></LifecycleConfiguration>''' response_text = '''HTTP/1.1 200 OK Server: AliyunOSS Date: Sat, 12 Dec 2015 00:35:39 GMT Content-Length: 0 Connection: keep-alive x-oss-request-id: 566B6BDB1BA604C27DD419B8''' req_info = unittests.common.mock_response(do_request, response_text) id = '中文ID' prefix = '中文前缀' status = 'Enabled' days = 3 rule = LifecycleRule( id, prefix, status=LifecycleRule.ENABLED, expiration=LifecycleExpiration(days=days), storage_transitions=[ StorageTransition( days=days, storage_class=oss2.BUCKET_STORAGE_CLASS_STANDARD) ], abort_multipart_upload=AbortMultipartUpload(days=days)) unittests.common.bucket().put_bucket_lifecycle(BucketLifecycle([rule])) self.assertRequest( req_info, request_text.format(id, prefix, status, days, days, days))
def test_put_lifecycle_date(self, do_request): from oss2.models import (LifecycleExpiration, LifecycleRule, BucketLifecycle, AbortMultipartUpload, StorageTransition) request_text = '''PUT /?lifecycle= HTTP/1.1 Host: ming-oss-share.oss-cn-hangzhou.aliyuncs.com Accept-Encoding: identity Connection: keep-alive Content-Length: 198 date: Sat, 12 Dec 2015 00:35:37 GMT User-Agent: aliyun-sdk-python/2.0.2(Windows/7/;3.3.3) Accept: */* authorization: OSS ZCDmm7TPZKHtx77j:45HTpSD5osRvtusf8VCkmchZZFs= <LifecycleConfiguration><Rule><ID>{0}</ID><Prefix>{1}</Prefix><Status>{2}</Status>\ <Expiration><Date>{3}</Date></Expiration><AbortMultipartUpload><CreatedBeforeDate>{5}</CreatedBeforeDate></AbortMultipartUpload>\ <Transition><StorageClass>Standard</StorageClass><CreatedBeforeDate>{4}</CreatedBeforeDate></Transition></Rule></LifecycleConfiguration>''' response_text = '''HTTP/1.1 200 OK Server: AliyunOSS Date: Sat, 12 Dec 2015 00:35:37 GMT Content-Length: 0 Connection: keep-alive x-oss-request-id: 566B6BD9B295345D15740F1F''' id = 'hello world' prefix = '中文前缀' status = 'Disabled' date = '2015-12-25T00:00:00.000Z' date1 = datetime.date(2015, 12, 25) req_info = unittests.common.mock_response(do_request, response_text) rule = LifecycleRule( id, prefix, status=LifecycleRule.DISABLED, expiration=LifecycleExpiration(date=date1), storage_transitions=[ StorageTransition( created_before_date=date1, storage_class=oss2.BUCKET_STORAGE_CLASS_STANDARD) ], abort_multipart_upload=AbortMultipartUpload( created_before_date=date1)) unittests.common.bucket().put_bucket_lifecycle(BucketLifecycle([rule])) self.assertRequest( req_info, request_text.format(id, prefix, status, date, date, date))
def test_lifecycle_all_without_object_expiration(self): from oss2.models import LifecycleRule, BucketLifecycle, AbortMultipartUpload, StorageTransition rule = LifecycleRule(random_string(10), '中文前缀/', status=LifecycleRule.ENABLED) rule.abort_multipart_upload = AbortMultipartUpload(days=356) rule.storage_transitions = [StorageTransition(days=356, storage_class=oss2.BUCKET_STORAGE_CLASS_IA)] lifecycle = BucketLifecycle([rule]) self.bucket.put_bucket_lifecycle(lifecycle) wait_meta_sync() result = self.bucket.get_bucket_lifecycle() self.assertEqual(1, len(result.rules)) self.assertEqual(356, result.rules[0].abort_multipart_upload.days) self.assertEqual(1, len(result.rules[0].storage_transitions)) self.assertEqual(356, result.rules[0].storage_transitions[0].days) self.bucket.delete_bucket_lifecycle()
def test_lifecycle_abort_multipart_upload_days(self): from oss2.models import LifecycleExpiration, LifecycleRule, BucketLifecycle, AbortMultipartUpload rule = LifecycleRule( random_string(10), '中文前缀/', status=LifecycleRule.ENABLED, expiration=LifecycleExpiration( created_before_date=datetime.date(2016, 12, 25))) rule.abort_multipart_upload = AbortMultipartUpload(days=356) lifecycle = BucketLifecycle([rule]) self.bucket.put_bucket_lifecycle(lifecycle) self.retry_assert(lambda: self.same_lifecycle(rule, self.bucket)) result = self.bucket.get_bucket_lifecycle() self.assertEqual(1, len(result.rules)) self.assertEqual(356, result.rules[0].abort_multipart_upload.days) self.bucket.delete_bucket_lifecycle()