Пример #1
0
    def test_batch_delete_same_object_multi_version(self):

        from oss2.models import BucketVersioningConfig
        from oss2.models import BatchDeleteObjectVersion
        from oss2.models import BatchDeleteObjectVersionList

        auth = oss2.Auth(OSS_ID, OSS_SECRET)
        bucket_name = OSS_BUCKET + "-test-batch-delete-version"
        bucket = oss2.Bucket(auth, self.endpoint, bucket_name)

        bucket.create_bucket(oss2.BUCKET_ACL_PRIVATE)

        wait_meta_sync()

        config = BucketVersioningConfig()
        config.status = 'Enabled'

        result = bucket.put_bucket_versioning(config)

        wait_meta_sync()

        result = bucket.get_bucket_info()

        self.assertEqual(int(result.status)/100, 2)
        self.assertEqual(result.bucket_encryption_rule.sse_algorithm, None)
        self.assertEqual(result.versioning_status, "Enabled")
        
        # put version 1
        result = bucket.put_object("test", "test1")
        self.assertEqual(int(result.status)/100, 2)
        self.assertTrue(result.versionid != "")
        versionid1 = result.versionid

        # put version 2
        result = bucket.put_object("test", "test2")
        self.assertEqual(int(result.status)/100, 2)
        self.assertTrue(result.versionid != "")
        versionid2 = result.versionid

        version_list = BatchDeleteObjectVersionList()
        version_list.append(BatchDeleteObjectVersion(key="test", versionid=versionid1))
        version_list.append(BatchDeleteObjectVersion(key="test", versionid=versionid2))

        self.assertTrue(version_list.len(), 2)

        result = bucket.delete_object_versions(version_list)

        self.assertTrue(len(result.delete_versions) == 2)
        self.assertTrue(result.delete_versions[0].versionid == versionid1 
                or result.delete_versions[0].versionid == versionid2)
        self.assertTrue(result.delete_versions[1].versionid == versionid1 
                or result.delete_versions[1].versionid == versionid2)

        result = bucket.delete_object_versions(version_list)

        try:
            bucket.delete_bucket()
        except:
            self.assertFalse(True, "should not get a exception")
Пример #2
0
    def test_upload_part_copy_with_versioning(self):

        from oss2.models import BucketVersioningConfig
        from oss2.models import BatchDeleteObjectVersion
        from oss2.models import BatchDeleteObjectVersionList

        auth = oss2.Auth(OSS_ID, OSS_SECRET)
        bucket_name = OSS_BUCKET + "-test-upload-part-copy-with-versioning"
        bucket = oss2.Bucket(auth, OSS_ENDPOINT, bucket_name)

        bucket.create_bucket(oss2.BUCKET_ACL_PRIVATE)

        wait_meta_sync()

        config = BucketVersioningConfig()
        config.status = 'Enabled'

        result = bucket.put_bucket_versioning(config)

        wait_meta_sync()

        result = bucket.get_bucket_info()

        self.assertEqual(int(result.status)/100, 2)
        self.assertEqual(result.bucket_encryption_rule.sse_algorithm, None)
        self.assertEqual(result.versioning_status, "Enabled")

        src_object = self.random_key()
        dst_object = self.random_key()

        content = random_bytes(200 * 1024)
        content2 = random_bytes(200 * 1024)

        # 上传源文件 version1
        put_result1 = bucket.put_object(src_object, content)
        self.assertTrue(put_result1.versionid is not None)
        versionid1 = put_result1.versionid

        # 上传源文件 version2
        put_result2 = bucket.put_object(src_object, content2)
        self.assertTrue(put_result2.versionid is not None)
        versionid2 = put_result2.versionid

        # part copy到目标文件
        parts = []
        upload_id = bucket.init_multipart_upload(dst_object).upload_id

        result = bucket.upload_part_copy(bucket_name, src_object,
                                              (0, 100 * 1024 - 1), dst_object, upload_id, 1)
        parts.append(oss2.models.PartInfo(1, result.etag))

        result = bucket.upload_part_copy(bucket_name, src_object,
                        (100*1024, None), dst_object, upload_id, 2, params={'versionId': versionid1})

        parts.append(oss2.models.PartInfo(2, result.etag))

        complete_result = bucket.complete_multipart_upload(dst_object, upload_id, parts)

        # 验证
        content_got = bucket.get_object(dst_object).read()
        self.assertEqual(len(content_got), len(content))
        self.assertTrue(content_got != content)

        version_list = BatchDeleteObjectVersionList()
        version_list.append(BatchDeleteObjectVersion(key=src_object, versionid=versionid1))
        version_list.append(BatchDeleteObjectVersion(key=src_object, versionid=versionid2))
        version_list.append(BatchDeleteObjectVersion(key=dst_object, versionid=complete_result.versionid))

        self.assertTrue(version_list.len(), 3)

        result = bucket.delete_object_versions(version_list)

        try:
            bucket.delete_bucket()
        except:
            self.assertFalse(True, "should not get a exception")
