Skip to content

Commit

Permalink
restore dev
Browse files Browse the repository at this point in the history
  • Loading branch information
ljbreak2008 committed Jan 3, 2018
1 parent 3e26144 commit 31ad093
Show file tree
Hide file tree
Showing 4 changed files with 173 additions and 1 deletion.
13 changes: 13 additions & 0 deletions src/OSS/Core/OssUtil.php
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,19 @@ public static function startsWith($str, $findMe)
}
}

/**
* 生成createBucketXmlBody接口的xml消息
*
* @param string $storageClass
* @return string
*/
public static function createBucketXmlBody($storageClass)
{
$xml = new \SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><CreateBucketConfiguration></CreateBucketConfiguration>');
$xml->addChild('StorageClass', $storageClass);
return $xml->asXML();
}

/**
* 检验$options
*
Expand Down
30 changes: 29 additions & 1 deletion src/OSS/OssClient.php
Original file line number Diff line number Diff line change
Expand Up @@ -131,15 +131,17 @@ public function listBuckets($options = NULL)
* @param string $bucket
* @param string $acl
* @param array $options
* @param string $storageType
* @return null
*/
public function createBucket($bucket, $acl = self::OSS_ACL_TYPE_PRIVATE, $options = NULL)
public function createBucket($bucket, $acl = self::OSS_ACL_TYPE_PRIVATE, $options = NULL, $storageType = self::OSS_STORAGE_TYPE_STANDARD)
{
$this->precheckCommon($bucket, NULL, $options, false);
$options[self::OSS_BUCKET] = $bucket;
$options[self::OSS_METHOD] = self::OSS_HTTP_PUT;
$options[self::OSS_OBJECT] = '/';
$options[self::OSS_HEADERS] = array(self::OSS_ACL => $acl);
$options[self::OSS_CONTENT] = OssUtil::createBucketXmlBody($storageType);
$response = $this->auth($options);
$result = new PutSetDeleteResult($response);
return $result->getData();
Expand Down Expand Up @@ -1412,6 +1414,27 @@ public function doesObjectExist($bucket, $object, $options = NULL)
return $result->getData();
}

/**
* 针对Archive类型的Object读取
* 需要使用Restore操作让服务端执行解冻任务
*
* @param string $bucket bucket名称
* @param string $object object名称
* @return null
* @throws OssException
*/
public function restoreObject($bucket, $object, $options = NULL)
{
$this->precheckCommon($bucket, $object, $options);
$options[self::OSS_BUCKET] = $bucket;
$options[self::OSS_METHOD] = self::OSS_HTTP_POST;
$options[self::OSS_OBJECT] = $object;
$options[self::OSS_SUB_RESOURCE] = self::OSS_RESTORE;
$response = $this->auth($options);
$result = new PutSetDeleteResult($response);
return $result->getData();
}

