suyuan/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientObjectVersioningTe...

611 lines
28 KiB
PHP
Raw Normal View History

2023-10-14 13:36:39 +08:00
<?php
namespace OSS\Tests;
use OSS\Core\OssException;
use OSS\OssClient;
use OSS\Model\TaggingConfig;
use OSS\Model\Tag;
use OSS\Model\DeleteObjectInfo;
use OSS\Core\OssUtil;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestOssClientBase.php';
class OssClientObjectVersioningTest extends TestOssClientBase
{
public function testObjectBasic()
{
$object = 'object';
$content1 = 'hello';
$content2 = 'hello world';
$ret1 = $this->ossClient->putObject($this->bucket, $object, $content1, array(OssClient::OSS_HEADERS => array('x-oss-object-acl' => 'public-read', 'x-oss-tagging' => 'key1=value1')));
$ret2 = $this->ossClient->putObject($this->bucket, $object, $content2, array(OssClient::OSS_HEADERS => array('x-oss-object-acl' => 'private', 'x-oss-tagging' => 'key2=value2')));
$this->assertTrue(isset($ret1[OssClient::OSS_HEADER_VERSION_ID]));
$this->assertTrue(isset($ret2[OssClient::OSS_HEADER_VERSION_ID]));
$versionId1 = $ret1[OssClient::OSS_HEADER_VERSION_ID];
$versionId2 = $ret2[OssClient::OSS_HEADER_VERSION_ID];
//get object
$res = $this->ossClient->getObject($this->bucket, $object);
$res1 = $this->ossClient->getObject($this->bucket, $object, array(OssClient::OSS_VERSION_ID => $versionId1));
$res2 = $this->ossClient->getObject($this->bucket, $object, array(OssClient::OSS_VERSION_ID => $versionId2));
$this->assertEquals($content1, $res1);
$this->assertEquals($content2, $res2);
$this->assertEquals($content2, $res);
//meta
$headers = $this->ossClient->getObjectMeta($this->bucket, $object);
$headers1 = $this->ossClient->getObjectMeta($this->bucket, $object, array(OssClient::OSS_VERSION_ID => $versionId1));
$headers2 = $this->ossClient->getObjectMeta($this->bucket, $object, array(OssClient::OSS_VERSION_ID => $versionId2));
$this->assertTrue(isset($headers[OssClient::OSS_HEADER_VERSION_ID]));
$this->assertTrue(isset($headers1[OssClient::OSS_HEADER_VERSION_ID]));
$this->assertTrue(isset($headers2[OssClient::OSS_HEADER_VERSION_ID]));
$this->assertEquals($versionId1, $headers1[OssClient::OSS_HEADER_VERSION_ID]);
$this->assertEquals($versionId2, $headers2[OssClient::OSS_HEADER_VERSION_ID]);
$this->assertEquals($versionId2, $headers[OssClient::OSS_HEADER_VERSION_ID]);
$sheaders = $this->ossClient->getSimplifiedObjectMeta($this->bucket, $object);
$sheaders1 = $this->ossClient->getSimplifiedObjectMeta($this->bucket, $object, array(OssClient::OSS_VERSION_ID => $versionId1));
$sheaders2 = $this->ossClient->getSimplifiedObjectMeta($this->bucket, $object, array(OssClient::OSS_VERSION_ID => $versionId2));
$this->assertTrue(isset($sheaders[OssClient::OSS_HEADER_VERSION_ID]));
$this->assertTrue(isset($sheaders1[OssClient::OSS_HEADER_VERSION_ID]));
$this->assertTrue(isset($sheaders2[OssClient::OSS_HEADER_VERSION_ID]));
$this->assertEquals($versionId1, $sheaders1[OssClient::OSS_HEADER_VERSION_ID]);
$this->assertEquals($versionId2, $sheaders2[OssClient::OSS_HEADER_VERSION_ID]);
$this->assertEquals($versionId2, $sheaders[OssClient::OSS_HEADER_VERSION_ID]);
//acl
$acl = $this->ossClient->getObjectAcl($this->bucket, $object);
$acl1 = $this->ossClient->getObjectAcl($this->bucket, $object, array(OssClient::OSS_VERSION_ID => $versionId1));
$acl2 = $this->ossClient->getObjectAcl($this->bucket, $object, array(OssClient::OSS_VERSION_ID => $versionId2));
$this->assertEquals('public-read', $acl1);
$this->assertEquals('private', $acl2);
$this->assertEquals('private', $acl);
$this->ossClient->putObjectAcl($this->bucket, $object, 'public-read-write', array(OssClient::OSS_VERSION_ID => $versionId1));
$acl = $this->ossClient->getObjectAcl($this->bucket, $object);
$acl1 = $this->ossClient->getObjectAcl($this->bucket, $object, array(OssClient::OSS_VERSION_ID => $versionId1));
$this->assertEquals('public-read-write', $acl1);
$this->assertEquals('private', $acl);
//tagging
$tag = $this->ossClient->getObjectTagging($this->bucket, $object);
$tag1 = $this->ossClient->getObjectTagging($this->bucket, $object, array(OssClient::OSS_VERSION_ID => $versionId1));
$tag2 = $this->ossClient->getObjectTagging($this->bucket, $object, array(OssClient::OSS_VERSION_ID => $versionId2));
$this->assertEquals(1, count($tag1->getTags()));
$this->assertEquals("key1", $tag1->getTags()[0]->getKey());
$this->assertEquals("value1", $tag1->getTags()[0]->getValue());
$this->assertEquals(1, count($tag2->getTags()));
$this->assertEquals("key2", $tag2->getTags()[0]->getKey());
$this->assertEquals("value2", $tag2->getTags()[0]->getValue());
$this->assertEquals(1, count($tag->getTags()));
$this->assertEquals("key2", $tag->getTags()[0]->getKey());
$this->assertEquals("value2", $tag->getTags()[0]->getValue());
$config = new TaggingConfig();
$config->addTag(new Tag("key11", "value11"));
$this->ossClient->putObjectTagging($this->bucket, $object, $config, array(OssClient::OSS_VERSION_ID => $versionId1));
$tag = $this->ossClient->getObjectTagging($this->bucket, $object);
$tag1 = $this->ossClient->getObjectTagging($this->bucket, $object, array(OssClient::OSS_VERSION_ID => $versionId1));
$this->assertEquals(1, count($tag1->getTags()));
$this->assertEquals("key11", $tag1->getTags()[0]->getKey());
$this->assertEquals("value11", $tag1->getTags()[0]->getValue());
$this->assertEquals(1, count($tag->getTags()));
$this->assertEquals("key2", $tag->getTags()[0]->getKey());
$this->assertEquals("value2", $tag->getTags()[0]->getValue());
$this->ossClient->deleteObjectTagging($this->bucket, $object, array(OssClient::OSS_VERSION_ID => $versionId1));
$tag = $this->ossClient->getObjectTagging($this->bucket, $object);
$tag1 = $this->ossClient->getObjectTagging($this->bucket, $object, array(OssClient::OSS_VERSION_ID => $versionId1));
$this->assertEquals(0, count($tag1->getTags()));
$this->assertEquals(1, count($tag->getTags()));
$this->assertEquals("key2", $tag->getTags()[0]->getKey());
$this->assertEquals("value2", $tag->getTags()[0]->getValue());
//delete
$dret = $this->ossClient->deleteObject($this->bucket, $object);
$this->assertTrue(isset($dret['x-oss-delete-marker']));
$this->assertTrue(isset($dret['x-oss-version-id']));
$this->assertEquals("true", $dret['x-oss-delete-marker']);
$this->assertFalse($this->ossClient->doesObjectExist($this->bucket, $object));
$this->assertTrue($this->ossClient->doesObjectExist($this->bucket, $object, array(OssClient::OSS_VERSION_ID => $versionId1)));
$this->assertTrue($this->ossClient->doesObjectExist($this->bucket, $object, array(OssClient::OSS_VERSION_ID => $versionId2)));
$dret1 = $this->ossClient->deleteObject($this->bucket, $object, array(OssClient::OSS_VERSION_ID => $versionId1));
$this->assertFalse(isset($dret1['x-oss-delete-marker']));
$this->assertTrue(isset($dret1['x-oss-version-id']));
$this->assertEquals($versionId1, $dret1['x-oss-version-id']);
$this->assertFalse($this->ossClient->doesObjectExist($this->bucket, $object, array(OssClient::OSS_VERSION_ID => $versionId1)));
$dret_ = $this->ossClient->deleteObject($this->bucket, $object, array(OssClient::OSS_VERSION_ID => $dret['x-oss-version-id']));
$this->assertTrue(isset($dret_['x-oss-delete-marker']));
$this->assertTrue(isset($dret_['x-oss-version-id']));
$this->assertEquals($dret['x-oss-version-id'], $dret_['x-oss-version-id']);
$this->assertTrue($this->ossClient->doesObjectExist($this->bucket, $object));
}
public function testObjectSymlink()
{
$object1 = 'object-target-1';
$object2 = 'object-target-2';
$symlink = 'object-symlink';
$content1 = 'hello';
$content2 = 'hello world';
$ret1 = $this->ossClient->putObject($this->bucket, $object1, $content1);
$sym1 = $this->ossClient->putSymlink($this->bucket, $symlink, $object1);
$ret2 = $this->ossClient->putObject($this->bucket, $object2, $content2);
$sym2 = $this->ossClient->putSymlink($this->bucket, $symlink, $object2);
$this->assertTrue(isset($ret1[OssClient::OSS_HEADER_VERSION_ID]));
$this->assertTrue(isset($ret2[OssClient::OSS_HEADER_VERSION_ID]));
$this->assertTrue(isset($sym1[OssClient::OSS_HEADER_VERSION_ID]));
$this->assertTrue(isset($sym2[OssClient::OSS_HEADER_VERSION_ID]));
$versionId1 = $ret1[OssClient::OSS_HEADER_VERSION_ID];
$versionId2 = $ret2[OssClient::OSS_HEADER_VERSION_ID];
$sym_versionId1 = $sym1[OssClient::OSS_HEADER_VERSION_ID];
$sym_versionId2 = $sym2[OssClient::OSS_HEADER_VERSION_ID];
$sym_ret = $this->ossClient->getSymlink($this->bucket, $symlink);
$sym_ret1 = $this->ossClient->getSymlink($this->bucket, $symlink, array(OssClient::OSS_VERSION_ID => $sym_versionId1));
$sym_ret2 = $this->ossClient->getSymlink($this->bucket, $symlink, array(OssClient::OSS_VERSION_ID => $sym_versionId2));
$this->assertTrue(isset($sym_ret['x-oss-version-id']));
$this->assertTrue(isset($sym_ret1['x-oss-version-id']));
$this->assertTrue(isset($sym_ret2['x-oss-version-id']));
$this->assertEquals($sym_versionId1, $sym_ret1['x-oss-version-id']);
$this->assertEquals($sym_versionId2, $sym_ret2['x-oss-version-id']);
$this->assertEquals($sym_versionId2, $sym_ret['x-oss-version-id']);
$res = $this->ossClient->getObject($this->bucket, $symlink);
$res1 = $this->ossClient->getObject($this->bucket, $symlink, array(OssClient::OSS_VERSION_ID => $sym_versionId1));
$res2 = $this->ossClient->getObject($this->bucket, $symlink, array(OssClient::OSS_VERSION_ID => $sym_versionId2));
$this->assertEquals($content1, $res1);
$this->assertEquals($content2, $res2);
$this->assertEquals($content2, $res);
}
public function testObjectCopy()
{
$object = 'copy-= +object';
$content1 = 'hello';
$content2 = 'hello world';
$to_bucket = $this->bucket;
$to_object = $object . '.copy';
$to_object1 = $object . '.copy1';
$to_object2 = $object . '.copy2';
$ret1 = $this->ossClient->putObject($this->bucket, $object, $content1);
$ret2 = $this->ossClient->putObject($this->bucket, $object, $content2);
$versionId1 = $ret1[OssClient::OSS_HEADER_VERSION_ID];
$versionId2 = $ret2[OssClient::OSS_HEADER_VERSION_ID];
$cret = $this->ossClient->copyObject($this->bucket, $object, $to_bucket, $to_object);
$cret1 = $this->ossClient->copyObject($this->bucket, $object, $to_bucket, $to_object1, array(OssClient::OSS_VERSION_ID => $versionId1));
$cret2 = $this->ossClient->copyObject($this->bucket, $object, $to_bucket, $to_object2, array(OssClient::OSS_VERSION_ID => $versionId2));
$this->assertFalse(empty($cret1));
$this->assertEquals(strlen("2016-11-21T03:46:58.000Z"), strlen($cret1[0]));
$this->assertEquals(trim($ret1['etag'], '"'), trim($cret1[1], '"'));
$this->assertTrue(isset($cret1['x-oss-version-id']));
$this->assertEquals($versionId1, $cret1['x-oss-copy-source-version-id']);
$this->assertFalse(empty($cret2));
$this->assertEquals(strlen("2016-11-21T03:46:58.000Z"), strlen($cret2[0]));
$this->assertEquals(trim($ret2['etag'], '"'), trim($cret2[1], '"'));
$this->assertTrue(isset($cret2['x-oss-version-id']));
$this->assertEquals($versionId2, $cret2['x-oss-copy-source-version-id']);
$this->assertFalse(empty($cret));
$this->assertEquals(strlen("2016-11-21T03:46:58.000Z"), strlen($cret[0]));
$this->assertEquals(trim($ret2['etag'], '"'), trim($cret[1], '"'));
$this->assertTrue(isset($cret2['x-oss-version-id']));
$this->assertEquals($versionId2, $cret['x-oss-copy-source-version-id']);
$res = $this->ossClient->getObject($this->bucket, $to_object);
$res1 = $this->ossClient->getObject($this->bucket, $to_object1);
$res2 = $this->ossClient->getObject($this->bucket, $to_object2);
$this->assertEquals($content1, $res1);
$this->assertEquals($content2, $res2);
$this->assertEquals($content2, $res);
}
public function testObjectRestore()
{
$object = 'retore-object';
$content1 = 'hello';
$content2 = 'hello world';
$ret1 = $this->ossClient->putObject($this->bucket, $object, $content1, array(OssClient::OSS_HEADERS => array('x-oss-storage-class' => 'Archive')));
$ret2 = $this->ossClient->putObject($this->bucket, $object, $content2);
$versionId1 = $ret1[OssClient::OSS_HEADER_VERSION_ID];
$versionId2 = $ret2[OssClient::OSS_HEADER_VERSION_ID];
try{
$this->ossClient->getObject($this->bucket, $object, array(OssClient::OSS_VERSION_ID => $versionId1));
$this->assertTrue(false);
}catch (OssException $e){
$this->assertEquals('403', $e->getHTTPStatus());
$this->assertEquals('InvalidObjectState', $e->getErrorCode());
}
try{
$this->ossClient->restoreObject($this->bucket, $object);
$this->assertTrue(false);
}catch(OssException $e){
$this->assertEquals('400', $e->getHTTPStatus());
$this->assertEquals('OperationNotSupported', $e->getErrorCode());
}
$result = $this->ossClient->restoreObject($this->bucket, $object, array(OssClient::OSS_VERSION_ID => $versionId1));
common::waitMetaSync();
$this->assertEquals('202', $result['info']['http_code']);
try{
$this->ossClient->restoreObject($this->bucket, $object, array(OssClient::OSS_VERSION_ID => $versionId1));
}catch(OssException $e){
$this->assertEquals('409', $e->getHTTPStatus());
$this->assertEquals('RestoreAlreadyInProgress', $e->getErrorCode());
}
}
public function testObjectMultiPart()
{
$object_src = 'multi-= +object.src';
$content1 = 'hello';
$content2 = 'hello world';
$ret1 = $this->ossClient->putObject($this->bucket, $object_src, $content1);
$ret2 = $this->ossClient->putObject($this->bucket, $object_src, $content2);
$this->assertTrue(isset($ret1[OssClient::OSS_HEADER_VERSION_ID]));
$this->assertTrue(isset($ret2[OssClient::OSS_HEADER_VERSION_ID]));
$versionId1 = $ret1[OssClient::OSS_HEADER_VERSION_ID];
$versionId2 = $ret2[OssClient::OSS_HEADER_VERSION_ID];
//object
$object = "multi-object";
$upload_id = $this->ossClient->initiateMultipartUpload($this->bucket, $object);
$copyId = 1;
$eTag = $this->ossClient->uploadPartCopy($this->bucket, $object_src, $this->bucket, $object, $copyId, $upload_id);
$upload_parts[] = array(
'PartNumber' => $copyId,
'ETag' => $eTag,
);
$ret = $this->ossClient->completeMultipartUpload($this->bucket, $object, $upload_id, $upload_parts);
//object-1
$object1 = "multi-object-1";
$upload_id = $this->ossClient->initiateMultipartUpload($this->bucket, $object1);
$copyId = 1;
$eTag = $this->ossClient->uploadPartCopy($this->bucket, $object_src, $this->bucket, $object1, $copyId, $upload_id, array(OssClient::OSS_VERSION_ID => $versionId1));
$upload_parts1[] = array(
'PartNumber' => $copyId,
'ETag' => $eTag,
);
$ret1 = $this->ossClient->completeMultipartUpload($this->bucket, $object1, $upload_id, $upload_parts1);
//object-2
$object2 = "multi-object-2";
$upload_id = $this->ossClient->initiateMultipartUpload($this->bucket, $object2);
$copyId = 1;
$eTag = $this->ossClient->uploadPartCopy($this->bucket, $object_src, $this->bucket, $object2, $copyId, $upload_id, array(OssClient::OSS_VERSION_ID => $versionId2));
$upload_parts2[] = array(
'PartNumber' => $copyId,
'ETag' => $eTag,
);
$ret2 = $this->ossClient->completeMultipartUpload($this->bucket, $object2, $upload_id, $upload_parts2);
$res = $this->ossClient->getObject($this->bucket, $object);
$res1 = $this->ossClient->getObject($this->bucket, $object1);
$res2 = $this->ossClient->getObject($this->bucket, $object2);
$this->assertEquals($content1, $res1);
$this->assertEquals($content2, $res2);
$this->assertEquals($content2, $res);
}
public function testObjectMisc()
{
//use multipart
$options = array(
OssClient::OSS_PART_SIZE => 1,
);
$object = 'misc-object';
$smallFile1 = __DIR__ . DIRECTORY_SEPARATOR . "/smallfile1.tmp";
$smallFile2 = __DIR__ . DIRECTORY_SEPARATOR . "/smallfile2.tmp";
$bigFile1 = __DIR__ . DIRECTORY_SEPARATOR . "/bigfile1.tmp";
$bigFile2 = __DIR__ . DIRECTORY_SEPARATOR . "/bigfile2.tmp";
OssUtil::generateFile($smallFile1, 5);
OssUtil::generateFile($smallFile2, 10);
OssUtil::generateFile($bigFile1, 128 * 1024);
OssUtil::generateFile($bigFile2, 256 * 1024);
$sret1 = $this->ossClient->multiuploadFile($this->bucket, $object, $smallFile1, $options);
$sret2 = $this->ossClient->multiuploadFile($this->bucket, $object, $smallFile2, $options);
$bret1 = $this->ossClient->multiuploadFile($this->bucket, $object, $bigFile1, $options);
$bret2 = $this->ossClient->multiuploadFile($this->bucket, $object, $bigFile2, $options);
$res = $this->ossClient->getObject($this->bucket, $object);
$sres1 = $this->ossClient->getObject($this->bucket, $object, array(OssClient::OSS_VERSION_ID => $sret1['x-oss-version-id']));
$sres2 = $this->ossClient->getObject($this->bucket, $object, array(OssClient::OSS_VERSION_ID => $sret2['x-oss-version-id']));
$bres1 = $this->ossClient->getObject($this->bucket, $object, array(OssClient::OSS_VERSION_ID => $bret1['x-oss-version-id']));
$bres2 = $this->ossClient->getObject($this->bucket, $object, array(OssClient::OSS_VERSION_ID => $bret2['x-oss-version-id']));
$this->assertEquals(file_get_contents($smallFile1), $sres1);
$this->assertEquals(file_get_contents($smallFile2), $sres2);
$this->assertEquals(file_get_contents($bigFile1), $bres1);
$this->assertEquals(file_get_contents($bigFile2), $bres2);
$this->assertEquals(file_get_contents($bigFile2), $res);
unlink($smallFile1);
unlink($smallFile2);
unlink($bigFile1);
unlink($bigFile2);
}
public function testListObjects()
{
//folder
for ($i = 0; $i < 12; $i++) {
$key = 'folder/'. sprintf("%02d",$i);
$this->ossClient->putObject($this->bucket, $key, "content");
$this->ossClient->putObject($this->bucket, $key, "content");
$this->ossClient->deleteObject($this->bucket, $key);
}
//test
for ($i = 0; $i < 8; $i++) {
$key = 'test/'. sprintf("%02d",$i);
$this->ossClient->putObject($this->bucket, $key, "content");
$this->ossClient->deleteObject($this->bucket, $key);
$this->ossClient->putObject($this->bucket, $key, "content");
}
//work
for ($i = 0; $i < 5; $i++) {
$key = 'work/'. sprintf("%02d",$i);
$this->ossClient->putObject($this->bucket, $key, "content");
}
//sub++
for ($i = 0; $i < 3; $i++) {
$key = 'sub++/'. sprintf("%02d",$i);
$this->ossClient->putObject($this->bucket, $key, "content");
$this->ossClient->putObject($this->bucket, $key, "content");
$this->ossClient->putObject($this->bucket, $key, "content");
}
//file++
for ($i = 0; $i < 2; $i++) {
$key = 'file++'. sprintf("%02d",$i);
$this->ossClient->putObject($this->bucket, $key, "content");
$this->ossClient->deleteObject($this->bucket, $key);
}
//list default
$result = $this->ossClient->listObjectVersions($this->bucket);
$versionList = $result->getObjectVersionList();
$deleteMarkerList = $result->getDeleteMarkerList();
$prefixList = $result->getPrefixList();
$this->assertNotNull($versionList);
$this->assertNotNull($deleteMarkerList);
$this->assertNotNull($prefixList);
$this->assertTrue(is_array($versionList));
$this->assertTrue(is_array($deleteMarkerList));
$this->assertTrue(is_array($prefixList));
$this->assertEquals(2, count($versionList));
$this->assertEquals(2, count($deleteMarkerList));
$this->assertEquals(4, count($prefixList));
$this->assertEquals('file++00', $versionList[0]->getKey());
$this->assertEquals('false', $versionList[0]->getIsLatest());
$this->assertEquals('file++01', $versionList[1]->getKey());
$this->assertEquals('false', $versionList[1]->getIsLatest());
$this->assertEquals('file++00', $deleteMarkerList[0]->getKey());
$this->assertEquals('true', $deleteMarkerList[0]->getIsLatest());
$this->assertEquals('file++01', $deleteMarkerList[1]->getKey());
$this->assertEquals('true', $deleteMarkerList[1]->getIsLatest());
$this->assertEquals('folder/', $prefixList[0]->getPrefix());
$this->assertEquals('sub++/', $prefixList[1]->getPrefix());
$this->assertEquals('test/', $prefixList[2]->getPrefix());
$this->assertEquals('work/', $prefixList[3]->getPrefix());
//list by prefix
$prefix = 'folder/';
$delimiter = '';
$next_marker = '';
$maxkeys = 1000;
$options = array(
'delimiter' => $delimiter,
'prefix' => $prefix,
'max-keys' => $maxkeys,
'key-marker' => $next_marker,
);
$result = $this->ossClient->listObjectVersions($this->bucket, $options);
$versionList = $result->getObjectVersionList();
$deleteMarkerList = $result->getDeleteMarkerList();
$prefixList = $result->getPrefixList();
$this->assertEquals(24, count($versionList));
$this->assertEquals(12, count($deleteMarkerList));
$this->assertEquals(0, count($prefixList));
$this->assertEquals('folder/00', $versionList[0]->getKey());
$this->assertEquals('folder/00', $versionList[1]->getKey());
$this->assertEquals('folder/00', $deleteMarkerList[0]->getKey());
$this->assertEquals('folder/01', $deleteMarkerList[1]->getKey());
//max-key & key-marker & version-id-marker
$count = 0;
$markerCount = 0;
$nextMarker = '';
$nextVersionIdMarker = '';
while (true) {
$options = array(
'delimiter' => '',
'key-marker' => $nextMarker,
'max-keys' => 1,
'version-id-marker' => $nextVersionIdMarker,
);
$result = $this->ossClient->listObjectVersions($this->bucket, $options);
$nextMarker = $result->getNextKeyMarker();
$nextVersionIdMarker = $result->getNextVersionIdMarker();
$count += count($result->getObjectVersionList());
$markerCount += count($result->getDeleteMarkerList());
$this->assertEquals(1, count($result->getObjectVersionList()) + count($result->getDeleteMarkerList()));
if ($result->getIsTruncated() !== "true") {
break;
}
}
$this->assertEquals(12*3 + 8*3 + 5 + 3*3 + 2*2, $count + $markerCount);
}
public function testDeleteObjects()
{
//deletes
for ($i = 0; $i < 5; $i++) {
$key = 'deletes/'. sprintf("%02d",$i);
$this->ossClient->putObject($this->bucket, $key, "content");
$this->ossClient->putObject($this->bucket, $key, "content");
}
$options = array(
'delimiter' => '',
'prefix' => 'deletes/',
'max-keys' => 1000,
);
$result = $this->ossClient->listObjects($this->bucket, $options);
$this->assertEquals(5, count($result->getObjectList()));
//delete without version-id
$objects = array();
for ($i = 0; $i < 5; $i++) {
$key = 'deletes/'. sprintf("%02d",$i);
$objects[] = new DeleteObjectInfo($key);
}
$dresult = $this->ossClient->deleteObjectVersions($this->bucket, $objects);
$this->assertEquals(5, count($dresult));
$this->assertEquals('deletes/00', $dresult[0]->getKey());
$this->assertEquals('true', $dresult[0]->getDeleteMarker());
$this->assertEquals('', $dresult[0]->getVersionId());
$this->assertFalse(empty($dresult[0]->getDeleteMarkerVersionId()));
$result = $this->ossClient->listObjects($this->bucket, $options);
$this->assertEquals(0, count($result->getObjectList()));
//delete by version-id
$vresult = $this->ossClient->listObjectVersions($this->bucket, $options);
$versions = $vresult->getObjectVersionList();
$deleteMarkerList = $vresult->getDeleteMarkerList();
$this->assertEquals(10, count($versions));
$this->assertEquals(5, count($deleteMarkerList));
$objects = array();
foreach ($versions as $obj) {
$objects[] = new DeleteObjectInfo($obj->getKey(), $obj->getVersionId());
}
$dresult = $this->ossClient->deleteObjectVersions($this->bucket, $objects);
$this->assertEquals(10, count($dresult));
$this->assertEquals('deletes/00', $dresult[0]->getKey());
$this->assertEquals('', $dresult[0]->getDeleteMarker());
$this->assertFalse(empty($dresult[0]->getVersionId()));
$this->assertTrue(empty($dresult[0]->getDeleteMarkerVersionId()));
$this->assertEquals('deletes/00', $dresult[1]->getKey());
$this->assertEquals('', $dresult[1]->getDeleteMarker());
$this->assertFalse(empty($dresult[1]->getVersionId()));
$this->assertTrue(empty($dresult[1]->getDeleteMarkerVersionId()));
$vresult = $this->ossClient->listObjectVersions($this->bucket, $options);
$versions = $vresult->getObjectVersionList();
$deleteMarkerList = $vresult->getDeleteMarkerList();
$this->assertEquals(0, count($versions));
$this->assertEquals(5, count($deleteMarkerList));
$objects = array();
foreach ($deleteMarkerList as $obj) {
$objects[] = new DeleteObjectInfo($obj->getKey(), $obj->getVersionId());
}
$dresult = $this->ossClient->deleteObjectVersions($this->bucket, $objects);
$this->assertEquals(5, count($dresult));
$this->assertEquals('deletes/00', $dresult[0]->getKey());
$this->assertEquals('true', $dresult[0]->getDeleteMarker());
$this->assertFalse(empty($dresult[1]->getVersionId()));
$this->assertFalse(empty($dresult[1]->getDeleteMarkerVersionId()));
$vresult = $this->ossClient->listObjectVersions($this->bucket, $options);
$versions = $vresult->getObjectVersionList();
$deleteMarkerList = $vresult->getDeleteMarkerList();
$this->assertEquals(0, count($versions));
$this->assertEquals(0, count($deleteMarkerList));
}
protected function setUp(): void
{
parent::setUp();
$this->ossClient->putBucketVersioning($this->bucket, "Enabled");
}
protected function tearDown(): void
{
if (!$this->ossClient->doesBucketExist($this->bucket)) {
return;
}
$this->ossClient->putBucketVersioning($this->bucket, "Suspended");
$result = $this->ossClient->listObjectVersions(
$this->bucket, array('max-keys' => 1000, 'delimiter' => ''));
$versions = $result->getObjectVersionList();
$deleteMarkers = $result->getDeleteMarkerList();
foreach ($versions as $obj) {
$options = array(
OssClient::OSS_VERSION_ID => $obj->getVersionId(),
);
$this->ossClient->deleteObject($this->bucket, $obj->getKey(), $options);
}
foreach ($deleteMarkers as $del) {
$options = array(
OssClient::OSS_VERSION_ID => $del->getVersionId(),
);
$this->ossClient->deleteObject($this->bucket, $del->getKey(), $options);
}
parent::tearDown();
}
}