611 lines
		
	
	
		
			28 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			611 lines
		
	
	
		
			28 KiB
		
	
	
	
		
			PHP
		
	
	
|  | <?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(); | ||
|  |     } | ||
|  | } |