/**
* 获取分片大小,根据用户提供的part_size,重新计算一个更合理的partsize
*
Expand Down Expand Up @@ -2349,6 +2372,7 @@ private function generateSignableQueryStringParam($options)
self::OSS_PROCESS,
self::OSS_POSITION,
self::OSS_SYMLINK,
self::OSS_RESTORE,
);

foreach ($signableList as $item) {
Expand Down Expand Up @@ -2613,6 +2637,10 @@ public function setConnectTimeout($connectTimeout)
const OSS_HTTP_CODE = 'http_code';
const OSS_REQUEST_ID = 'x-oss-request-id';
const OSS_INFO = 'info';
const OSS_RESTORE = 'restore';
const OSS_STORAGE_TYPE_STANDARD = 'Standard';
const OSS_STORAGE_TYPE_IA = 'IA';
const OSS_STORAGE_TYPE_ARCHIVE = 'Archive';

//私有URL变量
const OSS_URL_ACCESS_KEY_ID = 'OSSAccessKeyId';
Expand Down
44 changes: 44 additions & 0 deletions tests/OSS/Tests/OssClientBucketTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@

class OssClientBucketTest extends TestOssClientBase
{
private $IABucket;
private $ArchiveBucket;

public function testBucketWithInvalidName()
{
try {
Expand Down Expand Up @@ -54,4 +57,45 @@ public function testBucket()
$this->assertEquals('200', $res['info']['http_code']);
$this->assertEquals('oss-us-west-1', $res['x-oss-bucket-region']);
}

public function testCreateBucketWithStorageType()
{
$object = 'storage-object';

$this->ossClient->putObject($this->ArchiveBucket, $object,'testcontent');
try{
$this->ossClient->getObject($this->ArchiveBucket, $object);
$this->assertTrue(false);
}catch (OssException $e){
$this->assertEquals('403', $e->getHTTPStatus());
$this->assertEquals('InvalidObjectState', $e->getErrorCode());
}

$this->ossClient->putObject($this->IABucket, $object,'testcontent');
$result = $this->ossClient->getObject($this->IABucket, $object);
$this->assertEquals($result, 'testcontent');

$this->ossClient->putObject($this->bucket, $object,'testcontent');
$result = $this->ossClient->getObject($this->bucket, $object);
$this->assertEquals($result, 'testcontent');
}

public function setUp()
{
parent::setUp(); // TODO: Change the autogenerated stub
$this->IABucket = 'ia-'.$this->bucket;
$this->ArchiveBucket = 'archive-'.$this->bucket;
$this->ossClient->createBucket($this->IABucket, OssClient::OSS_ACL_TYPE_PRIVATE, NULL, OssClient::OSS_STORAGE_TYPE_IA);
$this->ossClient->createBucket($this->ArchiveBucket, OssClient::OSS_ACL_TYPE_PRIVATE, NULL, OssClient::OSS_STORAGE_TYPE_ARCHIVE);
}

public function tearDown()
{
$object = 'storage-object';
parent::tearDown(); // TODO: Change the autogenerated stub
$this->ossClient->deleteObject($this->IABucket, $object);
$this->ossClient->deleteObject($this->ArchiveBucket, $object);
$this->ossClient->deleteBucket($this->IABucket);
$this->ossClient->deleteBucket($this->ArchiveBucket);
}
}
87 changes: 87 additions & 0 deletions tests/OSS/Tests/OssClientRestoreObjectTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
<?php

namespace OSS\Tests;

use OSS\Core\OssException;
use OSS\OssClient;

require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestOssClientBase.php';


class OssClientRestoreObjectTest extends TestOssClientBase
{
private $IABucket;
private $ArchiveBucket;

public function testIARestoreObject()
{
$object = 'storage-object';

$this->ossClient->putObject($this->IABucket, $object,'testcontent');
try{
$this->ossClient->restoreObject($this->IABucket, $object);
$this->assertTrue(false);
}catch (OssException $e){
$this->assertEquals('400', $e->getHTTPStatus());
$this->assertEquals('OperationNotSupported', $e->getErrorCode());
}
}

public function testNullObjectRestoreObject()
{
$object = 'null-object';

try{
$this->ossClient->restoreObject($this->bucket, $object);
$this->assertTrue(false);
}catch (OssException $e){
$this->assertEquals('404', $e->getHTTPStatus());
}
}

public function testArchiveRestoreObject()
{
$object = 'storage-object';

$this->ossClient->putObject($this->ArchiveBucket, $object,'testcontent');
try{
$this->ossClient->getObject($this->ArchiveBucket, $object);
$this->assertTrue(false);
}catch (OssException $e){
$this->assertEquals('403', $e->getHTTPStatus());
$this->assertEquals('InvalidObjectState', $e->getErrorCode());
}
$result = $this->ossClient->restoreObject($this->ArchiveBucket, $object);
common::waitMetaSync();
$this->assertEquals('202', $result['info']['http_code']);

try{
$this->ossClient->restoreObject($this->ArchiveBucket, $object);
}catch(OssException $e){
$this->assertEquals('409', $e->getHTTPStatus());
$this->assertEquals('RestoreAlreadyInProgress', $e->getErrorCode());
}
}

public function setUp()
{
parent::setUp(); // TODO: Change the autogenerated stub
$this->IABucket = 'ia-'.$this->bucket;
$this->ArchiveBucket = 'archive-'.$this->bucket;
$this->ossClient->createBucket($this->IABucket, OssClient::OSS_ACL_TYPE_PRIVATE, NULL, OssClient::OSS_STORAGE_TYPE_IA);
$this->ossClient->createBucket($this->ArchiveBucket, OssClient::OSS_ACL_TYPE_PRIVATE, NULL, OssClient::OSS_STORAGE_TYPE_ARCHIVE);
}

public function tearDown()
{
parent::tearDown(); // TODO: Change the autogenerated stub
$object = 'storage-object';
$this->ossClient->deleteObject($this->IABucket, $object);
$this->ossClient->deleteObject($this->ArchiveBucket, $object);
$this->ossClient->deleteBucket($this->IABucket);
$this->ossClient->deleteBucket($this->ArchiveBucket);
}
}



0 comments on commit 31ad093

Please sign in to comment.