Пример #3
0
    def test_copy_object_with_version(self):

        from oss2.models import BucketVersioningConfig
        from oss2.models import BatchDeleteObjectVersion
        from oss2.models import BatchDeleteObjectVersionList

        auth = oss2.Auth(OSS_ID, OSS_SECRET)
        bucket_name = OSS_BUCKET + "-test-copy-object-version"
        bucket = oss2.Bucket(auth, self.endpoint, bucket_name)

        bucket.create_bucket(oss2.BUCKET_ACL_PRIVATE)

        wait_meta_sync()

        config = BucketVersioningConfig()
        config.status = 'Enabled'

        result = bucket.put_bucket_versioning(config)

        wait_meta_sync()

        result = bucket.get_bucket_info()

        self.assertEqual(int(result.status) / 100, 2)
        self.assertEqual(result.bucket_encryption_rule.sse_algorithm, None)
        self.assertEqual(result.versioning_status, "Enabled")

        # put "test" version 1
        result = bucket.put_object("test", "test1")
        self.assertEqual(int(result.status) / 100, 2)
        self.assertTrue(result.versionid != "")
        versionid1 = result.versionid

        # put "test" version 2
        result = bucket.put_object("test", "test2")
        self.assertEqual(int(result.status) / 100, 2)
        self.assertTrue(result.versionid != "")
        versionid2 = result.versionid

        try:
            result_exception = bucket.copy_object(bucket_name,
                                                  "test",
                                                  "test_copy_wrong",
                                                  params={"versionId": None})
            self.assertFalse(True, "should get a exception")
        except:
            pass

        try:
            result_exception = bucket.copy_object(bucket_name,
                                                  "test",
                                                  "test_copy_wrong",
                                                  params={"versionId": ''})
            self.assertFalse(True, "should get a exception")
        except:
            pass

        try:
            result_exception = bucket.copy_object(
                bucket_name,
                "test",
                "test_copy_wrong",
                params={"versionId": 'NotExistVersionID'})
            self.assertFalse(True, "should get a exception")
        except:
            pass

        result = bucket.copy_object(bucket_name,
                                    "test",
                                    "test_copy",
                                    params={'versionId': versionid1})

        self.assertEqual(int(result.status) / 100, 2)
        self.assertTrue(result.versionid != "")
        copy_versionid = result.versionid

        version_list = BatchDeleteObjectVersionList()
        version_list.append(
            BatchDeleteObjectVersion(key="test", versionid=versionid1))
        version_list.append(
            BatchDeleteObjectVersion(key="test", versionid=versionid2))
        version_list.append(
            BatchDeleteObjectVersion(key="test_copy",
                                     versionid=copy_versionid))

        self.assertTrue(version_list.len(), 3)

        result = bucket.delete_object_versions(version_list)

        try:
            bucket.delete_bucket()
        except:
            self.assertFalse(True, "should not get a exception")
Пример #4
0
    def test_head_object_with_version(self):

        from oss2.models import BucketVersioningConfig
        from oss2.models import BatchDeleteObjectVersion
        from oss2.models import BatchDeleteObjectVersionList

        auth = oss2.Auth(OSS_ID, OSS_SECRET)
        bucket_name = OSS_BUCKET + "-test-head-object-version"
        bucket = oss2.Bucket(auth, self.endpoint, bucket_name)

        bucket.create_bucket(oss2.BUCKET_ACL_PRIVATE)

        wait_meta_sync()

        # put "test" version 1
        result = bucket.put_object("test_no_version", "test")
        self.assertEqual(int(result.status) / 100, 2)
        self.assertTrue(result.versionid is None)

        try:
            result_exception = bucket.head_object(
                "test_no_version", params={"versionId": "IllegalVersion"})
            self.assertFalse(True, "should get a exception")
        except:
            pass

        bucket.delete_object("test_no_version")

        config = BucketVersioningConfig()
        config.status = 'Enabled'

        result = bucket.put_bucket_versioning(config)

        wait_meta_sync()

        result = bucket.get_bucket_info()

        self.assertEqual(int(result.status) / 100, 2)
        self.assertEqual(result.bucket_encryption_rule.sse_algorithm, None)
        self.assertEqual(result.versioning_status, "Enabled")

        # put "test" version 1
        result = bucket.put_object("test", "test1")
        self.assertEqual(int(result.status) / 100, 2)
        self.assertTrue(result.versionid != "")
        versionid1 = result.versionid

        # put "test" version 2
        headers = {}
        headers['x-oss-storage-class'] = oss2.BUCKET_STORAGE_CLASS_ARCHIVE
        result = bucket.put_object("test", "test2", headers=headers)
        self.assertEqual(int(result.status) / 100, 2)
        self.assertTrue(result.versionid != "")
        versionid2 = result.versionid

        try:
            result_exception = bucket.head_object("test",
                                                  params={"versionId": None})
            self.assertFalse(True, "should get a exception")
        except:
            pass

        try:
            result_normal = bucket.head_object("test",
                                               params={"versionId": ''})
            self.assertFalse(True, "should get a exception")
        except:
            pass

        try:
            result_exception = bucket.head_object(
                "test_no_version", params={"versionId": "IllegalVersion"})
            self.assertFalse(True, "should get a exception")
        except:
            pass

        try:
            result_exception = bucket.head_object(
                "test",
                params={
                    "versionId":
                    "CAEQJhiBgIDVmYrr1RYiIGE5ZmUxMjViZDIwYjQwY2I5ODA1YWIxNmIyNDNjYjk4"
                })
            self.assertFalse(True, "should get a exception")
        except:
            pass

        result1 = bucket.head_object("test", params={"versionId": versionid1})

        result2 = bucket.head_object("test", params={"versionId": versionid2})

        result3 = bucket.head_object("test")
        self.assertEqual(result2.versionid, result3.versionid)

        self.assertEqual(result1.object_type, result2.object_type)
        self.assertEqual(result1.content_type, result2.content_type)
        self.assertEqual(result1.content_length, result2.content_length)
        self.assertTrue(result1.etag != result2.etag)

        delete_result = bucket.delete_object("test")
        delete_marker_versionid = delete_result.versionid

        try:
            result3 = bucket.head_object(
                "test", params={'versionId': delete_marker_versionid})
            self.assertFalse(True, "should get a exception, but not")
        except:
            pass

        version_list = BatchDeleteObjectVersionList()
        version_list.append(
            BatchDeleteObjectVersion(key="test", versionid=versionid1))
        version_list.append(
            BatchDeleteObjectVersion(key="test", versionid=versionid2))
        version_list.append(
            BatchDeleteObjectVersion(key="test",
                                     versionid=delete_marker_versionid))

        self.assertTrue(version_list.len(), 3)

        result = bucket.delete_object_versions(version_list)

        try:
            bucket.delete_bucket()
        except:
            self.assertFalse(True, "should not get a exception")
