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_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_lifecycle_object_tagging_exceptions_wrong_key(self): from oss2.models import LifecycleExpiration, LifecycleRule, BucketLifecycle, StorageTransition, Tagging, TaggingRule rule = LifecycleRule( random_string(10), '中文前缀/', status=LifecycleRule.ENABLED, expiration=LifecycleExpiration( created_before_date=datetime.date(2016, 12, 25))) rule.storage_transitions = [ StorageTransition(created_before_date=datetime.date(2016, 12, 20), storage_class=oss2.BUCKET_STORAGE_CLASS_IA) ] tagging = Tagging() tagging.tag_set.tagging_rule[129 * 'a'] = 'test' rule.tagging = tagging lifecycle = BucketLifecycle([rule]) try: # do not return error,but the lifecycle rule doesn't take effect result = self.bucket.put_bucket_lifecycle(lifecycle) except oss2.exceptions.OssError: self.assertFalse( True, "put lifecycle with tagging should fail ,but success") del tagging.tag_set.tagging_rule[129 * 'a'] tagging.tag_set.tagging_rule['%&'] = 'test' lifecycle.rules[0].tagging = tagging try: # do not return error,but the lifecycle rule doesn't take effect result = self.bucket.put_bucket_lifecycle(lifecycle) self.assertFalse( True, "put lifecycle with tagging should fail ,but success") except oss2.exceptions.OssError: pass
def test_lifecycle_storage_transitions_date(self): from oss2.models import LifecycleExpiration, LifecycleRule, BucketLifecycle, StorageTransition rule = LifecycleRule(random_string(10), '中文前缀/', status=LifecycleRule.ENABLED, expiration=LifecycleExpiration(created_before_date=datetime.date(2016, 12, 25))) rule.storage_transitions = [StorageTransition(created_before_date=datetime.date(2016, 12, 20), 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(1, len(result.rules[0].storage_transitions)) self.assertEqual(datetime.date(2016, 12, 20), result.rules[0].storage_transitions[0].created_before_date) self.assertTrue(result.rules[0].tagging is None) self.bucket.delete_bucket_lifecycle()
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(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_lifecycle_storage_transitions_days(self): from oss2.models import LifecycleExpiration, LifecycleRule, BucketLifecycle, StorageTransition rule = LifecycleRule(random_string(10), '中文前缀/', status=LifecycleRule.ENABLED, expiration=LifecycleExpiration(days=357)) 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(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_object_tagging(self): from oss2.models import LifecycleExpiration, LifecycleRule, BucketLifecycle, StorageTransition, Tagging, TaggingRule rule = LifecycleRule( random_string(10), 'aaaaaaaaaaa/', status=LifecycleRule.ENABLED, expiration=LifecycleExpiration( created_before_date=datetime.date(2016, 12, 25))) rule.storage_transitions = [ StorageTransition(created_before_date=datetime.date(2016, 12, 20), storage_class=oss2.BUCKET_STORAGE_CLASS_IA) ] tagging_rule = TaggingRule() tagging_rule.add('test_key', 'test_value') tagging = Tagging(tagging_rule) rule.tagging = tagging 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(1, len(result.rules[0].storage_transitions)) self.assertEqual( datetime.date(2016, 12, 20), result.rules[0].storage_transitions[0].created_before_date) self.assertEqual(1, result.rules[0].tagging.tag_set.len()) self.assertEqual( 'test_value', result.rules[0].tagging.tag_set.tagging_rule['test_key']) self.bucket.delete_bucket_lifecycle()