Пример #5
0
    def test_object_acl_with_version(self):

        from oss2.models import BucketVersioningConfig
        from oss2.models import BatchDeleteObjectVersion
        from oss2.models import BatchDeleteObjectVersionList

        auth = oss2.Auth(OSS_ID, OSS_SECRET)
        bucket_name = OSS_BUCKET + "-test-object-acl-version"
        bucket = oss2.Bucket(auth, self.endpoint, bucket_name)

        bucket.create_bucket(oss2.BUCKET_ACL_PRIVATE)

        wait_meta_sync()

        # put "test"
        result = bucket.put_object("test_no_version", "test1")
        self.assertEqual(int(result.status) / 100, 2)
        self.assertTrue(result.versionid is None)

        result = bucket.get_object_acl("test_no_version")

        bucket.delete_object("test_no_version")

        config = BucketVersioningConfig()
        config.status = 'Enabled'

        result = bucket.put_bucket_versioning(config)

        wait_meta_sync()

        result = bucket.get_bucket_info()

        self.assertEqual(int(result.status) / 100, 2)
        self.assertEqual(result.bucket_encryption_rule.sse_algorithm, None)
        self.assertEqual(result.versioning_status, "Enabled")

        # put "test" version 1
        result = bucket.put_object("test", "test1")
        self.assertEqual(int(result.status) / 100, 2)
        self.assertTrue(result.versionid != "")
        versionid1 = result.versionid

        # put "test" version 2
        result = bucket.put_object("test", "test2")
        self.assertEqual(int(result.status) / 100, 2)
        self.assertTrue(result.versionid != "")
        versionid2 = result.versionid

        try:
            result_exception = bucket.put_object_acl(
                "test",
                oss2.OBJECT_ACL_DEFAULT,
                params={'versionId': 'IllegalVersion'})
            self.assertFalse(True, "should get a exception")
        except:
            pass

        try:
            result_exception = bucket.put_object_acl("test",
                                                     oss2.OBJECT_ACL_DEFAULT,
                                                     params={'versionId': ''})
            self.assertFalse(True, "should get a exception")
        except:
            pass

        try:
            result_exception = bucket.get_object_acl(
                "test", params={'versionId': 'IllegalVersion'})
            self.assertFalse(True, "should get a exception")
        except:
            pass

        try:
            result_exception = bucket.get_object_acl("test",
                                                     params={'versionId': ''})
            self.assertFalse(True, "should get a exception")
        except:
            pass

        result = bucket.get_object_acl("test",
                                       params={"versionId": versionid2})
        self.assertEqual(result.acl, oss2.OBJECT_ACL_DEFAULT)

        result = bucket.put_object_acl("test",
                                       oss2.OBJECT_ACL_PUBLIC_READ,
                                       params={"versionId": versionid2})
        self.assertEqual(int(result.status) / 100, 2)

        result = bucket.get_object_acl("test",
                                       params={"versionId": versionid2})
        self.assertEqual(result.acl, oss2.OBJECT_ACL_PUBLIC_READ)

        version_list = BatchDeleteObjectVersionList()
        version_list.append(
            BatchDeleteObjectVersion(key="test", versionid=versionid1))
        version_list.append(
            BatchDeleteObjectVersion(key="test", versionid=versionid2))

        self.assertTrue(version_list.len(), 2)

        result = bucket.delete_object_versions(version_list)

        try:
            bucket.delete_bucket()
        except:
            self.assertFalse(True, "should not get a exception")