This commit is contained in:
gaofeng
2026-06-17 09:23:18 +08:00
commit 81ade70944
1638 changed files with 213697 additions and 0 deletions

View File

@@ -0,0 +1,242 @@
<?php
namespace IntegrationTests;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestIntegration.php';
use AlibabaCloud\Oss\V2 as Oss;
class ClientAccessPointTest extends TestIntegration
{
public function testAccessPoint()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
// CreateAccessPoint
$accessPointName = 'ap-01-' . strval(rand(0, 100)) . '-' . strval(time());
$createResult = $client->createAccessPoint(new Oss\Models\CreateAccessPointRequest(
$bucketName,
new Oss\Models\CreateAccessPointConfiguration(
accessPointName: $accessPointName,
networkOrigin: 'internet',
)));
$this->assertEquals(200, $createResult->statusCode);
$this->assertEquals('OK', $createResult->status);
$this->assertEquals(True, count($createResult->headers) > 0);
$this->assertEquals(24, strlen($createResult->requestId));
// GetAccessPoint
$getResult = $client->getAccessPoint(new Oss\Models\GetAccessPointRequest(
$bucketName, $accessPointName
));
$this->assertEquals(200, $getResult->statusCode);
$this->assertEquals('OK', $getResult->status);
$this->assertEquals(True, count($getResult->headers) > 0);
$this->assertEquals(24, strlen($getResult->requestId));
// ListAccessPoints
$listResult = $client->listAccessPoints(new Oss\Models\ListAccessPointsRequest());
$this->assertEquals(200, $listResult->statusCode);
$this->assertEquals('OK', $listResult->status);
$this->assertEquals(True, count($listResult->headers) > 0);
$this->assertEquals(24, strlen($listResult->requestId));
// PutAccessPointPolicy
$policy = '{"Version":"1","Statement":[{"Action":["oss:PutObject","oss:GetObject"],"Effect":"Deny","Principal":["' . self::$USER_ID . '"],"Resource":["acs:oss:' . self::$REGION . ':' . self::$USER_ID . ':accesspoint/' . $accessPointName . '","acs:oss:' . self::$REGION . ':' . self::$USER_ID . ':accesspoint/' . $accessPointName . '/object/*"]}]}';
$putPolicyResult = $client->putAccessPointPolicy(new Oss\Models\PutAccessPointPolicyRequest(
bucket: $bucketName,
accessPointName: $accessPointName,
body: Oss\Utils::streamFor($policy)
));
$this->assertEquals(200, $putPolicyResult->statusCode);
$this->assertEquals('OK', $putPolicyResult->status);
$this->assertEquals(True, count($putPolicyResult->headers) > 0);
$this->assertEquals(24, strlen($putPolicyResult->requestId));
// GetAccessPointPolicy
$getPolicyResult = $client->getAccessPointPolicy(new Oss\Models\GetAccessPointPolicyRequest(
bucket: $bucketName,
accessPointName: $accessPointName,
));
$this->assertEquals(200, $getPolicyResult->statusCode);
$this->assertEquals('OK', $getPolicyResult->status);
$this->assertEquals(True, count($getPolicyResult->headers) > 0);
$this->assertEquals(24, strlen($getPolicyResult->requestId));
$this->assertEquals($policy, $getPolicyResult->body);
// DeleteAccessPointPolicy
$delPolicyResult = $client->deleteAccessPointPolicy(new Oss\Models\DeleteAccessPointPolicyRequest(
bucket: $bucketName,
accessPointName: $accessPointName,
));
$this->assertEquals(204, $delPolicyResult->statusCode);
$this->assertEquals('No Content', $delPolicyResult->status);
$this->assertEquals(True, count($delPolicyResult->headers) > 0);
$this->assertEquals(24, strlen($delPolicyResult->requestId));
while (true) {
$getResult = $client->getAccessPoint(new Oss\Models\GetAccessPointRequest(
$bucketName, $accessPointName
));
if ($getResult->getAccessPoint->status != 'creating') {
break;
} else {
sleep(3);
}
}
$delResult = $client->deleteAccessPoint(new Oss\Models\DeleteAccessPointRequest(
bucket: $bucketName,
accessPointName: $accessPointName,
));
$this->assertEquals(204, $delResult->statusCode);
$this->assertEquals('No Content', $delResult->status);
$this->assertEquals(True, count($delResult->headers) > 0);
$this->assertEquals(24, strlen($delResult->requestId));
}
public function testAccessPointFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . "-not-exist";
// CreateAccessPoint
try {
$accessPointName = 'ap-01-' . strval(rand(0, 100)) . '-' . strval(time());
$createResult = $client->createAccessPoint(new Oss\Models\CreateAccessPointRequest(
$bucketName,
new Oss\Models\CreateAccessPointConfiguration(
accessPointName: $accessPointName,
networkOrigin: 'internet',
)));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error CreateAccessPoint', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// GetAccessPoint
try {
$getResult = $client->getAccessPoint(new Oss\Models\GetAccessPointRequest(
$bucketName, $accessPointName
));
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetAccessPoint', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// ListAccessPoints
try {
$listResult = $client->listAccessPoints(new Oss\Models\ListAccessPointsRequest());
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error ListAccessPoints', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// PutAccessPointPolicy
try {
$policy = '{"Version":"1","Statement":[{"Action":["oss:PutObject","oss:GetObject"],"Effect":"Deny","Principal":["' . self::$USER_ID . '"],"Resource":["acs:oss:' . self::$REGION . ':' . self::$USER_ID . ':accesspoint/' . $accessPointName . '","acs:oss:' . self::$REGION . ':' . self::$USER_ID . ':accesspoint/' . $accessPointName . '/object/*"]}]}';
$putPolicyResult = $client->putAccessPointPolicy(new Oss\Models\PutAccessPointPolicyRequest(
bucket: $bucketName,
accessPointName: $accessPointName,
body: Oss\Utils::streamFor($policy)
));
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error PutAccessPointPolicy', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// GetAccessPointPolicy
try {
$getPolicyResult = $client->getAccessPointPolicy(new Oss\Models\GetAccessPointPolicyRequest(
bucket: $bucketName,
accessPointName: $accessPointName,
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetAccessPointPolicy', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// DeleteAccessPointPolicy
try {
$delPolicyResult = $client->deleteAccessPointPolicy(new Oss\Models\DeleteAccessPointPolicyRequest(
bucket: $bucketName,
accessPointName: $accessPointName,
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error DeleteAccessPointPolicy', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// GetAccessPoint
try {
$getResult = $client->getAccessPoint(new Oss\Models\GetAccessPointRequest(
$bucketName, $accessPointName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetAccessPoint', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// DeleteAccessPoint
try {
$delResult = $client->deleteAccessPoint(new Oss\Models\DeleteAccessPointRequest(
bucket: $bucketName,
accessPointName: $accessPointName,
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error DeleteAccessPoint', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
}
}

View File

@@ -0,0 +1,80 @@
<?php
namespace IntegrationTests;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestIntegration.php';
use AlibabaCloud\Oss\V2 as Oss;
class ClientBucketAccessMonitorTest extends TestIntegration
{
public function testBucketAccessMonitor()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
// PutBucketAccessMonitor
$putResult = $client->putBucketAccessMonitor(new Oss\Models\PutBucketAccessMonitorRequest(
$bucketName,
new Oss\Models\AccessMonitorConfiguration(
status: Oss\Models\AccessMonitorStatusType::ENABLED
)
));
$this->assertEquals(200, $putResult->statusCode);
$this->assertEquals('OK', $putResult->status);
$this->assertEquals(True, count($putResult->headers) > 0);
$this->assertEquals(24, strlen($putResult->requestId));
// GetBucketAccessMonitor
$getResult = $client->getBucketAccessMonitor(new Oss\Models\GetBucketAccessMonitorRequest(
$bucketName
));
$this->assertEquals(200, $getResult->statusCode);
$this->assertEquals('OK', $getResult->status);
$this->assertEquals(True, count($getResult->headers) > 0);
$this->assertEquals(24, strlen($getResult->requestId));
}
public function testBucketAccessMonitorFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . "-not-exist";
// PutBucketAccessMonitor
try {
$putResult = $client->putBucketAccessMonitor(new Oss\Models\PutBucketAccessMonitorRequest(
$bucketName,
new Oss\Models\AccessMonitorConfiguration(
status: Oss\Models\AccessMonitorStatusType::ENABLED
)
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error PutBucketAccessMonitor', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// GetBucketAccessMonitor
try {
$getResult = $client->getBucketAccessMonitor(new Oss\Models\GetBucketAccessMonitorRequest(
$bucketName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetBucketAccessMonitor', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
}
}

View File

@@ -0,0 +1,81 @@
<?php
namespace IntegrationTests;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestIntegration.php';
use AlibabaCloud\Oss\V2 as Oss;
use AlibabaCloud\Oss\V2\Models\LifecycleConfiguration;
class ClientBucketArchiveDirectReadTest extends TestIntegration
{
public function testBucketArchiveDirectRead()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
// PutBucketArchiveDirectRead
$putResult = $client->putBucketArchiveDirectRead(new Oss\Models\PutBucketArchiveDirectReadRequest(
$bucketName,
new Oss\Models\ArchiveDirectReadConfiguration(
true
)
));
$this->assertEquals(200, $putResult->statusCode);
$this->assertEquals('OK', $putResult->status);
$this->assertEquals(True, count($putResult->headers) > 0);
$this->assertEquals(24, strlen($putResult->requestId));
// GetBucketArchiveDirectRead
$getResult = $client->getBucketArchiveDirectRead(new Oss\Models\GetBucketArchiveDirectReadRequest(
$bucketName
));
$this->assertEquals(200, $getResult->statusCode);
$this->assertEquals('OK', $getResult->status);
$this->assertEquals(True, count($getResult->headers) > 0);
$this->assertEquals(24, strlen($getResult->requestId));
}
public function testBucketArchiveDirectReadFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . "-not-exist";
// PutBucketArchiveDirectRead
try {
$putResult = $client->putBucketArchiveDirectRead(new Oss\Models\PutBucketArchiveDirectReadRequest(
$bucketName,
new Oss\Models\ArchiveDirectReadConfiguration(
true
)
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error PutBucketArchiveDirectRead', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// GetBucketArchiveDirectRead
try {
$getResult = $client->getBucketArchiveDirectRead(new Oss\Models\GetBucketArchiveDirectReadRequest(
$bucketName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetBucketArchiveDirectRead', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
}
}

View File

@@ -0,0 +1,514 @@
<?php
namespace IntegrationTests;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestIntegration.php';
use AlibabaCloud\Oss\V2 as Oss;
class ClientBucketBasicTest extends TestIntegration
{
public function testBucketBasic()
{
$client = $this->getDefaultClient();
//default
$bucketName = self::randomBucketName() . "-default";
$result = $client->putBucket(new Oss\Models\PutBucketRequest(
$bucketName
));
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
// get stat
$result = $client->getBucketStat(new Oss\Models\GetBucketStatRequest(
$bucketName
));
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
$this->assertEquals(0, $result->storage);
// get location
$result = $client->getBucketLocation(new Oss\Models\GetBucketLocationRequest(
$bucketName
));
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
$region = self::$REGION;
$this->assertEquals("oss-$region", $result->location);
// get info
$result = $client->getBucketInfo(new Oss\Models\GetBucketInfoRequest(
$bucketName
));
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
$this->assertEquals('private', $result->bucketInfo->acl);
//delete
$result = $client->deleteBucket(new Oss\Models\DeleteBucketRequest(
$bucketName
));
$this->assertEquals(204, $result->statusCode);
$this->assertEquals('No Content', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
// create bucket with acl & storage class & data redundancy
$bucketName = self::randomBucketName() . '-acl-storage';
$result = $client->putBucket(new Oss\Models\PutBucketRequest(
$bucketName,
'public-read',
null,
new Oss\Models\CreateBucketConfiguration(
'IA',
'ZRS'
)
));
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
// get info
$result = $client->getBucketInfo(new Oss\Models\GetBucketInfoRequest(
$bucketName
));
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
$this->assertEquals('public-read', $result->bucketInfo->acl);
$this->assertEquals('IA', $result->bucketInfo->storageClass);
$this->assertEquals('ZRS', $result->bucketInfo->dataRedundancyType);
$result = $client->listObjects(new Oss\Models\ListObjectsRequest(
$bucketName
));
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
$result = $client->listObjectsV2(new Oss\Models\ListObjectsV2Request(
$bucketName
));
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
//delete
$result = $client->deleteBucket(new Oss\Models\DeleteBucketRequest(
$bucketName
));
$this->assertEquals(204, $result->statusCode);
$this->assertEquals('No Content', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
}
public function testBucketAcl()
{
$client = $this->getDefaultClient();
//default
$bucketName = self::randomBucketName();
$result = $client->putBucket(new Oss\Models\PutBucketRequest(
$bucketName
));
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
// set acl
$result = $client->putBucketAcl(new Oss\Models\PutBucketAclRequest(
$bucketName,
'private'
));
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
// get acl
$result = $client->getBucketAcl(new Oss\Models\GetBucketAclRequest(
$bucketName
));
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
$this->assertEquals('private', $result->accessControlList->grant);
$client->deleteBucket(new Oss\Models\DeleteBucketRequest(
$bucketName
));
}
public function testBucketVersioning()
{
$client = $this->getDefaultClient();
//default
$bucketName = self::randomBucketName();
$result = $client->putBucket(new Oss\Models\PutBucketRequest(
$bucketName
));
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
$result = $client->putBucketVersioning(new Oss\Models\PutBucketVersioningRequest(
$bucketName,
new Oss\Models\VersioningConfiguration(
Oss\Models\BucketVersioningStatusType::ENABLED
)
));
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
$result = $client->getBucketVersioning(new Oss\Models\GetBucketVersioningRequest(
$bucketName,
));
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
$this->assertEquals(Oss\Models\BucketVersioningStatusType::ENABLED, $result->versioningConfiguration->status);
$result = $client->listObjectVersions(new Oss\Models\ListObjectVersionsRequest(
$bucketName,
));
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
$this->assertNull($result->versions);
$this->waitFor(3);
$client->deleteBucket(new Oss\Models\DeleteBucketRequest(
$bucketName
));
}
public function testListBuckets()
{
$client = $this->getDefaultClient();
//default
$bucketName = self::randomBucketName();
$result = $client->putBucket(new Oss\Models\PutBucketRequest(
$bucketName
));
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
$result = $client->listBuckets(new Oss\Models\ListBucketsRequest(self::$BUCKETNAME_PREFIX));
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
$this->assertEquals(True, count($result->buckets) > 0);
$request = new Oss\Models\ListBucketsRequest(self::$BUCKETNAME_PREFIX);
$request->tagging = 'k:v';
$result = $client->listBuckets($request);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
$this->assertNull($result->buckets);
$request = new Oss\Models\ListBucketsRequest(self::$BUCKETNAME_PREFIX);
$request->tagKey = 'k';
$request->tagValue = 'v';
$result = $client->listBuckets($request);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
$this->assertNull($result->buckets);
$this->waitFor(3);
$client->deleteBucket(new Oss\Models\DeleteBucketRequest(
$bucketName
));
}
public function testDescribeRegions()
{
$client = $this->getDefaultClient();
$result = $client->describeRegions(new Oss\Models\DescribeRegionsRequest());
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
$this->assertEquals(true, count($result->regionInfos) > 1);
$result = $client->describeRegions(new Oss\Models\DescribeRegionsRequest("oss-cn-hangzhou"));
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
$this->assertEquals(1, count($result->regionInfos));
}
public function testPutBucketFail()
{
$client = $this->getInvalidAkClient();
try {
$bucketName = self::randomBucketName();
$client->putBucket(new Oss\Models\PutBucketRequest(
$bucketName
));
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error PutBucket', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
}
}
}
public function testPutBucketAclFail()
{
$client = $this->getInvalidAkClient();
try {
$bucketName = self::$bucketName;
$client->putBucketAcl(new Oss\Models\PutBucketAclRequest(
$bucketName,
'private'
));
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error PutBucketAcl', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
}
}
}
public function testGetBucketAclFail()
{
$client = $this->getInvalidAkClient();
try {
$bucketName = self::$bucketName;
$client->getBucketAcl(new Oss\Models\GetBucketAclRequest(
$bucketName
));
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetBucketAcl', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
}
}
}
public function testGetBucketStatFail()
{
$client = $this->getInvalidAkClient();
try {
$bucketName = self::$bucketName;
$client->getBucketStat(new Oss\Models\GetBucketStatRequest(
$bucketName
));
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetBucketStat', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
}
}
}
public function testGetBucketLocationFail()
{
$client = $this->getInvalidAkClient();
try {
$bucketName = self::$bucketName;
$client->getBucketLocation(new Oss\Models\GetBucketLocationRequest(
$bucketName
));
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetBucketLocation', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
}
}
}
public function testGetBucketInfoFail(): void
{
$client = $this->getInvalidAkClient();
try {
$bucketName = self::$bucketName;
$client->getBucketInfo(new Oss\Models\GetBucketInfoRequest(
$bucketName
));
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetBucketInfo', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
}
}
}
public function testPutBucketVersioningFail(): void
{
$client = $this->getInvalidAkClient();
try {
$bucketName = self::$bucketName;
$client->putBucketVersioning(new Oss\Models\PutBucketVersioningRequest(
$bucketName,
new Oss\Models\VersioningConfiguration('Enabled')
));
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error PutBucketVersioning', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
}
}
}
public function testGetBucketVersioningFail(): void
{
$client = $this->getInvalidAkClient();
try {
$bucketName = self::$bucketName;
$client->GetBucketVersioning(new Oss\Models\GetBucketVersioningRequest(
$bucketName
));
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetBucketVersioning', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
}
}
}
public function testListObjectVersionsFail(): void
{
$client = $this->getInvalidAkClient();
try {
$bucketName = self::$bucketName;
$client->listObjectVersions(new Oss\Models\ListObjectVersionsRequest(
$bucketName
));
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error ListObjectVersions', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
}
}
}
public function testListObjectsFail(): void
{
$client = $this->getInvalidAkClient();
try {
$bucketName = self::$bucketName;
$client->listObjects(new Oss\Models\ListObjectsRequest(
$bucketName,
));
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error ListObjects', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
}
}
}
public function testListObjectsV2Fail(): void
{
$client = $this->getInvalidAkClient();
try {
$bucketName = self::$bucketName;
$client->listObjectsV2(new Oss\Models\ListObjectsV2Request(
$bucketName,
));
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error ListObjectsV2', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
}
}
}
public function testListBucketsFail(): void
{
$client = $this->getInvalidAkClient();
try {
$bucketName = self::$bucketName;
$client->listBuckets(new Oss\Models\ListBucketsRequest());
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error ListBuckets', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
}
}
}
}

View File

@@ -0,0 +1,166 @@
<?php
namespace IntegrationTests;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestIntegration.php';
use AlibabaCloud\Oss\V2 as Oss;
class ClientBucketCnameTest extends TestIntegration
{
public function testBucketCname()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
// CreateCnameToken
$createResult = $client->createCnameToken(new Oss\Models\CreateCnameTokenRequest(
$bucketName,
new Oss\Models\BucketCnameConfiguration(
new Oss\Models\Cname(
'example.com'
)
)
));
$this->assertEquals(200, $createResult->statusCode);
$this->assertEquals('OK', $createResult->status);
$this->assertEquals(True, count($createResult->headers) > 0);
$this->assertEquals(24, strlen($createResult->requestId));
// GetCnameToken
$getResult = $client->getCnameToken(new Oss\Models\GetCnameTokenRequest(
$bucketName,
'example.com'
));
$this->assertEquals(200, $getResult->statusCode);
$this->assertEquals('OK', $getResult->status);
$this->assertEquals(True, count($getResult->headers) > 0);
$this->assertEquals(24, strlen($getResult->requestId));
// ListCname
$listResult = $client->listCname(new Oss\Models\ListCnameRequest(
$bucketName,
));
$this->assertEquals(200, $listResult->statusCode);
$this->assertEquals('OK', $listResult->status);
$this->assertEquals(True, count($listResult->headers) > 0);
$this->assertEquals(24, strlen($listResult->requestId));
// DeleteCname
$delResult = $client->deleteCname(new Oss\Models\DeleteCnameRequest(
$bucketName,
new Oss\Models\BucketCnameConfiguration(
new Oss\Models\Cname(
'example.com'
)
)
));
$this->assertEquals(200, $delResult->statusCode);
$this->assertEquals('OK', $delResult->status);
$this->assertEquals(True, count($delResult->headers) > 0);
$this->assertEquals(24, strlen($delResult->requestId));
}
public function testBucketCnameFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . "-not-exist";
try {
$putResult = $client->putCname(new Oss\Models\PutCnameRequest(
$bucketName,
new Oss\Models\BucketCnameConfiguration(
new Oss\Models\Cname(
'example.com'
)
)
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error PutCname', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
try {
$createResult = $client->createCnameToken(new Oss\Models\CreateCnameTokenRequest(
$bucketName,
new Oss\Models\BucketCnameConfiguration(
new Oss\Models\Cname(
'example.com'
)
)
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error CreateCnameToken', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
try {
$getTokenResult = $client->getCnameToken(new Oss\Models\GetCnameTokenRequest(
$bucketName,
'example.com'
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetCnameToken', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
try {
$listResult = $client->listCname(new Oss\Models\ListCnameRequest(
$bucketName,
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error ListCname', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
try {
$delResult = $client->deleteCname(new Oss\Models\DeleteCnameRequest(
$bucketName,
new Oss\Models\BucketCnameConfiguration(
new Oss\Models\Cname(
'example.com'
)
)
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error DeleteCname', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
}
}

View File

@@ -0,0 +1,159 @@
<?php
namespace IntegrationTests;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestIntegration.php';
use AlibabaCloud\Oss\V2 as Oss;
class ClientBucketCorsTest extends TestIntegration
{
public function testBucketCors()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
// PutBucketCors
$putResult = $client->putBucketCors(new Oss\Models\PutBucketCorsRequest(
$bucketName,
corsConfiguration: new Oss\Models\CORSConfiguration(
array(
new Oss\Models\CORSRule(
allowedOrigins: ['*'],
allowedMethods: ['PUT', 'GET']
)
)
)
));
$this->assertEquals(200, $putResult->statusCode);
$this->assertEquals('OK', $putResult->status);
$this->assertEquals(True, count($putResult->headers) > 0);
$this->assertEquals(24, strlen($putResult->requestId));
// OptionObject
$objectName = self::$OBJECTNAME_PREFIX . self::randomLowStr() . '-put-object';
$putObjResult = $client->putObject(new Oss\Models\PutObjectRequest(
$bucketName,
$objectName,
body: Oss\Utils::streamFor('hi oss')
));
$this->assertEquals(200, $putObjResult->statusCode);
$this->assertEquals('OK', $putObjResult->status);
$this->assertEquals(True, count($putObjResult->headers) > 0);
$this->assertEquals(24, strlen($putObjResult->requestId));
$optionObjResult = $client->optionObject(new Oss\Models\OptionObjectRequest(
$bucketName,
$objectName,
origin: 'http://www.example.com',
accessControlRequestMethod: 'PUT',
));
$this->assertEquals(200, $optionObjResult->statusCode);
$this->assertEquals('OK', $optionObjResult->status);
$this->assertEquals(True, count($optionObjResult->headers) > 0);
$this->assertEquals(24, strlen($optionObjResult->requestId));
// GetBucketCors
$getResult = $client->getBucketCors(new Oss\Models\GetBucketCorsRequest(
$bucketName
));
$this->assertEquals(200, $getResult->statusCode);
$this->assertEquals('OK', $getResult->status);
$this->assertEquals(True, count($getResult->headers) > 0);
$this->assertEquals(24, strlen($getResult->requestId));
// DeleteBucketCors
$delResult = $client->deleteBucketCors(new Oss\Models\DeleteBucketCorsRequest(
$bucketName
));
$this->assertEquals(204, $delResult->statusCode);
$this->assertEquals('No Content', $delResult->status);
$this->assertEquals(True, count($delResult->headers) > 0);
$this->assertEquals(24, strlen($delResult->requestId));
}
public function testBucketCorsFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . "-not-exist";
// PutBucketCors
try {
$putResult = $client->putBucketCors(new Oss\Models\PutBucketCorsRequest(
$bucketName,
corsConfiguration: new Oss\Models\CORSConfiguration(
array(
new Oss\Models\CORSRule(
allowedOrigins: ['*'],
allowedMethods: ['PUT', 'GET']
)
)
)
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error PutBucketCors', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
try {
$objectName = self::$OBJECTNAME_PREFIX . self::randomLowStr() . '-put-object';
$optionObjResult = $client->optionObject(new Oss\Models\OptionObjectRequest(
$bucketName,
$objectName,
origin: 'http://www.example.com',
accessControlRequestMethod: 'PUT',
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error OptionObject', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// GetBucketCors
try {
$getResult = $client->getBucketCors(new Oss\Models\GetBucketCorsRequest(
$bucketName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetBucketCors', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// DeleteBucketCors
try {
$delResult = $client->deleteBucketCors(new Oss\Models\DeleteBucketCorsRequest(
$bucketName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error DeleteBucketCors', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
}
}

View File

@@ -0,0 +1,147 @@
<?php
namespace IntegrationTests;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestIntegration.php';
use AlibabaCloud\Oss\V2 as Oss;
class ClientBucketDataRedundancyTransitionTest extends TestIntegration
{
public function testBucketDataRedundancyTransition()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
// CreateBucketDataRedundancyTransition
$createResult = $client->createBucketDataRedundancyTransition(new Oss\Models\CreateBucketDataRedundancyTransitionRequest(
$bucketName,
targetRedundancyType: 'ZRS'
));
$this->assertEquals(200, $createResult->statusCode);
$this->assertEquals('OK', $createResult->status);
$this->assertEquals(True, count($createResult->headers) > 0);
$this->assertEquals(24, strlen($createResult->requestId));
// GetBucketDataRedundancyTransition
$getResult = $client->getBucketDataRedundancyTransition(new Oss\Models\GetBucketDataRedundancyTransitionRequest(
$bucketName,
redundancyTransitionTaskid: $createResult->bucketDataRedundancyTransition->taskId
));
$this->assertEquals(200, $getResult->statusCode);
$this->assertEquals('OK', $getResult->status);
$this->assertEquals(True, count($getResult->headers) > 0);
$this->assertEquals(24, strlen($getResult->requestId));
// ListBucketDataRedundancyTransition
$listResult = $client->listBucketDataRedundancyTransition(new Oss\Models\ListBucketDataRedundancyTransitionRequest(
$bucketName,
));
$this->assertEquals(200, $listResult->statusCode);
$this->assertEquals('OK', $listResult->status);
$this->assertEquals(True, count($listResult->headers) > 0);
$this->assertEquals(24, strlen($listResult->requestId));
// ListUserDataRedundancyTransition
$listResult = $client->listUserDataRedundancyTransition(new Oss\Models\ListUserDataRedundancyTransitionRequest());
$this->assertEquals(200, $listResult->statusCode);
$this->assertEquals('OK', $listResult->status);
$this->assertEquals(True, count($listResult->headers) > 0);
$this->assertEquals(24, strlen($listResult->requestId));
// DeleteBucketDataRedundancyTransition
$delResult = $client->deleteBucketDataRedundancyTransition(new Oss\Models\DeleteBucketDataRedundancyTransitionRequest(
$bucketName, $createResult->bucketDataRedundancyTransition->taskId
));
$this->assertEquals(204, $delResult->statusCode);
$this->assertEquals('No Content', $delResult->status);
$this->assertEquals(True, count($delResult->headers) > 0);
$this->assertEquals(24, strlen($delResult->requestId));
}
public function testBucketDataRedundancyTransitionFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . "-not-exist";
try {
$createResult = $client->createBucketDataRedundancyTransition(new Oss\Models\CreateBucketDataRedundancyTransitionRequest(
$bucketName,
targetRedundancyType: 'ZRS'
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error CreateBucketDataRedundancyTransition', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
try {
$getResult = $client->getBucketDataRedundancyTransition(new Oss\Models\GetBucketDataRedundancyTransitionRequest(
$bucketName, '123'
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetBucketDataRedundancyTransition', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
try {
$delResult = $client->deleteBucketDataRedundancyTransition(new Oss\Models\DeleteBucketDataRedundancyTransitionRequest(
$bucketName, '123'
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error DeleteBucketDataRedundancyTransition', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
try {
$listResult = $client->listBucketDataRedundancyTransition(new Oss\Models\ListBucketDataRedundancyTransitionRequest(
$bucketName,
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error ListBucketDataRedundancyTransition', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
try {
$client = $this->getInvalidAkClient();
$listResult = $client->listUserDataRedundancyTransition(new Oss\Models\ListUserDataRedundancyTransitionRequest());
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error ListUserDataRedundancyTransition', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
}
}

View File

@@ -0,0 +1,109 @@
<?php
namespace IntegrationTests;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestIntegration.php';
use AlibabaCloud\Oss\V2 as Oss;
class ClientBucketEncryptionTest extends TestIntegration
{
public function testBucketEncryption()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
// PutBucketEncryption
$putResult = $client->putBucketEncryption(new Oss\Models\PutBucketEncryptionRequest(
$bucketName,
new Oss\Models\ServerSideEncryptionRule(
new Oss\Models\ApplyServerSideEncryptionByDefault(
sseAlgorithm: 'KMS',
kmsDataEncryption: 'SM4'
))
));
$this->assertEquals(200, $putResult->statusCode);
$this->assertEquals('OK', $putResult->status);
$this->assertEquals(True, count($putResult->headers) > 0);
$this->assertEquals(24, strlen($putResult->requestId));
// GetBucketEncryption
$getResult = $client->getBucketEncryption(new Oss\Models\GetBucketEncryptionRequest(
$bucketName
));
$this->assertEquals(200, $getResult->statusCode);
$this->assertEquals('OK', $getResult->status);
$this->assertEquals(True, count($getResult->headers) > 0);
$this->assertEquals(24, strlen($getResult->requestId));
// DeleteBucketEncryption
$delResult = $client->deleteBucketEncryption(new Oss\Models\DeleteBucketEncryptionRequest(
$bucketName
));
$this->assertEquals(204, $delResult->statusCode);
$this->assertEquals('No Content', $delResult->status);
$this->assertEquals(True, count($delResult->headers) > 0);
$this->assertEquals(24, strlen($delResult->requestId));
}
public function testBucketEncryptionFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . "-not-exist";
// PutBucketEncryption
try {
$putResult = $client->putBucketEncryption(new Oss\Models\PutBucketEncryptionRequest(
$bucketName,
new Oss\Models\ServerSideEncryptionRule(
new Oss\Models\ApplyServerSideEncryptionByDefault(
sseAlgorithm: 'KMS',
kmsDataEncryption: 'SM4'
))
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error PutBucketEncryption', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// GetBucketEncryption
try {
$getResult = $client->getBucketEncryption(new Oss\Models\GetBucketEncryptionRequest(
$bucketName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetBucketEncryption', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// DeleteBucketEncryption
try {
$delResult = $client->deleteBucketEncryption(new Oss\Models\DeleteBucketEncryptionRequest(
$bucketName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error DeleteBucketEncryption', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
}
}

View File

@@ -0,0 +1,116 @@
<?php
namespace IntegrationTests;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestIntegration.php';
use AlibabaCloud\Oss\V2 as Oss;
class ClientBucketHttpsConfigTest extends TestIntegration
{
public function testBucketHttpsConfig()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
// PutBucketHttpsConfig
$putResult = $client->putBucketHttpsConfig(new Oss\Models\PutBucketHttpsConfigRequest(
$bucketName,
new Oss\Models\HttpsConfiguration(
tls: new Oss\Models\TLS(
tlsVersions: ['TLSv1.2', 'TLSv1.3'],
enable: true
)
)
));
$this->assertEquals(200, $putResult->statusCode);
$this->assertEquals('OK', $putResult->status);
$this->assertEquals(True, count($putResult->headers) > 0);
$this->assertEquals(24, strlen($putResult->requestId));
// GetBucketHttpsConfig
$getResult = $client->getBucketHttpsConfig(new Oss\Models\GetBucketHttpsConfigRequest(
$bucketName
));
$this->assertEquals(200, $getResult->statusCode);
$this->assertEquals('OK', $getResult->status);
$this->assertEquals(True, count($getResult->headers) > 0);
$this->assertEquals(24, strlen($getResult->requestId));
// PutBucketHttpsConfig
$putResult = $client->putBucketHttpsConfig(new Oss\Models\PutBucketHttpsConfigRequest(
$bucketName,
new Oss\Models\HttpsConfiguration(
tls: new Oss\Models\TLS(
tlsVersions: ['TLSv1.2', 'TLSv1.3'],
enable: true
),
cipherSuite: new Oss\Models\CipherSuite(
enable: true,
strongCipherSuite: false,
customCipherSuites: ['ECDHE-ECDSA-AES128-SHA256', 'ECDHE-RSA-AES128-GCM-SHA256', 'ECDHE-ECDSA-AES256-CCM8'],
tls13CustomCipherSuites: ['TLS_AES_256_GCM_SHA384', 'TLS_AES_128_GCM_SHA256', 'TLS_CHACHA20_POLY1305_SHA256'],
)
),
));
$this->assertEquals(200, $putResult->statusCode);
$this->assertEquals('OK', $putResult->status);
$this->assertEquals(True, count($putResult->headers) > 0);
$this->assertEquals(24, strlen($putResult->requestId));
// GetBucketHttpsConfig
$getResult = $client->getBucketHttpsConfig(new Oss\Models\GetBucketHttpsConfigRequest(
$bucketName
));
$this->assertEquals(200, $getResult->statusCode);
$this->assertEquals('OK', $getResult->status);
$this->assertEquals(True, count($getResult->headers) > 0);
$this->assertEquals(24, strlen($getResult->requestId));
}
public function testBucketHttpsConfigFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . "-not-exist";
// PutBucketHttpsConfig
try {
$putResult = $client->putBucketHttpsConfig(new Oss\Models\PutBucketHttpsConfigRequest(
$bucketName,
new Oss\Models\HttpsConfiguration(
tls: new Oss\Models\TLS(
tlsVersions: ['TLSv1.2', 'TLSv1.3'],
enable: true
)
)
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error PutBucketHttpsConfig', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// GetBucketHttpsConfig
try {
$getResult = $client->getBucketHttpsConfig(new Oss\Models\GetBucketHttpsConfigRequest(
$bucketName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetBucketHttpsConfig', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
}
}

View File

@@ -0,0 +1,190 @@
<?php
namespace IntegrationTests;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestIntegration.php';
use AlibabaCloud\Oss\V2 as Oss;
class ClientBucketInventoryTest extends TestIntegration
{
public function testBucketInventory()
{
if (self::$USER_ID === false) {
throw new \Exception('user id can not be empty!');
}
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
$id = 'report1' . rand(0, 100) . '-' . time();
// PutBucketInventory
$putResult = $client->putBucketInventory(new Oss\Models\PutBucketInventoryRequest(
$bucketName,
inventoryId: $id,
inventoryConfiguration: new Oss\Models\InventoryConfiguration(
isEnabled: true,
destination: new Oss\Models\InventoryDestination(
ossBucketDestination: new Oss\Models\InventoryOSSBucketDestination(
bucket: 'acs:oss:::' . $bucketName,
prefix: 'prefix1',
format: Oss\Models\InventoryFormatType::CSV,
accountId: self::$USER_ID,
roleArn: 'acs:ram::' . self::$USER_ID . ':role/AliyunOSSRole'
)
),
schedule: new Oss\Models\InventorySchedule(
frequency: Oss\Models\InventoryFrequencyType::DAILY
),
filter: new Oss\Models\InventoryFilter(
prefix: 'filterPrefix',
lastModifyBeginTimeStamp: 1637883649,
lastModifyEndTimeStamp: 1638347592,
lowerSizeBound: 1024,
upperSizeBound: 1048576,
storageClass: 'Standard,IA'
),
includedObjectVersions: 'All',
optionalFields: new Oss\Models\OptionalFields(
fields: array(
Oss\Models\InventoryOptionalFieldType::STORAGE_CLASS
)
),
id: $id
)));
$this->assertEquals(200, $putResult->statusCode);
$this->assertEquals('OK', $putResult->status);
$this->assertEquals(True, count($putResult->headers) > 0);
$this->assertEquals(24, strlen($putResult->requestId));
// GetBucketInventory
$getResult = $client->getBucketInventory(new Oss\Models\GetBucketInventoryRequest(
$bucketName, $id
));
$this->assertEquals(200, $getResult->statusCode);
$this->assertEquals('OK', $getResult->status);
$this->assertEquals(True, count($getResult->headers) > 0);
$this->assertEquals(24, strlen($getResult->requestId));
// ListBucketInventory
$listResult = $client->listBucketInventory(new Oss\Models\ListBucketInventoryRequest(
$bucketName
));
$this->assertEquals(200, $listResult->statusCode);
$this->assertEquals('OK', $listResult->status);
$this->assertEquals(True, count($listResult->headers) > 0);
$this->assertEquals(24, strlen($listResult->requestId));
// DeleteBucketInventory
$delResult = $client->deleteBucketInventory(new Oss\Models\DeleteBucketInventoryRequest(
$bucketName, $id
));
$this->assertEquals(204, $delResult->statusCode);
$this->assertEquals('No Content', $delResult->status);
$this->assertEquals(True, count($delResult->headers) > 0);
$this->assertEquals(24, strlen($delResult->requestId));
}
public function testBucketInventoryFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . "-not-exist";
$id = 'report1' . rand(0, 100) . '-' . time();
// PutBucketInventory
try {
$putResult = $client->putBucketInventory(new Oss\Models\PutBucketInventoryRequest(
$bucketName,
inventoryId: $id,
inventoryConfiguration: new Oss\Models\InventoryConfiguration(
isEnabled: true,
destination: new Oss\Models\InventoryDestination(
ossBucketDestination: new Oss\Models\InventoryOSSBucketDestination(
bucket: 'acs:oss:::' . $bucketName,
prefix: 'prefix1',
format: Oss\Models\InventoryFormatType::CSV,
accountId: self::$USER_ID,
roleArn: 'acs:ram::' . self::$USER_ID . ':role/AliyunOSSRole'
)
),
schedule: new Oss\Models\InventorySchedule(
frequency: Oss\Models\InventoryFrequencyType::DAILY
),
filter: new Oss\Models\InventoryFilter(
prefix: 'filterPrefix',
lastModifyBeginTimeStamp: 1637883649,
lastModifyEndTimeStamp: 1638347592,
lowerSizeBound: 1024,
upperSizeBound: 1048576,
storageClass: 'Standard,IA'
),
includedObjectVersions: 'All',
optionalFields: new Oss\Models\OptionalFields(
fields: array(
Oss\Models\InventoryOptionalFieldType::STORAGE_CLASS
)
),
id: $id
)));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error PutBucketInventory', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// GetBucketInventory
try {
$getResult = $client->getBucketInventory(new Oss\Models\GetBucketInventoryRequest(
$bucketName, $id
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetBucketInventory', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// ListBucketInventory
try {
$getResult = $client->listBucketInventory(new Oss\Models\ListBucketInventoryRequest(
$bucketName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error ListBucketInventory', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// DeleteBucketInventory
try {
$delResult = $client->deleteBucketInventory(new Oss\Models\DeleteBucketInventoryRequest(
$bucketName, $id
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error DeleteBucketInventory', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
}
}

View File

@@ -0,0 +1,127 @@
<?php
namespace IntegrationTests;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestIntegration.php';
use AlibabaCloud\Oss\V2 as Oss;
use AlibabaCloud\Oss\V2\Models\LifecycleConfiguration;
class ClientBucketLifecycleTest extends TestIntegration
{
public function testBucketLifecycle()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
// PutBucketLifecycle
$putResult = $client->putBucketLifecycle(new Oss\Models\PutBucketLifecycleRequest(
$bucketName,
lifecycleConfiguration: new LifecycleConfiguration(
array(new Oss\Models\LifecycleRule(
prefix: 'log/',
transitions: array(
new Oss\Models\LifecycleRuleTransition(
days: 30,
storageClass: 'IA'
)
),
id: 'rule',
status: 'Enabled'
))
)
));
$this->assertEquals(200, $putResult->statusCode);
$this->assertEquals('OK', $putResult->status);
$this->assertEquals(True, count($putResult->headers) > 0);
$this->assertEquals(24, strlen($putResult->requestId));
// GetBucketLifecycle
$getResult = $client->getBucketLifecycle(new Oss\Models\GetBucketLifecycleRequest(
$bucketName
));
$this->assertEquals(200, $getResult->statusCode);
$this->assertEquals('OK', $getResult->status);
$this->assertEquals(True, count($getResult->headers) > 0);
$this->assertEquals(24, strlen($getResult->requestId));
// DeleteBucketLifecycle
$delResult = $client->deleteBucketLifecycle(new Oss\Models\DeleteBucketLifecycleRequest(
$bucketName
));
$this->assertEquals(204, $delResult->statusCode);
$this->assertEquals('No Content', $delResult->status);
$this->assertEquals(True, count($delResult->headers) > 0);
$this->assertEquals(24, strlen($delResult->requestId));
}
public function testBucketLifecycleFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . "-not-exist";
// PutBucketLifecycle
try {
$putResult = $client->putBucketLifecycle(new Oss\Models\PutBucketLifecycleRequest(
$bucketName,
lifecycleConfiguration: new LifecycleConfiguration(
array(new Oss\Models\LifecycleRule(
prefix: 'log/',
transitions: array(
new Oss\Models\LifecycleRuleTransition(
days: 30,
storageClass: 'IA'
)
),
id: 'rule',
status: 'Enabled'
))
)
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error PutBucketLifecycle', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// GetBucketLifecycle
try {
$getResult = $client->getBucketLifecycle(new Oss\Models\GetBucketLifecycleRequest(
$bucketName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetBucketLifecycle', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// DeleteBucketLifecycle
try {
$delResult = $client->deleteBucketLifecycle(new Oss\Models\DeleteBucketLifecycleRequest(
$bucketName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error DeleteBucketLifecycle', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
}
}

View File

@@ -0,0 +1,188 @@
<?php
namespace IntegrationTests;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestIntegration.php';
use AlibabaCloud\Oss\V2 as Oss;
class ClientBucketLoggingTest extends TestIntegration
{
public function testBucketLogging()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
// PutBucketLogging
$putResult = $client->putBucketLogging(new Oss\Models\PutBucketLoggingRequest(
$bucketName,
new Oss\Models\BucketLoggingStatus(
new Oss\Models\LoggingEnabled(
targetBucket: $bucketName, targetPrefix: 'TargetPrefix', loggingRole: 'AliyunOSSLoggingDefaultRole'
)
)
));
$this->assertEquals(200, $putResult->statusCode);
$this->assertEquals('OK', $putResult->status);
$this->assertEquals(True, count($putResult->headers) > 0);
$this->assertEquals(24, strlen($putResult->requestId));
// GetBucketLogging
$getResult = $client->getBucketLogging(new Oss\Models\GetBucketLoggingRequest(
$bucketName
));
$this->assertEquals(200, $getResult->statusCode);
$this->assertEquals('OK', $getResult->status);
$this->assertEquals(True, count($getResult->headers) > 0);
$this->assertEquals(24, strlen($getResult->requestId));
// DeleteBucketLogging
$delResult = $client->deleteBucketLogging(new Oss\Models\DeleteBucketLoggingRequest(
$bucketName
));
$this->assertEquals(204, $delResult->statusCode);
$this->assertEquals('No Content', $delResult->status);
$this->assertEquals(True, count($delResult->headers) > 0);
$this->assertEquals(24, strlen($delResult->requestId));
// PutUserDefinedLogFieldsConfig
$putResult = $client->putUserDefinedLogFieldsConfig(new Oss\Models\PutUserDefinedLogFieldsConfigRequest(
$bucketName,
new Oss\Models\UserDefinedLogFieldsConfiguration(
paramSet: new Oss\Models\LoggingParamSet(['param1', 'param2']), headerSet: new Oss\Models\LoggingHeaderSet(['header1', 'header2'])
)
));
$this->assertEquals(200, $putResult->statusCode);
$this->assertEquals('OK', $putResult->status);
$this->assertEquals(True, count($putResult->headers) > 0);
$this->assertEquals(24, strlen($putResult->requestId));
// GetUserDefinedLogFieldsConfig
$getResult = $client->getUserDefinedLogFieldsConfig(new Oss\Models\GetUserDefinedLogFieldsConfigRequest(
$bucketName
));
$this->assertEquals(200, $getResult->statusCode);
$this->assertEquals('OK', $getResult->status);
$this->assertEquals(True, count($getResult->headers) > 0);
$this->assertEquals(24, strlen($getResult->requestId));
// DeleteUserDefinedLogFieldsConfig
$delResult = $client->deleteUserDefinedLogFieldsConfig(new Oss\Models\DeleteUserDefinedLogFieldsConfigRequest(
$bucketName
));
$this->assertEquals(204, $delResult->statusCode);
$this->assertEquals('No Content', $delResult->status);
$this->assertEquals(True, count($delResult->headers) > 0);
$this->assertEquals(24, strlen($delResult->requestId));
}
public function testBucketLoggingFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . "-not-exist";
try {
$putResult = $client->putBucketLogging(new Oss\Models\PutBucketLoggingRequest(
$bucketName,
new Oss\Models\BucketLoggingStatus(
new Oss\Models\LoggingEnabled(
targetBucket: $bucketName, targetPrefix: 'TargetPrefix'
)
)
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error PutBucketLogging', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
try {
$getResult = $client->getBucketLogging(new Oss\Models\GetBucketLoggingRequest(
$bucketName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetBucketLogging', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
try {
$delResult = $client->deleteBucketLogging(new Oss\Models\DeleteBucketLoggingRequest(
$bucketName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error DeleteBucketLogging', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
try {
$putResult = $client->putUserDefinedLogFieldsConfig(new Oss\Models\PutUserDefinedLogFieldsConfigRequest(
$bucketName,
new Oss\Models\UserDefinedLogFieldsConfiguration(
paramSet: new Oss\Models\LoggingParamSet(['param1', 'param2']), headerSet: new Oss\Models\LoggingHeaderSet(['header1', 'header2'])
)
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error PutUserDefinedLogFieldsConfig', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
try {
$getResult = $client->getUserDefinedLogFieldsConfig(new Oss\Models\GetUserDefinedLogFieldsConfigRequest(
$bucketName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetUserDefinedLogFieldsConfig', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
try {
$delResult = $client->deleteUserDefinedLogFieldsConfig(new Oss\Models\DeleteUserDefinedLogFieldsConfigRequest(
$bucketName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error DeleteUserDefinedLogFieldsConfig', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
}
}

View File

@@ -0,0 +1,184 @@
<?php
namespace IntegrationTests;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestIntegration.php';
use AlibabaCloud\Oss\V2 as Oss;
class ClientBucketMetaQueryTest extends TestIntegration
{
public function testBucketMetaQuery()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
// OpenMetaQuery
$putResult = $client->openMetaQuery(new Oss\Models\OpenMetaQueryRequest(
$bucketName,
));
$this->assertEquals(200, $putResult->statusCode);
$this->assertEquals('OK', $putResult->status);
$this->assertEquals(True, count($putResult->headers) > 0);
$this->assertEquals(24, strlen($putResult->requestId));
// GetMetaQueryStatus
$getResult = $client->getMetaQueryStatus(new Oss\Models\GetMetaQueryStatusRequest(
$bucketName
));
$this->assertEquals(200, $getResult->statusCode);
$this->assertEquals('OK', $getResult->status);
$this->assertEquals(True, count($getResult->headers) > 0);
$this->assertEquals(24, strlen($getResult->requestId));
// DoMetaQuery
$request = new Oss\Models\DoMetaQueryRequest($bucketName, new Oss\Models\MetaQuery(
maxResults: 5,
query: "{'Field': 'Size','Value': '1048576','Operation': 'gt'}",
sort: 'Size',
order: Oss\Models\MetaQueryOrderType::ASC,
aggregations: new Oss\Models\MetaQueryAggregations(
[
new Oss\Models\MetaQueryAggregation(
field: 'Size',
operation: 'sum'
),
new Oss\Models\MetaQueryAggregation(
field: 'Size',
operation: 'max'
),
]
),
));
$doResult = $client->doMetaQuery($request);
$this->assertEquals(200, $doResult->statusCode);
$this->assertEquals('OK', $doResult->status);
$this->assertEquals(True, count($doResult->headers) > 0);
$this->assertEquals(24, strlen($doResult->requestId));
// CloseMetaQuery
$closeResult = $client->closeMetaQuery(new Oss\Models\CloseMetaQueryRequest($bucketName));
$this->assertEquals(200, $closeResult->statusCode);
$this->assertEquals('OK', $closeResult->status);
$this->assertEquals(True, count($closeResult->headers) > 0);
$this->assertEquals(24, strlen($closeResult->requestId));
$bucketNameAiSearch = self::$BUCKETNAME_PREFIX . strval(rand(0, 100)) . '-' . strval(time()) . '-semantic';
$client->putBucket(new Oss\Models\PutBucketRequest($bucketNameAiSearch));
// OpenMetaQuery with semantic
$putResult = $client->openMetaQuery(new Oss\Models\OpenMetaQueryRequest(
$bucketNameAiSearch, 'semantic'
));
$this->assertEquals(200, $putResult->statusCode);
$this->assertEquals('OK', $putResult->status);
$this->assertEquals(True, count($putResult->headers) > 0);
$this->assertEquals(24, strlen($putResult->requestId));
// DoMetaQuery with semantic
$request = new Oss\Models\DoMetaQueryRequest($bucketNameAiSearch, new Oss\Models\MetaQuery(
maxResults: 99,
query: "Overlook the snow-covered forest",
mediaTypes: new Oss\Models\MetaQueryMediaTypes('image'),
simpleQuery: '{"Operation":"gt", "Field": "Size", "Value": "30"}',
), 'semantic');
$doResult = $client->doMetaQuery($request);
$this->assertEquals(200, $doResult->statusCode);
$this->assertEquals('OK', $doResult->status);
$this->assertEquals(True, count($doResult->headers) > 0);
$this->assertEquals(24, strlen($doResult->requestId));
$client->deleteBucket(new Oss\Models\DeleteBucketRequest($bucketNameAiSearch));
}
public function testBucketMetaQueryFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . "-not-exist";
// OpenMetaQuery
try {
$putResult = $client->openMetaQuery(new Oss\Models\OpenMetaQueryRequest(
$bucketName,
));
$this->assertEquals(200, $putResult->statusCode);
$this->assertEquals('OK', $putResult->status);
$this->assertEquals(True, count($putResult->headers) > 0);
$this->assertEquals(24, strlen($putResult->requestId));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error OpenMetaQuery', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// GetMetaQueryStatus
try {
$getResult = $client->getMetaQueryStatus(new Oss\Models\GetMetaQueryStatusRequest(
$bucketName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetMetaQueryStatus', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// DoMetaQuery
try {
$request = new Oss\Models\DoMetaQueryRequest($bucketName, new Oss\Models\MetaQuery(
maxResults: 5,
query: "{'Field': 'Size','Value': '1048576','Operation': 'gt'}",
sort: 'Size',
order: Oss\Models\MetaQueryOrderType::ASC,
aggregations: new Oss\Models\MetaQueryAggregations(
[
new Oss\Models\MetaQueryAggregation(
field: 'Size',
operation: 'sum'
),
new Oss\Models\MetaQueryAggregation(
field: 'Size',
operation: 'max'
),
]
),
));
$doResult = $client->doMetaQuery($request);
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error DoMetaQuery', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// CloseMetaQuery
try {
$closeResult = $client->closeMetaQuery(new Oss\Models\CloseMetaQueryRequest($bucketName));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error CloseMetaQuery', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
}
}

View File

@@ -0,0 +1,112 @@
<?php
namespace IntegrationTests;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestIntegration.php';
use AlibabaCloud\Oss\V2 as Oss;
class ClientBucketOverwriteTest extends TestIntegration
{
public function testBucketOverwriteConfig()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
// PutBucketOverwriteConfig
$putResult = $client->putBucketOverwriteConfig(new Oss\Models\PutBucketOverwriteConfigRequest(
$bucketName,
new Oss\Models\OverwriteConfiguration(
array(
new Oss\Models\OverwriteRule(
'forbid', null, null, null, 'rule-001'
)
)
)
));
$this->assertEquals(200, $putResult->statusCode);
$this->assertEquals('OK', $putResult->status);
$this->assertEquals(True, count($putResult->headers) > 0);
$this->assertEquals(24, strlen($putResult->requestId));
// GetBucketOverwriteConfig
$getResult = $client->getBucketOverwriteConfig(new Oss\Models\GetBucketOverwriteConfigRequest(
$bucketName
));
$this->assertEquals(200, $getResult->statusCode);
$this->assertEquals('OK', $getResult->status);
$this->assertEquals(True, count($getResult->headers) > 0);
$this->assertEquals(24, strlen($getResult->requestId));
// DeleteBucketOverwriteConfig
$delResult = $client->deleteBucketOverwriteConfig(new Oss\Models\DeleteBucketOverwriteConfigRequest(
$bucketName
));
$this->assertEquals(204, $delResult->statusCode);
$this->assertEquals('No Content', $delResult->status);
$this->assertEquals(True, count($delResult->headers) > 0);
$this->assertEquals(24, strlen($delResult->requestId));
}
public function testBucketOverwriteConfigFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . "-not-exist";
try {
$putResult = $client->putBucketOverwriteConfig(new Oss\Models\PutBucketOverwriteConfigRequest(
$bucketName,
new Oss\Models\OverwriteConfiguration(
array(
new Oss\Models\OverwriteRule(
'forbid', null, null, null, 'rule-001'
)
)
)
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error PutBucketOverwriteConfig', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('MalformedXML', $se->getErrorCode());
$this->assertEquals(400, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
try {
$getResult = $client->getBucketOverwriteConfig(new Oss\Models\GetBucketOverwriteConfigRequest(
$bucketName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetBucketOverwriteConfig', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
try {
$delResult = $client->deleteBucketOverwriteConfig(new Oss\Models\DeleteBucketOverwriteConfigRequest(
$bucketName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error DeleteBucketOverwriteConfig', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
}
}

View File

@@ -0,0 +1,136 @@
<?php
namespace IntegrationTests;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestIntegration.php';
use AlibabaCloud\Oss\V2 as Oss;
use AlibabaCloud\Oss\V2\Models\LifecycleConfiguration;
class ClientBucketPolicyTest extends TestIntegration
{
public function testBucketPolicy()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
$client->putBucketPublicAccessBlock(new Oss\Models\PutBucketPublicAccessBlockRequest(
$bucketName,
new Oss\Models\PublicAccessBlockConfiguration(
false
)
));
// PutBucketPolicy
$putResult = $client->putBucketPolicy(new Oss\Models\PutBucketPolicyRequest(
$bucketName,
'{"Version":"1","Statement":[{"Action":["oss:PutObject","oss:GetObject"],"Effect":"Allow","Resource":["acs:oss:*:*:*"]}]}'
));
$this->assertEquals(200, $putResult->statusCode);
$this->assertEquals('OK', $putResult->status);
$this->assertEquals(True, count($putResult->headers) > 0);
$this->assertEquals(24, strlen($putResult->requestId));
// GetBucketPolicy
$getResult = $client->getBucketPolicy(new Oss\Models\GetBucketPolicyRequest(
$bucketName
));
$this->assertEquals(200, $getResult->statusCode);
$this->assertEquals('OK', $getResult->status);
$this->assertEquals(True, count($getResult->headers) > 0);
$this->assertEquals(24, strlen($getResult->requestId));
// GetBucketPolicyStatus
$getResult2 = $client->getBucketPolicyStatus(new Oss\Models\GetBucketPolicyStatusRequest(
$bucketName
));
$this->assertEquals(200, $getResult2->statusCode);
$this->assertEquals('OK', $getResult2->status);
$this->assertEquals(True, count($getResult2->headers) > 0);
$this->assertEquals(24, strlen($getResult2->requestId));
// DeleteBucketPolicy
$delResult = $client->deleteBucketPolicy(new Oss\Models\DeleteBucketPolicyRequest(
$bucketName
));
$this->assertEquals(204, $delResult->statusCode);
$this->assertEquals('No Content', $delResult->status);
$this->assertEquals(True, count($delResult->headers) > 0);
$this->assertEquals(24, strlen($delResult->requestId));
}
public function testBucketTransferAccelerationFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . "-not-exist";
// PutBucketPolicy
try {
$putResult = $client->putBucketPolicy(new Oss\Models\PutBucketPolicyRequest(
$bucketName,
'{"Version":"1","Statement":[{"Action":["oss:PutObject","oss:GetObject"],"Effect":"Allow","Resource":["acs:oss:*:*:*"]}]}'
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error PutBucketPolicy', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// GetBucketPolicy
try {
$getResult = $client->getBucketPolicy(new Oss\Models\GetBucketPolicyRequest(
$bucketName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetBucketPolicy', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// GetBucketPolicyStatus
try {
$getResult = $client->getBucketPolicyStatus(new Oss\Models\GetBucketPolicyStatusRequest(
$bucketName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetBucketPolicyStatus', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// DeleteBucketPolicy
try {
$delResult = $client->deleteBucketPolicy(new Oss\Models\DeleteBucketPolicyRequest(
$bucketName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error DeleteBucketPolicy', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
}
}

View File

@@ -0,0 +1,90 @@
<?php
namespace IntegrationTests;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestIntegration.php';
use AlibabaCloud\Oss\V2 as Oss;
class ClientBucketPublicAccessBlockTest extends TestIntegration
{
public function testBucketPublicAccessBlock()
{
$client = $this->getDefaultClient();
$bucket = self::$bucketName;
// PutBucketPublicAccessBlock
$putResult = $client->putBucketPublicAccessBlock(new Oss\Models\PutBucketPublicAccessBlockRequest(
$bucket, new Oss\Models\PublicAccessBlockConfiguration(true)
));
$this->assertEquals(200, $putResult->statusCode);
$this->assertEquals('OK', $putResult->status);
$this->assertEquals(True, count($putResult->headers) > 0);
$this->assertEquals(24, strlen($putResult->requestId));
// GetBucketPublicAccessBlock
$getResult = $client->getBucketPublicAccessBlock(new Oss\Models\GetBucketPublicAccessBlockRequest($bucket));
$this->assertEquals(200, $getResult->statusCode);
$this->assertEquals('OK', $getResult->status);
$this->assertEquals(True, count($getResult->headers) > 0);
$this->assertEquals(24, strlen($getResult->requestId));
// DeleteBucketPublicAccessBlock
$delResult = $client->deleteBucketPublicAccessBlock(new Oss\Models\DeleteBucketPublicAccessBlockRequest($bucket));
$this->assertEquals(204, $delResult->statusCode);
$this->assertEquals('No Content', $delResult->status);
$this->assertEquals(True, count($delResult->headers) > 0);
$this->assertEquals(24, strlen($delResult->requestId));
}
public function testBucketPublicAccessBlockFail()
{
$client = $this->getInvalidAkClient();
$bucketName = self::$bucketName;
// PutBucketPublicAccessBlock
try {
$putResult = $client->putBucketPublicAccessBlock(new Oss\Models\PutBucketPublicAccessBlockRequest(
$bucketName, new Oss\Models\PublicAccessBlockConfiguration(true)
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error PutBucketPublicAccessBlock', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// GetBucketPublicAccessBlock
try {
$getResult = $client->getBucketPublicAccessBlock(new Oss\Models\GetBucketPublicAccessBlockRequest($bucketName));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetBucketPublicAccessBlock', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// DeleteBucketPublicAccessBlock
try {
$delResult = $client->deleteBucketPublicAccessBlock(new Oss\Models\DeleteBucketPublicAccessBlockRequest($bucketName));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error DeleteBucketPublicAccessBlock', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
}
}

View File

@@ -0,0 +1,83 @@
<?php
namespace IntegrationTests;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestIntegration.php';
use AlibabaCloud\Oss\V2 as Oss;
use AlibabaCloud\Oss\V2\Models\LifecycleConfiguration;
class ClientBucketRefererTest extends TestIntegration
{
public function testBucketReferer()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
// PutBucketReferer
$putResult = $client->putBucketReferer(new Oss\Models\PutBucketRefererRequest(
$bucketName,
refererConfiguration: new Oss\Models\RefererConfiguration(
allowEmptyReferer: false,
refererList: new Oss\Models\RefererList([""]),
)
));
$this->assertEquals(200, $putResult->statusCode);
$this->assertEquals('OK', $putResult->status);
$this->assertEquals(True, count($putResult->headers) > 0);
$this->assertEquals(24, strlen($putResult->requestId));
// GetBucketReferer
$getResult = $client->getBucketReferer(new Oss\Models\GetBucketRefererRequest(
$bucketName
));
$this->assertEquals(200, $getResult->statusCode);
$this->assertEquals('OK', $getResult->status);
$this->assertEquals(True, count($getResult->headers) > 0);
$this->assertEquals(24, strlen($getResult->requestId));
}
public function testBucketRefererFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . "-not-exist";
// PutBucketReferer
try {
$putResult = $client->putBucketReferer(new Oss\Models\PutBucketRefererRequest(
$bucketName,
refererConfiguration: new Oss\Models\RefererConfiguration(
allowEmptyReferer: false,
refererList: new Oss\Models\RefererList([""]),
)
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error PutBucketReferer', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// GetBucketReferer
try {
$getResult = $client->getBucketReferer(new Oss\Models\GetBucketRefererRequest(
$bucketName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetBucketReferer', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
}
}

View File

@@ -0,0 +1,246 @@
<?php
namespace IntegrationTests;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestIntegration.php';
use AlibabaCloud\Oss\V2 as Oss;
class ClientBucketReplicationTest extends TestIntegration
{
public function testBucketReplication()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
$targetBucketName = self::randomBucketName() . '-target';
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(new Oss\Credentials\StaticCredentialsProvider(
self::$ACCESS_ID,
self::$ACCESS_KEY
));
$cfg->setRegion('cn-beijing');
$client1 = new Oss\Client($cfg);
$client1->putBucket(new Oss\Models\PutBucketRequest(
$targetBucketName
));
// PutBucketReplication
$putResult = $client->putBucketReplication(new Oss\Models\PutBucketReplicationRequest(
$bucketName,
new Oss\Models\ReplicationConfiguration(
array(
new Oss\Models\ReplicationRule(
sourceSelectionCriteria: new Oss\Models\ReplicationSourceSelectionCriteria(
sseKmsEncryptedObjects: new Oss\Models\SseKmsEncryptedObjects(
status: 'Enabled'
)
),
destination: new Oss\Models\ReplicationDestination(
bucket: $targetBucketName,
location: 'oss-cn-beijing',
transferType: Oss\Models\TransferType::INTERNAL
),
historicalObjectReplication: Oss\Models\HistoricalObjectReplicationType::ENABLED,
rtc: new Oss\Models\ReplicationTimeControl(status: 'enabled')
)
)
)
));
$this->assertEquals(200, $putResult->statusCode);
$this->assertEquals('OK', $putResult->status);
$this->assertEquals(True, count($putResult->headers) > 0);
$this->assertEquals(24, strlen($putResult->requestId));
// GetBucketReplication
$getResult = $client->getBucketReplication(new Oss\Models\GetBucketReplicationRequest(
$bucketName
));
$this->assertEquals(200, $getResult->statusCode);
$this->assertEquals('OK', $getResult->status);
$this->assertEquals(True, count($getResult->headers) > 0);
$this->assertEquals(24, strlen($getResult->requestId));
// GetBucketReplicationLocation
$getLocationResult = $client->getBucketReplicationLocation(new Oss\Models\GetBucketReplicationLocationRequest(
$bucketName
));
$this->assertEquals(200, $getLocationResult->statusCode);
$this->assertEquals('OK', $getLocationResult->status);
$this->assertEquals(True, count($getLocationResult->headers) > 0);
$this->assertEquals(24, strlen($getLocationResult->requestId));
// GetBucketReplicationProgress
$getProgressResult = $client->getBucketReplicationProgress(new Oss\Models\GetBucketReplicationProgressRequest(
$bucketName,
$getResult->replicationConfiguration->rules[0]->id
));
$this->assertEquals(200, $getProgressResult->statusCode);
$this->assertEquals('OK', $getProgressResult->status);
$this->assertEquals(True, count($getProgressResult->headers) > 0);
$this->assertEquals(24, strlen($getProgressResult->requestId));
// PutBucketRtc
$putRtcResult = $client->putBucketRtc(new Oss\Models\PutBucketRtcRequest(
$bucketName,
rtcConfiguration: new Oss\Models\RtcConfiguration(
rtc: new Oss\Models\ReplicationTimeControl(
status: 'disabled'
),
id: $getResult->replicationConfiguration->rules[0]->id
),
));
$this->assertEquals(200, $putRtcResult->statusCode);
$this->assertEquals('OK', $putRtcResult->status);
$this->assertEquals(True, count($putRtcResult->headers) > 0);
$this->assertEquals(24, strlen($putRtcResult->requestId));
// DeleteBucketReplication
$delResult = $client->deleteBucketReplication(new Oss\Models\DeleteBucketReplicationRequest(
$bucketName,
replicationRules: new Oss\Models\ReplicationRules(
ids: [$getResult->replicationConfiguration->rules[0]->id]
)
),
);
$this->assertEquals(200, $delResult->statusCode);
$this->assertEquals('OK', $delResult->status);
$this->assertEquals(True, count($delResult->headers) > 0);
$this->assertEquals(24, strlen($delResult->requestId));
$client1->deleteBucket(new Oss\Models\DeleteBucketRequest(
$targetBucketName
));
}
public function testBucketReplicationFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . "-not-exist";
// PutBucketReplication
try {
$putResult = $client->putBucketReplication(new Oss\Models\PutBucketReplicationRequest(
$bucketName,
new Oss\Models\ReplicationConfiguration(
array(
new Oss\Models\ReplicationRule(
sourceSelectionCriteria: new Oss\Models\ReplicationSourceSelectionCriteria(
sseKmsEncryptedObjects: new Oss\Models\SseKmsEncryptedObjects(
status: 'Enabled'
)
),
destination: new Oss\Models\ReplicationDestination(
bucket: 'bucket-not-exist',
location: 'oss-cn-beijing',
transferType: Oss\Models\TransferType::INTERNAL
),
historicalObjectReplication: Oss\Models\HistoricalObjectReplicationType::ENABLED,
rtc: new Oss\Models\ReplicationTimeControl(status: 'enabled')
)
)
)
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error PutBucketReplication', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// GetBucketReplication
try {
$getResult = $client->getBucketReplication(new Oss\Models\GetBucketReplicationRequest(
$bucketName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetBucketReplication', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
try {
$getLocationResult = $client->getBucketReplicationLocation(new Oss\Models\GetBucketReplicationLocationRequest(
$bucketName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetBucketReplicationLocation', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
try {
$getProgressResult = $client->getBucketReplicationProgress(new Oss\Models\GetBucketReplicationProgressRequest(
$bucketName,
'rule-id'
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetBucketReplicationProgress', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
try {
$putRtcResult = $client->putBucketRtc(new Oss\Models\PutBucketRtcRequest(
$bucketName,
rtcConfiguration: new Oss\Models\RtcConfiguration(
rtc: new Oss\Models\ReplicationTimeControl(
status: 'disabled'
),
id: 'rule-id'
),
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error PutBucketRtc', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
try {
$delResult = $client->deleteBucketReplication(new Oss\Models\DeleteBucketReplicationRequest(
$bucketName,
replicationRules: new Oss\Models\ReplicationRules(
ids: ['rule-id']
)
),
);
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error DeleteBucketReplication', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
}
}

View File

@@ -0,0 +1,80 @@
<?php
namespace IntegrationTests;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestIntegration.php';
use AlibabaCloud\Oss\V2 as Oss;
class ClientBucketRequestPaymentTest extends TestIntegration
{
public function testBucketRequestPayment()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
// PutBucketRequestPayment
$putResult = $client->putBucketRequestPayment(new Oss\Models\PutBucketRequestPaymentRequest(
$bucketName,
new Oss\Models\RequestPaymentConfiguration(
'Requester'
)
));
$this->assertEquals(200, $putResult->statusCode);
$this->assertEquals('OK', $putResult->status);
$this->assertEquals(True, count($putResult->headers) > 0);
$this->assertEquals(24, strlen($putResult->requestId));
// GetBucketRequestPayment
$getResult = $client->getBucketRequestPayment(new Oss\Models\GetBucketRequestPaymentRequest(
$bucketName
));
$this->assertEquals(200, $getResult->statusCode);
$this->assertEquals('OK', $getResult->status);
$this->assertEquals(True, count($getResult->headers) > 0);
$this->assertEquals(24, strlen($getResult->requestId));
}
public function testBucketRequestPaymentFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . "-not-exist";
// PutBucketRequestPayment
try {
$putResult = $client->putBucketRequestPayment(new Oss\Models\PutBucketRequestPaymentRequest(
$bucketName,
new Oss\Models\RequestPaymentConfiguration(
'Requester'
)
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error PutBucketRequestPayment', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// GetBucketRequestPayment
try {
$getResult = $client->getBucketRequestPayment(new Oss\Models\GetBucketRequestPaymentRequest(
$bucketName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetBucketRequestPayment', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
}
}

View File

@@ -0,0 +1,78 @@
<?php
namespace IntegrationTests;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestIntegration.php';
use AlibabaCloud\Oss\V2 as Oss;
class ClientBucketResourceGroupTest extends TestIntegration
{
public function testBucketResourceGroup()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
// GetBucketResourceGroup
$getResult = $client->getBucketResourceGroup(new Oss\Models\GetBucketResourceGroupRequest(
$bucketName
));
$this->assertEquals(200, $getResult->statusCode);
$this->assertEquals('OK', $getResult->status);
$this->assertEquals(True, count($getResult->headers) > 0);
$this->assertEquals(24, strlen($getResult->requestId));
// PutBucketResourceGroup
$putResult = $client->putBucketResourceGroup(new Oss\Models\PutBucketResourceGroupRequest(
$bucketName,
new Oss\Models\BucketResourceGroupConfiguration(
$getResult->bucketResourceGroupConfiguration->resourceGroupId
)
));
$this->assertEquals(200, $putResult->statusCode);
$this->assertEquals('OK', $putResult->status);
$this->assertEquals(True, count($putResult->headers) > 0);
$this->assertEquals(24, strlen($putResult->requestId));
}
public function testBucketResourceGroupFail()
{
$client = $this->getInvalidAkClient();
$bucketName = self::$bucketName;
// PutBucketResourceGroup
try {
$putResult = $client->putBucketResourceGroup(new Oss\Models\PutBucketResourceGroupRequest(
$bucketName,
new Oss\Models\BucketResourceGroupConfiguration('rg-123')
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error PutBucketResourceGroup', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// GetBucketResourceGroup
try {
$getResult = $client->getBucketResourceGroup(new Oss\Models\GetBucketResourceGroupRequest(
$bucketName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetBucketResourceGroup', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
}
}

View File

@@ -0,0 +1,128 @@
<?php
namespace IntegrationTests;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestIntegration.php';
use AlibabaCloud\Oss\V2 as Oss;
class ClientBucketStyleTest extends TestIntegration
{
public function testBucketStyle()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
// PutStyle
$putResult = $client->putStyle(new Oss\Models\PutStyleRequest(
$bucketName,
styleName: 'test',
style: new Oss\Models\StyleContent('image/resize,p_50')
));
$this->assertEquals(200, $putResult->statusCode);
$this->assertEquals('OK', $putResult->status);
$this->assertEquals(True, count($putResult->headers) > 0);
$this->assertEquals(24, strlen($putResult->requestId));
// GetStyle
$getResult = $client->getStyle(new Oss\Models\GetStyleRequest(
$bucketName, 'test'
));
$this->assertEquals(200, $getResult->statusCode);
$this->assertEquals('OK', $getResult->status);
$this->assertEquals(True, count($getResult->headers) > 0);
$this->assertEquals(24, strlen($getResult->requestId));
// ListStyle
$listResult = $client->listStyle(new Oss\Models\ListStyleRequest(
$bucketName
));
$this->assertEquals(200, $listResult->statusCode);
$this->assertEquals('OK', $listResult->status);
$this->assertEquals(True, count($listResult->headers) > 0);
$this->assertEquals(24, strlen($listResult->requestId));
// DeleteStyle
$delResult = $client->deleteStyle(new Oss\Models\DeleteStyleRequest(
$bucketName, 'test'
));
$this->assertEquals(204, $delResult->statusCode);
$this->assertEquals('No Content', $delResult->status);
$this->assertEquals(True, count($delResult->headers) > 0);
$this->assertEquals(24, strlen($delResult->requestId));
}
public function testBucketStyleFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . "-not-exist";
// PutStyle
try {
$putResult = $client->putStyle(new Oss\Models\PutStyleRequest(
$bucketName,
styleName: 'test',
style: new Oss\Models\StyleContent('image/resize,p_50')
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error PutStyle', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// GetStyle
try {
$getResult = $client->getStyle(new Oss\Models\GetStyleRequest(
$bucketName, 'test'
));
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetStyle', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// ListStyle
try {
$listResult = $client->listStyle(new Oss\Models\ListStyleRequest(
$bucketName
));
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error ListStyle', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// DeleteStyle
try {
$delResult = $client->deleteStyle(new Oss\Models\DeleteStyleRequest(
$bucketName, 'test'
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error DeleteStyle', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
}
}

View File

@@ -0,0 +1,109 @@
<?php
namespace IntegrationTests;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestIntegration.php';
use AlibabaCloud\Oss\V2 as Oss;
use AlibabaCloud\Oss\V2\Models\LifecycleConfiguration;
class ClientBucketTagsTest extends TestIntegration
{
public function testBucketTags()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
// PutBucketTags
$putResult = $client->putBucketTags(new Oss\Models\PutBucketTagsRequest(
$bucketName,
tagging: new Oss\Models\Tagging(
tagSet: new Oss\Models\TagSet(
[new Oss\Models\Tag(key: 'key1', value: 'value1'), new Oss\Models\Tag(key: 'key2', value: 'value2')])
)
));
$this->assertEquals(200, $putResult->statusCode);
$this->assertEquals('OK', $putResult->status);
$this->assertEquals(True, count($putResult->headers) > 0);
$this->assertEquals(24, strlen($putResult->requestId));
// GetBucketTags
$getResult = $client->getBucketTags(new Oss\Models\GetBucketTagsRequest(
$bucketName
));
$this->assertEquals(200, $getResult->statusCode);
$this->assertEquals('OK', $getResult->status);
$this->assertEquals(True, count($getResult->headers) > 0);
$this->assertEquals(24, strlen($getResult->requestId));
// DeleteBucketTags
$delResult = $client->deleteBucketTags(new Oss\Models\DeleteBucketTagsRequest(
$bucketName
));
$this->assertEquals(204, $delResult->statusCode);
$this->assertEquals('No Content', $delResult->status);
$this->assertEquals(True, count($delResult->headers) > 0);
$this->assertEquals(24, strlen($delResult->requestId));
}
public function testBucketTagsFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . "-not-exist";
// PutBucketTags
try {
$putResult = $client->putBucketTags(new Oss\Models\PutBucketTagsRequest(
$bucketName,
tagging: new Oss\Models\Tagging(
tagSet: new Oss\Models\TagSet(
[new Oss\Models\Tag(key: 'key1', value: 'value1'), new Oss\Models\Tag(key: 'key2', value: 'value2')])
)
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error PutBucketTags', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// GetBucketTags
try {
$getResult = $client->getBucketTags(new Oss\Models\GetBucketTagsRequest(
$bucketName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetBucketTags', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// DeleteBucketTags
try {
$delResult = $client->deleteBucketTags(new Oss\Models\DeleteBucketTagsRequest(
$bucketName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error DeleteBucketTags', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
}
}

View File

@@ -0,0 +1,81 @@
<?php
namespace IntegrationTests;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestIntegration.php';
use AlibabaCloud\Oss\V2 as Oss;
use AlibabaCloud\Oss\V2\Models\LifecycleConfiguration;
class ClientBucketTransferAccelerationTest extends TestIntegration
{
public function testBucketTransferAcceleration()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
// PutBucketTransferAcceleration
$putResult = $client->putBucketTransferAcceleration(new Oss\Models\PutBucketTransferAccelerationRequest(
$bucketName,
new Oss\Models\TransferAccelerationConfiguration(
true
)
));
$this->assertEquals(200, $putResult->statusCode);
$this->assertEquals('OK', $putResult->status);
$this->assertEquals(True, count($putResult->headers) > 0);
$this->assertEquals(24, strlen($putResult->requestId));
// GetBucketTransferAcceleration
$getResult = $client->getBucketTransferAcceleration(new Oss\Models\GetBucketTransferAccelerationRequest(
$bucketName
));
$this->assertEquals(200, $getResult->statusCode);
$this->assertEquals('OK', $getResult->status);
$this->assertEquals(True, count($getResult->headers) > 0);
$this->assertEquals(24, strlen($getResult->requestId));
}
public function testBucketTransferAccelerationFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . "-not-exist";
// PutBucketTransferAcceleration
try {
$putResult = $client->putBucketTransferAcceleration(new Oss\Models\PutBucketTransferAccelerationRequest(
$bucketName,
new Oss\Models\TransferAccelerationConfiguration(
true
)
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error PutBucketTransferAcceleration', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// GetBucketTransferAcceleration
try {
$getResult = $client->getBucketTransferAcceleration(new Oss\Models\GetBucketTransferAccelerationRequest(
$bucketName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetBucketTransferAcceleration', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
}
}

View File

@@ -0,0 +1,242 @@
<?php
namespace IntegrationTests;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestIntegration.php';
use AlibabaCloud\Oss\V2 as Oss;
class ClientBucketWebsiteTest extends TestIntegration
{
public function testBucketWebsite()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
// PutBucketWebsite
$putResult = $client->putBucketWebsite(new Oss\Models\PutBucketWebsiteRequest(
$bucketName,
websiteConfiguration: new Oss\Models\WebsiteConfiguration(
indexDocument: new Oss\Models\IndexDocument(
suffix: 'index.html', supportSubDir: true, type: 0
),
errorDocument: new Oss\Models\ErrorDocument(
key: 'error.html', httpStatus: 404
)
)
));
$this->assertEquals(200, $putResult->statusCode);
$this->assertEquals('OK', $putResult->status);
$this->assertEquals(True, count($putResult->headers) > 0);
$this->assertEquals(24, strlen($putResult->requestId));
// GetBucketWebsite
$getResult = $client->getBucketWebsite(new Oss\Models\GetBucketWebsiteRequest(
$bucketName
));
$this->assertEquals(200, $getResult->statusCode);
$this->assertEquals('OK', $getResult->status);
$this->assertEquals(True, count($getResult->headers) > 0);
$this->assertEquals(24, strlen($getResult->requestId));
// DeleteBucketWebsite
$delResult = $client->deleteBucketWebsite(new Oss\Models\DeleteBucketWebsiteRequest(
$bucketName
));
$this->assertEquals(204, $delResult->statusCode);
$this->assertEquals('No Content', $delResult->status);
$this->assertEquals(True, count($delResult->headers) > 0);
$this->assertEquals(24, strlen($delResult->requestId));
// PutBucketWebsite
$putResult = $client->putBucketWebsite(new Oss\Models\PutBucketWebsiteRequest(
$bucketName,
websiteConfiguration: new Oss\Models\WebsiteConfiguration(
indexDocument: new Oss\Models\IndexDocument(
suffix: 'index.html', supportSubDir: true, type: 0
),
errorDocument: new Oss\Models\ErrorDocument(
key: 'error.html', httpStatus: 404
),
routingRules: new Oss\Models\RoutingRules([
new Oss\Models\RoutingRule(
redirect: new Oss\Models\RoutingRuleRedirect(
mirrorPassOriginalSlashes: false,
redirectType: 'Mirror',
mirrorURL: 'http://example.com/',
mirrorPassQueryString: true,
mirrorCheckMd5: true,
mirrorSNI: true,
replaceKeyPrefixWith: "def/",
mirrorFollowRedirect: true,
hostName: "example.com",
mirrorHeaders: new Oss\Models\MirrorHeaders(
passs: ["myheader-key1", "myheader-key2"],
sets: array(
new Oss\Models\MirrorHeaderSet(key: 'myheader-key5', value: 'myheader-value5'),
),
passAll: true,
),
passQueryString: true,
enableReplacePrefix: true,
httpRedirectCode: 301,
mirrorURLSlave: 'http://example.com/',
mirrorSaveOssMeta: true,
mirrorProxyPass: false,
mirrorAllowGetImageInfo: true,
mirrorAllowVideoSnapshot: false,
mirrorIsExpressTunnel: true,
mirrorDstRegion: 'cn-hangzhou',
mirrorUserLastModified: false,
mirrorSwitchAllErrors: true,
mirrorUsingRole: true,
mirrorRole: 'aliyun-test-role',
mirrorAllowHeadObject: true,
transparentMirrorResponseCodes: '400',
mirrorTaggings: new Oss\Models\MirrorTaggings(
taggings: [new Oss\Models\MirrorTagging(
value: 'v',
key: 'k'
)]
),
mirrorReturnHeaders: new Oss\Models\MirrorReturnHeaders(
returnHeaders: [
new Oss\Models\ReturnHeader(
key: 'k',
value: 'v'
)
]
),
mirrorAuth: new Oss\Models\MirrorAuth(
'S3V4', 'ap-southeast-1', 'TESTAK', 'TESTSK'
),
mirrorMultiAlternates: new Oss\Models\MirrorMultiAlternates(
[
new Oss\Models\MirrorMultiAlternate(
mirrorMultiAlternateNumber: 32, mirrorMultiAlternateURL: 'https://test-multi-alter.example.com', mirrorMultiAlternateVpcId: 'vpc-test-id', mirrorMultiAlternateDstRegion: 'ap-southeast-1'
)
]
)
),
ruleNumber: 1,
condition: new Oss\Models\RoutingRuleCondition(
keyPrefixEquals: 'abc/',
keySuffixEquals: ".txt",
httpErrorCodeReturnedEquals: 404,
),
luaConfig: new Oss\Models\RoutingRuleLuaConfig(
script: "test.lua",
)
),
new Oss\Models\RoutingRule(
redirect: new Oss\Models\RoutingRuleRedirect(
redirectType: 'AliCDN',
mirrorURL: 'http://example.com/',
mirrorPassQueryString: true,
mirrorCheckMd5: true,
mirrorSNI: true,
protocol: 'http',
mirrorFollowRedirect: true,
mirrorHeaders: new Oss\Models\MirrorHeaders(
passs: ["myheader-key1", "myheader-key2"],
sets: array(
new Oss\Models\MirrorHeaderSet(key: 'myheader-key5', value: 'myheader-value5'),
),
passAll: true,
),
passQueryString: true,
replaceKeyWith: "abc",
),
ruleNumber: 2,
condition: new Oss\Models\RoutingRuleCondition(
keyPrefixEquals: 'abc/',
keySuffixEquals: ".txt",
httpErrorCodeReturnedEquals: 404,
),
luaConfig: new Oss\Models\RoutingRuleLuaConfig(
script: "test.lua",
)
),
]),
)
));
$this->assertEquals(200, $putResult->statusCode);
$this->assertEquals('OK', $putResult->status);
$this->assertEquals(True, count($putResult->headers) > 0);
$this->assertEquals(24, strlen($putResult->requestId));
// DeleteBucketWebsite
$delResult = $client->deleteBucketWebsite(new Oss\Models\DeleteBucketWebsiteRequest(
$bucketName
));
$this->assertEquals(204, $delResult->statusCode);
$this->assertEquals('No Content', $delResult->status);
$this->assertEquals(True, count($delResult->headers) > 0);
$this->assertEquals(24, strlen($delResult->requestId));
}
public function testBucketWebsiteFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . "-not-exist";
// PutBucketWebsite
try {
$putResult = $client->putBucketWebsite(new Oss\Models\PutBucketWebsiteRequest(
$bucketName,
websiteConfiguration: new Oss\Models\WebsiteConfiguration(
indexDocument: new Oss\Models\IndexDocument(
suffix: 'index.html', supportSubDir: true, type: 0
),
errorDocument: new Oss\Models\ErrorDocument(
key: 'error.html', httpStatus: 404
)
)
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error PutBucketWebsite', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// GetBucketWebsite
try {
$getResult = $client->getBucketWebsite(new Oss\Models\GetBucketWebsiteRequest(
$bucketName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetBucketWebsite', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// DeleteBucketWebsite
try {
$delResult = $client->deleteBucketWebsite(new Oss\Models\DeleteBucketWebsiteRequest(
$bucketName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error DeleteBucketWebsite', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
}
}

View File

@@ -0,0 +1,183 @@
<?php
namespace IntegrationTests;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestIntegration.php';
use AlibabaCloud\Oss\V2 as Oss;
class ClientBucketWormTest extends TestIntegration
{
public function testBucketWorm()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
// InitiateBucketWorm
$initResult = $client->initiateBucketWorm(new Oss\Models\InitiateBucketWormRequest(
$bucketName,
new Oss\Models\InitiateWormConfiguration(1)
));
$this->assertEquals(200, $initResult->statusCode);
$this->assertEquals('OK', $initResult->status);
$this->assertEquals(True, count($initResult->headers) > 0);
$this->assertEquals(24, strlen($initResult->requestId));
$this->assertNotEmpty($initResult->wormId);
// GetBucketWorm
$getResult = $client->getBucketWorm(new Oss\Models\GetBucketWormRequest(
$bucketName
));
$this->assertEquals(200, $getResult->statusCode);
$this->assertEquals('OK', $getResult->status);
$this->assertEquals(True, count($getResult->headers) > 0);
$this->assertEquals(24, strlen($getResult->requestId));
$this->assertEquals($initResult->wormId, $getResult->wormConfiguration->wormId);
$this->assertNotEmpty($getResult->wormConfiguration->creationDate);
$this->assertNotEmpty($getResult->wormConfiguration->retentionPeriodInDays);
$this->assertNotEmpty($getResult->wormConfiguration->state);
// AbortBucketWorm
$abortResult = $client->abortBucketWorm(new Oss\Models\AbortBucketWormRequest(
$bucketName
));
$this->assertEquals(204, $abortResult->statusCode);
$this->assertEquals('No Content', $abortResult->status);
$this->assertEquals(True, count($abortResult->headers) > 0);
$this->assertEquals(24, strlen($abortResult->requestId));
// CompleteBucketWorm
try {
$result = $client->completeBucketWorm(new Oss\Models\CompleteBucketWormRequest(
$bucketName,
$initResult->wormId
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error CompleteBucketWorm', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchWORMConfiguration', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// ExtendBucketWorm
try {
$result = $client->extendBucketWorm(new Oss\Models\ExtendBucketWormRequest(
$bucketName,
$initResult->wormId,
new Oss\Models\ExtendWormConfiguration(2)
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error ExtendBucketWorm', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchWORMConfiguration', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
}
public function testBucketWormFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . "-not-exist";
// InitiateBucketWorm
try {
$initResult = $client->initiateBucketWorm(new Oss\Models\InitiateBucketWormRequest(
$bucketName,
new Oss\Models\InitiateWormConfiguration(1)
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error InitiateBucketWorm', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// GetBucketWorm
try {
$getResult = $client->getBucketWorm(new Oss\Models\GetBucketWormRequest(
$bucketName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetBucketWorm', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// AbortBucketWorm
try {
$abortResult = $client->abortBucketWorm(new Oss\Models\AbortBucketWormRequest(
$bucketName
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error AbortBucketWorm', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
$wormId = 'not-exist-wormId';
// CompleteBucketWorm
try {
$result = $client->completeBucketWorm(new Oss\Models\CompleteBucketWormRequest(
$bucketName,
$wormId
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error CompleteBucketWorm', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// ExtendBucketWorm
try {
$result = $client->extendBucketWorm(new Oss\Models\ExtendBucketWormRequest(
$bucketName,
$wormId,
new Oss\Models\ExtendWormConfiguration(2)
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error ExtendBucketWorm', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,57 @@
<?php
namespace IntegrationTests;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestIntegration.php';
use AlibabaCloud\Oss\V2 as Oss;
use GuzzleHttp\Psr7\LazyOpenStream;
use GuzzleHttp\Psr7\NoSeekStream;
use GuzzleHttp\Psr7\BufferStream;
class ClientListCloudBoxesTest extends TestIntegration
{
public function testListCloudBoxes()
{
$client = $this->getDefaultClient();
// ListCloudBoxes
try {
$result = $client->listCloudBoxes(new Oss\Models\ListCloudBoxesRequest());
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error ListCloudBoxes', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('You are forbidden to oss-cloudbox:ListCloudBoxes', $se->getErrorMessage());
$this->assertEquals(403, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
} else {
$this->assertTrue(false, "should not here");
}
}
}
public function testListCloudBoxesFail()
{
$client = $this->getInvalidAkClient();
try {
$result = $client->listCloudBoxes(new Oss\Models\ListCloudBoxesRequest());
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error ListCloudBoxes', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
}
}

View File

@@ -0,0 +1,380 @@
<?php
namespace IntegrationTests;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestIntegration.php';
use GuzzleHttp\Promise as P;
use GuzzleHttp\Psr7\LimitStream;
use GuzzleHttp\Psr7\LazyOpenStream;
use AlibabaCloud\Oss\V2 as Oss;
class ClientMiscTest extends TestIntegration
{
public function testPutObjectProgress()
{
$client = self::getDefaultClient();
$bucketName = self::$bucketName;
$filename = self::getTempFileName();
$size = 512 * 1024 + 1234;
$this->generateFile($filename, $size);
$handle = fopen($filename, 'rb');
$reqeust = new Oss\Models\PutObjectRequest($bucketName, 'key-123+-/123%/345');
$reqeust->body = Oss\Utils::streamFor($handle);
$gotIncrement = 0;
$gotSize = 0;
$gotTotal = 0;
$reqeust->progressFn = static function (int $increment, int $transferred, int $total) use (&$gotIncrement, &$gotSize, &$gotTotal) {
$gotIncrement += $increment;
$gotSize = $transferred;
$gotTotal = $total;
};
$client->putObject($reqeust);
fclose($handle);
$this->assertEquals($size, $gotIncrement);
$this->assertEquals($size, $gotSize);
$this->assertEquals($size, $gotTotal);
}
public function testAppendObjectProgress()
{
$client = self::getDefaultClient();
$bucketName = self::$bucketName;
$filename = self::getTempFileName();
$size = 512 * 1024 + 1234;
$this->generateFile($filename, $size);
$handle = fopen($filename, 'rb');
$reqeust = new Oss\Models\AppendObjectRequest($bucketName, 'append-key-123.txt');
$reqeust->position = 0;
$reqeust->body = Oss\Utils::streamFor($handle);
$gotIncrement = 0;
$gotSize = 0;
$gotTotal = 0;
$reqeust->progressFn = static function (int $increment, int $transferred, int $total) use (&$gotIncrement, &$gotSize, &$gotTotal) {
$gotIncrement += $increment;
$gotSize = $transferred;
$gotTotal = $total;
};
$client->appendObject($reqeust);
fclose($handle);
$this->assertEquals($size, $gotIncrement);
$this->assertEquals($size, $gotSize);
$this->assertEquals($size, $gotTotal);
$reqeust = new Oss\Models\AppendObjectRequest($bucketName, 'append-key-123.txt');
$reqeust->body = Oss\Utils::streamFor('hello world');
$reqeust->position = $size;
$gotIncrement = 0;
$gotSize = 0;
$gotTotal = 0;
$reqeust->progressFn = static function (int $increment, int $transferred, int $total) use (&$gotIncrement, &$gotSize, &$gotTotal) {
$gotIncrement += $increment;
$gotSize = $transferred;
$gotTotal = $total;
};
$client->appendObject($reqeust);
$this->assertEquals(11, $gotIncrement);
$this->assertEquals(11, $gotSize);
$this->assertEquals(11, $gotTotal);
}
public function testUploadPartProgress()
{
$client = $this->getDefaultClient();
$totalSize = 250 * 1024 + 123;
$partSize = 100 * 1024;
$filename = self::getTempFileName();
$this->generateFile($filename, $totalSize);
$key = 'bigfile.tmp';
$initResult = $client->initiateMultipartUpload(
new Oss\Models\InitiateMultipartUploadRequest(
self::$bucketName,
$key,
)
);
$this->assertEquals(200, $initResult->statusCode);
$this->assertNotEmpty($initResult->uploadId);
$file = fopen($filename, 'rb');
$parts = [];
$fileStream = Oss\Utils::streamFor($file);
$gotIncrement = 0;
for ($i = 0, $partNum = 1; $i < $totalSize; $i += $partSize, $partNum++) {
$gotSize = 0;
$gotTotal = 0;
$body = new LimitStream($fileStream, $partSize, $i);
$sendSize = $body->getSize();
$partResult = $client->uploadPart(
new Oss\Models\UploadPartRequest(
self::$bucketName,
$key,
$partNum,
$initResult->uploadId,
null,
null,
null,
null,
$body,
static function (int $increment, int $transferred, int $total) use (&$gotIncrement, &$gotSize, &$gotTotal) {
$gotIncrement += $increment;
$gotSize = $transferred;
$gotTotal = $total;
}
)
);
$this->assertEquals(200, $partResult->statusCode);
$this->assertEquals($sendSize, $gotSize);
$this->assertEquals($sendSize, $gotTotal);
$part = new Oss\Models\UploadPart(
$partNum,
$partResult->etag,
);
$parts[] = $part;
}
//$this->assertEquals($totalSize, $gotIncrement);
fclose($file);
$comResult = $client->completeMultipartUpload(
new Oss\Models\CompleteMultipartUploadRequest(
self::$bucketName,
$key,
$initResult->uploadId,
null,
new Oss\Models\CompleteMultipartUpload(
$parts
),
)
);
$this->assertEquals(200, $comResult->statusCode);
$this->assertEquals(self::$bucketName, $comResult->bucket);
$this->assertEquals($key, $comResult->key);
$this->assertNotEmpty($comResult->etag);
$this->assertNotEmpty($comResult->location);
$getObj = $client->getObject(new Oss\Models\GetObjectRequest(
self::$bucketName,
$key,
));
$objMd5 = base64_encode(md5($getObj->body, true));
$fileMd5 = base64_encode(md5(file_get_contents($filename), true));
$this->assertEquals($fileMd5, $objMd5);
}
public function testUploadPartUseCoroutine(): void
{
$totalSize = 250 * 1024 + 123;
$partSize = 100 * 1024;
$filename = self::getTempFileName();
$this->generateFile($filename, $totalSize);
$key = 'coroutine.tmp';
$bucketName = self::$bucketName;
// upload context
$context['client'] = self::getDefaultClient();
$context['request'] = new Oss\Models\PutObjectRequest($bucketName, $key);
$context['filename'] = $filename;
$context['parallel_num'] = 2;
$context['part_size'] = $partSize;
// use coroutine
$promisor = P\Coroutine::of(function () use (&$context) {
$client = $context['client'];
// initiate multipart upload
$request = new Oss\Models\InitiateMultipartUploadRequest();
Oss\Utils::copyRequest($request, $context['request']);
yield $client->initiateMultipartUploadAsync($request)->then(
function (Oss\Models\InitiateMultipartUploadResult $result) use (&$context) {
$context['upload_id'] = $result->uploadId;
},
);
// upload part
$context['errors'] = [];
$context['parts'] = [];
$uploadFns = function () use (&$context) {
$client = $context['client'];
$part_size = intval($context['part_size']);
$filepath = strval($context['filename']);
$source = new LazyOpenStream($filepath, 'rb');
$source->seek(0);
for ($partNumber = 1; $source->tell() < $source->getSize(); $partNumber++) {
$body = new LimitStream(
new LazyOpenStream($source->getMetadata('uri'), 'rb'),
$part_size,
$source->tell()
);
$source->seek(min($source->tell() + $part_size, $source->getSize()));
$request = new Oss\Models\UploadPartRequest();
Oss\Utils::copyRequest($request, $context['request']);
$request->partNumber = $partNumber;
$request->uploadId = $context['upload_id'];
$request->body = $body;
yield $partNumber => $client->uploadPartAsync($request)->otherwise(
function ($reason) use (&$context) {
$context['errors'][] = $reason;
return P\Create::rejectionFor($reason);
},
);
if (!empty($context['errors'])) {
break;
}
}
};
$each = new P\EachPromise(
$uploadFns(),
[
'concurrency' => $context['parallel_num'],
'fulfilled' => function (Oss\Models\UploadPartResult $result, $key) use (&$context) {
$context['parts'][] = new Oss\Models\UploadPart($key, $result->etag);
return $result;
}
]
);
yield $each->promise();
if (!empty($context['errors'])) {
throw end($context['errors']);
}
$parts = $context['parts'];
usort($parts, function ($a, $b) {
if ($a->partNumber == $b->partNumber)
return 0;
return $a->partNumber < $b->partNumber ? -1 : 1;
});
$request = new Oss\Models\CompleteMultipartUploadRequest();
Oss\Utils::copyRequest($request, $context['request']);
$request->uploadId = $context['upload_id'];
$request->completeMultipartUpload = new Oss\Models\CompleteMultipartUpload($parts);
yield $client->completeMultipartUploadAsync($request)->then(
function (Oss\Models\CompleteMultipartUploadResult $result) use (&$context) {
$context['upload_result'] = $result;
return $result;
},
);
});
// wait finish
$promisor->wait();
// check result
$result = $context['upload_result'];
$this->assertInstanceOf(Oss\Models\CompleteMultipartUploadResult::class, $result);
if ($result instanceof Oss\Models\CompleteMultipartUploadResult) {
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
$this->assertStringEndsWith('-3"', $result->etag);
}
$fileMd5 = md5(file_get_contents($filename), true);
$objectMd5 = md5($this->object_get_contents(self::getDefaultClient(), $bucketName, $key), true);
$this->assertEquals($fileMd5, $objectMd5);
}
public function testGetObjectIntoSink(): void
{
$client = self::getDefaultClient();
$bucketName = self::$bucketName;
$filename = self::getTempFileName();
$key = self::randomObjectName();
$size = 123 * 1024 + 1234;
$this->generateFile($filename, $size);
$content = file_get_contents($filename);
$handle = fopen($filename, 'rb');
$request = new Oss\Models\PutObjectRequest($bucketName, $key);
$request->body = Oss\Utils::streamFor($handle);
$result = $client->putObject($request);
fclose($handle);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
// use sink to save object into file
$filenameSave = self::getTempFileName();
$this->assertFileNotEquals($filename, $filenameSave);
$request = new Oss\Models\GetObjectRequest($bucketName, $key);
$result = $client->getObject(
$request,
[
'request_options' =>
['sink' => $filenameSave]
]
);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertFileEquals($filename, $filenameSave);
$this->assertNull($result->body);
// use sink to save object into memeroy
$sink = \GuzzleHttp\Psr7\Utils::tryFopen('php://temp', 'w+');
$request = new Oss\Models\GetObjectRequest($bucketName, $key);
$result = $client->getObject(
$request,
[
'request_options' =>
['sink' => $sink]
]
);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertNotNull($result->body);
$this->assertEquals($content, $result->body->getContents());
}
public function testGetObjectStreamMode(): void
{
$client = self::getDefaultClient();
$bucketName = self::$bucketName;
$filename = self::getTempFileName();
$key = self::randomObjectName();
$size = 123 * 1024 + 1234;
$this->generateFile($filename, $size);
$content = file_get_contents($filename);
$handle = fopen($filename, 'rb');
$request = new Oss\Models\PutObjectRequest($bucketName, $key);
$request->body = Oss\Utils::streamFor($handle);
$result = $client->putObject($request);
fclose($handle);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
// use non stream
$request = new Oss\Models\GetObjectRequest($bucketName, $key);
$result = $client->getObject(
$request,
[
'request_options' =>
['stream' => false]
]
);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertNotNull($result->body);
$this->assertTrue($result->body->isSeekable());
$this->assertEquals($content, $result->body->getContents());
$this->assertEquals($size, $result->body->getSize());
$this->assertEquals('', $result->body->read(100));
// use stream
$request = new Oss\Models\GetObjectRequest($bucketName, $key);
$result = $client->getObject(
$request,
[
'request_options' =>
['stream' => true]
]
);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertNotNull($result->body);
$this->assertFalse($result->body->isSeekable());
$this->assertNull($result->body->getSize());
$this->assertEquals($content, $result->body->getContents());
$this->assertEquals('', $result->body->read(100));
}
}

View File

@@ -0,0 +1,634 @@
<?php
namespace IntegrationTests;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestIntegration.php';
use AlibabaCloud\Oss\V2 as Oss;
use SebastianBergmann\Type\ObjectType;
class ClientObjectBasicTest extends TestIntegration
{
public function testObjectBasic()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
$key = self::randomObjectName();
// put object
$putObjRequest = new Oss\Models\PutObjectRequest(
$bucketName,
$key,
);
$body = 'hi oss';
$putObjRequest->body = Oss\Utils::streamFor($body);
$result = $client->putObject($putObjRequest);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
// get object
$result = $client->getObject(new Oss\Models\GetObjectRequest(
$bucketName,
$key
));
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
// copy object
$destKey = self::randomObjectName() . '-dest';
$copyObjRequest = new Oss\Models\CopyObjectRequest(
$bucketName,
$destKey,
);
$copyObjRequest->sourceKey = $key;
$result = $client->copyObject($copyObjRequest);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
// append object
$appendKey = self::randomObjectName() . '-append';
$appendObjRequest = new Oss\Models\AppendObjectRequest(
$bucketName,
$appendKey,
0
);
$result = $client->appendObject($appendObjRequest);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
// head object
$headObjRequest = new Oss\Models\HeadObjectRequest(
$bucketName,
$appendKey,
);
$result = $client->headObject($headObjRequest);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
// get object meta
$getObjMetaRequest = new Oss\Models\GetObjectMetaRequest(
$bucketName,
$appendKey,
);
$result = $client->getObjectMeta($getObjMetaRequest);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
// restore object
$putObjRequest = new Oss\Models\PutObjectRequest(
$bucketName,
$key,
);
$putObjRequest->storageClass = Oss\Models\StorageClassType::DEEP_COLD_ARCHIVE;
$result = $client->putObject($putObjRequest);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
$restoreObjRequest = new Oss\Models\RestoreObjectRequest(
$bucketName,
$key,
);
$restoreObjRequest->restoreRequest = new Oss\Models\RestoreRequest(3);
$result = $client->restoreObject($restoreObjRequest);
$this->assertEquals(202, $result->statusCode);
$this->assertEquals('Accepted', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
// clean restored object
try {
$result = $client->cleanRestoredObject(new Oss\Models\CleanRestoredObjectRequest(
$bucketName,
$key,
));
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error CleanRestoredObject', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('ArchiveRestoreNotFinished', $se->getErrorCode());
$this->assertEquals(409, $se->getStatusCode());
}
}
// delete object
$delObjRequest = new Oss\Models\DeleteObjectRequest(
$bucketName,
$key,
);
$result = $client->deleteObject($delObjRequest);
$this->assertEquals(204, $result->statusCode);
$this->assertEquals('No Content', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
// delete objects
$delObjsRequest = new Oss\Models\DeleteMultipleObjectsRequest(
$bucketName,
);
$delArray = [];
for ($i = 1; $i <= 10; $i++) {
// put object
$putObjRequest = new Oss\Models\PutObjectRequest(
$bucketName,
$key . $i,
);
$delArray[] = new Oss\Models\ObjectIdentifier($key . $i);
$body = 'hi oss';
$putObjRequest->body = Oss\Utils::streamFor($body);
$result = $client->putObject($putObjRequest);
$this->assertEquals(200, $result->statusCode);
}
$delObjsRequest->delete = new Oss\Models\Delete($delArray);
$result = $client->deleteMultipleObjects($delObjsRequest);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
}
public function testObjectBasicFail()
{
$client = $this->getInvalidAkClient();
$bucketName = self::$bucketName;
$key = self::randomObjectName();
try {
$putObjRequest = new Oss\Models\PutObjectRequest(
$bucketName,
$key,
);
$body = 'hi oss';
$putObjRequest->body = Oss\Utils::streamFor($body);
$result = $client->putObject($putObjRequest);
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error PutObject', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
}
}
try {
$result = $client->getObject(new Oss\Models\GetObjectRequest(
$bucketName,
$key
));
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetObject', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
}
}
try {
$destKey = self::randomObjectName() . '-dest';
$copyObjRequest = new Oss\Models\CopyObjectRequest(
$bucketName,
$destKey,
);
$copyObjRequest->sourceKey = $key;
$result = $client->copyObject($copyObjRequest);
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error CopyObject', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
}
}
// append object
try {
$appendKey = self::randomObjectName() . '-append';
$appendObjRequest = new Oss\Models\AppendObjectRequest(
$bucketName,
$appendKey,
0
);
$result = $client->appendObject($appendObjRequest);
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error AppendObject', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
}
}
// seal append object
try {
$sealAppendObjRequest = new Oss\Models\SealAppendObjectRequest(
$bucketName,
$appendKey,
0
);
$result = $client->sealAppendObject($sealAppendObjRequest);
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error SealAppendObject', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
}
}
// head object
try {
$headObjRequest = new Oss\Models\HeadObjectRequest(
$bucketName,
$key,
);
$result = $client->headObject($headObjRequest);
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error HeadObject', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
}
}
try {
$metaObjRequest = new Oss\Models\GetObjectMetaRequest(
$bucketName,
$key,
);
$result = $client->getObjectMeta($metaObjRequest);
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetObjectMeta', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
}
}
try {
$result = $client->restoreObject(new Oss\Models\RestoreObjectRequest(
$bucketName,
$key,
null,
new Oss\Models\RestoreRequest(3)
));
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error RestoreObject', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
}
}
try {
$result = $client->cleanRestoredObject(new Oss\Models\CleanRestoredObjectRequest(
$bucketName,
$key,
));
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error CleanRestoredObject', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
}
}
// delete object
try {
$delObjRequest = new Oss\Models\DeleteObjectRequest(
$bucketName,
$key,
);
$result = $client->deleteObject($delObjRequest);
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error DeleteObject', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
}
}
// delete objects
try {
$delObjRequest = new Oss\Models\DeleteMultipleObjectsRequest(
$bucketName,
);
$delObjRequest->delete = new Oss\Models\Delete(
[
new Oss\Models\ObjectIdentifier('key1'),
new Oss\Models\ObjectIdentifier('key2', 'version-id-2'),
], true
);
$result = $client->deleteMultipleObjects($delObjRequest);
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error DeleteMultipleObjects', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
}
}
}
public function testObjectAcl()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
$key = self::randomObjectName();
// put object
$putObjRequest = new Oss\Models\PutObjectRequest(
$bucketName,
$key,
);
$body = 'hi oss';
$putObjRequest->body = Oss\Utils::streamFor($body);
$result = $client->putObject($putObjRequest);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
// put object acl
$result = $client->putObjectAcl(new Oss\Models\PutObjectAclRequest(
$bucketName,
$key,
Oss\Models\ObjectACLType::PRIVATE
));
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
// get object acl
$result = $client->getObjectAcl(new Oss\Models\GetObjectAclRequest(
$bucketName,
$key
));
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
$this->assertNull($result->versionId);
$this->assertEquals(Oss\Models\ObjectACLType::PRIVATE, $result->accessControlList->grant);
}
public function testObjectAclFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
$key = self::randomObjectName() . "-not-exist";
try {
$result = $client->putObjectAcl(new Oss\Models\PutObjectAclRequest(
$bucketName,
$key,
Oss\Models\ObjectACLType::PRIVATE
));
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error PutObjectAcl', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchKey', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
}
}
try {
$result = $client->getObjectAcl(new Oss\Models\GetObjectAclRequest(
$bucketName,
$key
));
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetObjectAcl', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchKey', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
}
}
}
public function testObjectTagging()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
$key = self::randomObjectName();
// put object
$putObjRequest = new Oss\Models\PutObjectRequest(
$bucketName,
$key,
);
$body = 'hi oss';
$putObjRequest->body = Oss\Utils::streamFor($body);
$result = $client->putObject($putObjRequest);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
// put object tagging
$result = $client->putObjectTagging(new Oss\Models\PutObjectTaggingRequest(
$bucketName,
$key,
new Oss\Models\Tagging(
new Oss\Models\TagSet(
[new Oss\Models\Tag('k1', 'v1'), new Oss\Models\Tag('k2', 'v2')]
)
)
));
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
// get object tagging
$result = $client->getObjectTagging(new Oss\Models\GetObjectTaggingRequest(
$bucketName,
$key
));
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
$this->assertNull($result->versionId);
$this->assertEquals(2, count($result->tagSet->tags));
// delete object tagging
$result = $client->deleteObjectTagging(new Oss\Models\DeleteObjectTaggingRequest(
$bucketName,
$key
));
$this->assertEquals(204, $result->statusCode);
$this->assertEquals('No Content', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
}
public function testObjectTaggingFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
$key = self::randomObjectName() . "-not-exist";
try {
$result = $client->putObjectTagging(new Oss\Models\PutObjectTaggingRequest(
$bucketName,
$key,
new Oss\Models\Tagging(
new Oss\Models\TagSet(
[new Oss\Models\Tag('k1', 'v1'), new Oss\Models\Tag('k2', 'v2')]
)
)
));
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error PutObjectTagging', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchKey', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
}
}
try {
$result = $client->getObjectTagging(new Oss\Models\GetObjectTaggingRequest(
$bucketName,
$key
));
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetObjectTagging', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchKey', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
}
}
try {
$result = $client->deleteObjectTagging(new Oss\Models\DeleteObjectTaggingRequest(
$bucketName,
$key
));
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error DeleteObjectTagging', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchKey', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
}
}
}
public function testSymlink()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
$key = self::randomObjectName() . '-target';
// put object
$putObjRequest = new Oss\Models\PutObjectRequest(
$bucketName,
$key,
);
$body = 'hi oss';
$putObjRequest->body = Oss\Utils::streamFor($body);
$result = $client->putObject($putObjRequest);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
// put symlink
$symlinkKey = self::randomObjectName() . '-symlink';
$result = $client->putSymlink(new Oss\Models\PutSymlinkRequest(
$bucketName,
$symlinkKey,
$key
));
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
// get symlink
$result = $client->getSymlink(new Oss\Models\GetSymlinkRequest(
$bucketName,
$symlinkKey
));
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$this->assertEquals(True, count($result->headers) > 0);
$this->assertEquals(24, strlen($result->requestId));
}
public function testSymlinkFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . '-not-exist';
$key = self::randomObjectName() . "-target";
$symlinkKey = self::randomObjectName() . '-symlink';
try {
$result = $client->putSymlink(new Oss\Models\PutSymlinkRequest(
$bucketName,
$symlinkKey,
$key
));
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error PutSymlink', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
}
}
try {
$result = $client->getSymlink(new Oss\Models\GetSymlinkRequest(
$bucketName,
$symlinkKey,
));
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetSymlink', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
}
}
}
}

View File

@@ -0,0 +1,433 @@
<?php
namespace IntegrationTests;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestIntegration.php';
use AlibabaCloud\Oss\V2 as Oss;
class ClientObjectMultipartTest extends TestIntegration
{
public function testObjectMultipart()
{
$client = $this->getDefaultClient();
// test initiateMultipartUpload, uploadPart, completeMultipartUpload
$partSize = 200 * 1024;
$key = 'bigfile.tmp';
try {
$bigFileName = self::getTempFileName() . "-bigfile.tmp";
if (!file_exists($bigFileName)) {
$this->generateFile($bigFileName, 500 * 1024);
}
$initResult = $client->initiateMultipartUpload(
new Oss\Models\InitiateMultipartUploadRequest(
self::$bucketName,
$key,
)
);
$this->assertEquals(200, $initResult->statusCode);
$this->assertNotEmpty($initResult->uploadId);
$file = fopen($bigFileName, 'r');
$parts = array();
if ($file) {
$i = 1;
while (!feof($file)) {
$chunk = fread($file, $partSize);
$partResult = $client->uploadPart(
new Oss\Models\UploadPartRequest(
self::$bucketName,
$key,
$i,
$initResult->uploadId,
null,
null,
null,
null,
Oss\Utils::streamFor($chunk)
)
);
$this->assertEquals(200, $partResult->statusCode);
$part = new Oss\Models\UploadPart(
$i,
$partResult->etag,
);
array_push($parts, $part);
$i++;
}
fclose($file);
}
$comResult = $client->completeMultipartUpload(
new Oss\Models\CompleteMultipartUploadRequest(
self::$bucketName,
$key,
$initResult->uploadId,
null,
new Oss\Models\CompleteMultipartUpload(
$parts
),
)
);
$this->assertEquals(200, $comResult->statusCode);
$this->assertEquals(self::$bucketName, $comResult->bucket);
$this->assertEquals($key, $comResult->key);
$this->assertNotEmpty($comResult->etag);
$this->assertNotEmpty($comResult->location);
$getObj = $client->getObject(new Oss\Models\GetObjectRequest(
self::$bucketName,
$key,
));
$this->assertEquals(base64_encode(md5(file_get_contents($bigFileName), true)), base64_encode(md5($getObj->body, true)));
} catch (\Throwable $e) {
$this->assertTrue(false, "should not here");
}
// test initiateMultipartUpload, uploadPartCopy, completeMultipartUpload
try {
$key1 = self::randomObjectName() . "\f\v\t";
$initResult = $client->initiateMultipartUpload(
new Oss\Models\InitiateMultipartUploadRequest(
self::$bucketName,
$key1,
)
);
$this->assertEquals(200, $initResult->statusCode);
$this->assertNotEmpty($initResult->uploadId);
$partResult = $client->uploadPartCopy(
new Oss\Models\UploadPartCopyRequest(
self::$bucketName,
$key1,
1,
$initResult->uploadId,
self::$bucketName,
$key,
)
);
$this->assertEquals(200, $partResult->statusCode);
$comResult = $client->completeMultipartUpload(
new Oss\Models\CompleteMultipartUploadRequest(
self::$bucketName,
$key1,
$initResult->uploadId,
null,
null,
'yes',
)
);
$this->assertEquals(200, $comResult->statusCode);
$this->assertEquals(self::$bucketName, $comResult->bucket);
$this->assertEquals($key1, $comResult->key);
$this->assertNotEmpty($comResult->etag);
$this->assertNotEmpty($comResult->location);
$client->deleteObject(new Oss\Models\DeleteObjectRequest(
self::$bucketName,
$key1,
));
} catch (\Throwable $e) {
$this->assertTrue(false, "should not here");
}
$client->deleteObject(new Oss\Models\DeleteObjectRequest(
self::$bucketName,
$key,
));
// test listParts and listMultipartUploads
$objectPrefix = self::randomObjectName();
try {
for ($i = 0; $i < 3; $i++) {
$key = $objectPrefix . $i;
$initResult = $client->initiateMultipartUpload(
new Oss\Models\InitiateMultipartUploadRequest(
self::$bucketName,
$key,
)
);
$this->assertEquals(200, $initResult->statusCode);
$this->assertNotEmpty($initResult->uploadId);
$file = fopen($bigFileName, 'r');
if ($file) {
$n = 1;
while (!feof($file)) {
$chunk = fread($file, $partSize);
$partResult = $client->uploadPart(
new Oss\Models\UploadPartRequest(
self::$bucketName,
$key,
$n,
$initResult->uploadId,
null,
null,
null,
null,
Oss\Utils::streamFor($chunk)
)
);
$this->assertEquals(200, $partResult->statusCode);
$n++;
}
fclose($file);
}
}
$listUploads = $client->listMultipartUploads(
new Oss\Models\ListMultipartUploadsRequest(
self::$bucketName,
)
);
$this->assertEquals(200, $listUploads->statusCode);
$this->assertCount(3, $listUploads->uploads);
$listParts = $client->listParts(
new Oss\Models\ListPartsRequest(
self::$bucketName,
$listUploads->uploads[0]->key,
$listUploads->uploads[0]->uploadId,
)
);
$this->assertEquals(200, $listParts->statusCode);
$this->assertCount(3, $listParts->parts);
} catch (\Throwable $e) {
$this->assertTrue(false, "should not here");
}
// test abortMultipartUpload
try {
foreach ($listUploads->uploads as $k => $upload) {
$abort = $client->abortMultipartUpload(
new Oss\Models\AbortMultipartUploadRequest(
self::$bucketName,
$upload->key,
$upload->uploadId,
)
);
$this->assertEquals(204, $abort->statusCode);
}
$listUploads = $client->listMultipartUploads(
new Oss\Models\ListMultipartUploadsRequest(
self::$bucketName,
)
);
$this->assertEquals(200, $listUploads->statusCode);
$this->assertNull($listUploads->uploads);
} catch (\Throwable $e) {
$this->assertTrue(false, "should not here");
}
}
public function testObjectMultipartFail()
{
$client = $this->getDefaultClient();
$invalidAkClient = $this->getInvalidAkClient();
$partSize = 200 * 1024;
$key = 'bigfile.tmp';
$bigFileName = self:: getTempFileName() . "-bigfile.tmp";
if (!file_exists($bigFileName)) {
$this->generateFile($bigFileName, 500 * 1024);
}
// test initiateMultipartUpload
try {
$invalidAkClient->initiateMultipartUpload(
new Oss\Models\InitiateMultipartUploadRequest(
self::$bucketName,
$key,
)
);
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error InitiateMultipartUpload', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
}
}
// test uploadPart
try {
$initResult = $client->initiateMultipartUpload(
new Oss\Models\InitiateMultipartUploadRequest(
self::$bucketName,
$key,
)
);
$this->assertEquals(200, $initResult->statusCode);
$this->assertNotEmpty($initResult->uploadId);
$invalidAkClient->uploadPart(
new Oss\Models\UploadPartRequest(
self::$bucketName,
$key,
1,
$initResult->uploadId,
null,
null,
null,
null,
Oss\Utils::streamFor($bigFileName)
)
);
} catch (\Throwable $e) {
$this->assertStringContainsString('Operation error UploadPart', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
}
}
// test uploadPartCopy
try {
$initResult = $client->initiateMultipartUpload(
new Oss\Models\InitiateMultipartUploadRequest(
self::$bucketName,
$key,
)
);
$this->assertEquals(200, $initResult->statusCode);
$this->assertNotEmpty($initResult->uploadId);
$client->uploadPart(
new Oss\Models\UploadPartRequest(
self::$bucketName,
$key,
1,
$initResult->uploadId,
null,
null,
null,
null,
Oss\Utils::streamFor($bigFileName)
)
);
$invalidAkClient->uploadPartCopy(
new Oss\Models\UploadPartCopyRequest(
self::$bucketName,
$key,
1,
$initResult->uploadId,
self::$bucketName,
$key,
)
);
} catch (\Throwable $e) {
$this->assertStringContainsString('Operation error UploadPartCopy', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
}
}
try {
$initResult = $client->initiateMultipartUpload(
new Oss\Models\InitiateMultipartUploadRequest(
self::$bucketName,
$key,
)
);
$this->assertEquals(200, $initResult->statusCode);
$this->assertNotEmpty($initResult->uploadId);
$file = fopen($bigFileName, 'r');
$parts = array();
if ($file) {
$i = 1;
while (!feof($file)) {
$chunk = fread($file, $partSize);
$partResult = $client->uploadPart(
new Oss\Models\UploadPartRequest(
self::$bucketName,
$key,
$i,
$initResult->uploadId,
null,
null,
null,
null,
Oss\Utils::streamFor($chunk)
)
);
$this->assertEquals(200, $partResult->statusCode);
$part = new Oss\Models\UploadPart(
$i,
$partResult->etag,
);
array_push($parts, $part);
$i++;
}
fclose($file);
}
$invalidAkClient->completeMultipartUpload(
new Oss\Models\CompleteMultipartUploadRequest(
self::$bucketName,
$key,
$initResult->uploadId,
null,
new Oss\Models\CompleteMultipartUpload(
$parts
),
)
);
} catch (\Throwable $e) {
$this->assertStringContainsString('Operation error CompleteMultipartUpload', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
}
}
try {
$invalidAkClient->listMultipartUploads(
new Oss\Models\ListMultipartUploadsRequest(
self::$bucketName,
)
);
} catch (\Throwable $e) {
$this->assertStringContainsString('Operation error ListMultipartUploads', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
}
}
try {
$invalidAkClient->listParts(
new Oss\Models\ListPartsRequest(
self::$bucketName,
$initResult->uploadId,
$initResult->key,
)
);
} catch (\Throwable $e) {
$this->assertStringContainsString('Operation error ListParts', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
}
}
$listUploads = $client->listMultipartUploads(
new Oss\Models\ListMultipartUploadsRequest(
self::$bucketName,
)
);
foreach ($listUploads->uploads as $k => $upload) {
$abort = $client->abortMultipartUpload(
new Oss\Models\AbortMultipartUploadRequest(
self::$bucketName,
$upload->key,
$upload->uploadId,
)
);
$this->assertEquals(204, $abort->statusCode);
}
}
}

View File

@@ -0,0 +1,774 @@
<?php
namespace IntegrationTests;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestIntegration.php';
use AlibabaCloud\Oss\V2 as Oss;
class ClientPaginatorTest extends TestIntegration
{
public function testListObjectsPaginator()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
$key = self::randomObjectName();
$putObjRequest = new Oss\Models\PutObjectRequest(
$bucketName,
$key,
);
$body = 'hi oss';
$putObjRequest->body = Oss\Utils::streamFor($body);
$result = $client->putObject($putObjRequest);
$this->assertEquals(200, $result->statusCode);
$paginator = new Oss\Paginator\ListObjectsPaginator($client);
$iter = $paginator->iterPage(
new Oss\Models\ListObjectsRequest($bucketName),
['limit' => 1]
);
foreach ($iter as $page) {
foreach ($page->contents ?? [] as $content) {
$this->assertEquals($key, $content->key);
}
}
$result = $client->deleteObject(new Oss\Models\DeleteObjectRequest(
$bucketName, $key
));
$this->assertEquals(204, $result->statusCode);
}
public function testListObjectsPaginatorFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . '-not-exist';
try {
$paginator = new Oss\Paginator\ListObjectsPaginator($client);
$iter = $paginator->iterPage(
new Oss\Models\ListObjectsRequest($bucketName),
['limit' => 1]
);
foreach ($iter as $page) {
foreach ($page->contents ?? [] as $content) {
$this->assertTrue(false, 'should not here');
}
}
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error ListObjects', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals('The specified bucket does not exist.', $se->getErrorMessage());
$this->assertEquals('0015-00000101', $se->getEC());
}
}
}
public function testListObjectsPaginatorAsync()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
$key = self::randomObjectName();
$putObjRequest = new Oss\Models\PutObjectRequest(
$bucketName,
$key,
);
$body = 'hi oss';
$putObjRequest->body = Oss\Utils::streamFor($body);
$result = $client->putObject($putObjRequest);
$this->assertEquals(200, $result->statusCode);
$paginator = new Oss\Paginator\ListObjectsPaginator($client);
$iterPromise = $paginator->iterPageAsync(
new Oss\Models\ListObjectsRequest($bucketName),
['limit' => 10]
);
$this->assertTrue(is_object($iterPromise));
foreach ($iterPromise as $pagePromise) {
$page = $pagePromise->wait();
foreach ($page->contents ?? [] as $content) {
$this->assertEquals($key, $content->key);
}
}
$result = $client->deleteObject(new Oss\Models\DeleteObjectRequest(
$bucketName, $key
));
$this->assertEquals(204, $result->statusCode);
}
public function testListObjectsPaginatorAsyncFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . '-not-exist';
try {
$paginator = new Oss\Paginator\ListObjectsPaginator($client);
$iterPromise = $paginator->iterPageAsync(
new Oss\Models\ListObjectsRequest($bucketName),
['limit' => 1]
);
foreach ($iterPromise as $pagePromise) {
$page = $pagePromise->wait();
foreach ($page->contents ?? [] as $content) {
$this->assertTrue(false, 'should not here');
}
}
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error ListObjects', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals('The specified bucket does not exist.', $se->getErrorMessage());
$this->assertEquals('0015-00000101', $se->getEC());
}
}
}
public function testListObjectsV2Paginator()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
$key = self::randomObjectName();
$putObjRequest = new Oss\Models\PutObjectRequest(
$bucketName,
$key,
);
$body = 'hi oss';
$putObjRequest->body = Oss\Utils::streamFor($body);
$result = $client->putObject($putObjRequest);
$this->assertEquals(200, $result->statusCode);
$paginator = new Oss\Paginator\ListObjectsV2Paginator($client);
$iter = $paginator->iterPage(
new Oss\Models\ListObjectsV2Request($bucketName),
['limit' => 1]
);
$this->assertTrue(is_object($iter));
foreach ($iter as $page) {
foreach ($page->contents ?? [] as $content) {
$this->assertEquals($key, $content->key);
}
}
$result = $client->deleteObject(new Oss\Models\DeleteObjectRequest(
$bucketName, $key
));
$this->assertEquals(204, $result->statusCode);
}
public function testListObjectsV2PaginatorFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . '-not-exist';
try {
$paginator = new Oss\Paginator\ListObjectsV2Paginator($client);
$iter = $paginator->iterPage(
new Oss\Models\ListObjectsV2Request($bucketName),
['limit' => 1]
);
foreach ($iter as $page) {
foreach ($page->contents ?? [] as $content) {
$this->assertTrue(false, 'should not here');
}
}
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error ListObjects', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals('The specified bucket does not exist.', $se->getErrorMessage());
$this->assertEquals('0015-00000101', $se->getEC());
}
}
}
public function testListObjectsV2PaginatorAsync()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
$key = self::randomObjectName();
$putObjRequest = new Oss\Models\PutObjectRequest(
$bucketName,
$key,
);
$body = 'hi oss';
$putObjRequest->body = Oss\Utils::streamFor($body);
$result = $client->putObject($putObjRequest);
$this->assertEquals(200, $result->statusCode);
$paginator = new Oss\Paginator\ListObjectsV2Paginator($client);
$iterPromise = $paginator->iterPageAsync(
new Oss\Models\ListObjectsV2Request($bucketName),
['limit' => 1]
);
$this->assertTrue(is_object($iterPromise));
foreach ($iterPromise as $pagePromise) {
$page = $pagePromise->wait();
foreach ($page->contents ?? [] as $content) {
$this->assertEquals($key, $content->key);
}
}
$result = $client->deleteObject(new Oss\Models\DeleteObjectRequest(
$bucketName, $key
));
$this->assertEquals(204, $result->statusCode);
}
public function testListObjectsV2PaginatorAsyncFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . '-not-exist';
try {
$paginator = new Oss\Paginator\ListObjectsV2Paginator($client);
$iterPromise = $paginator->iterPageAsync(
new Oss\Models\ListObjectsV2Request($bucketName),
['limit' => 1]
);
foreach ($iterPromise as $pagePromise) {
$page = $pagePromise->wait();
foreach ($page->contents ?? [] as $content) {
$this->assertTrue(false, 'should not here');
}
}
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error ListObjects', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals('The specified bucket does not exist.', $se->getErrorMessage());
$this->assertEquals('0015-00000101', $se->getEC());
}
}
}
public function testListObjectVersionsPaginator()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
$key = self::randomObjectName();
$putObjRequest = new Oss\Models\PutObjectRequest(
$bucketName,
$key,
);
$body = 'hi oss';
$putObjRequest->body = Oss\Utils::streamFor($body);
$result = $client->putObject($putObjRequest);
$this->assertEquals(200, $result->statusCode);
$paginator = new Oss\Paginator\ListObjectVersionsPaginator($client);
$iter = $paginator->iterPage(
new Oss\Models\ListObjectVersionsRequest($bucketName),
['limit' => 1]
);
foreach ($iter as $page) {
foreach ($page->contents ?? [] as $content) {
$this->assertEquals($key, $content->key);
}
}
}
public function testListObjectVersionsPaginatorFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . '-not-exist';
try {
$paginator = new Oss\Paginator\ListObjectVersionsPaginator($client);
$iter = $paginator->iterPage(
new Oss\Models\ListObjectVersionsRequest($bucketName),
['limit' => 1]
);
foreach ($iter as $page) {
foreach ($page->contents ?? [] as $content) {
$this->assertTrue(false, 'should not here');
}
}
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error ListObjectVersions', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals('The specified bucket does not exist.', $se->getErrorMessage());
$this->assertEquals('0015-00000101', $se->getEC());
}
}
}
public function testListObjectVersionsPaginatorAsync()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
$key = self::randomObjectName();
$putObjRequest = new Oss\Models\PutObjectRequest(
$bucketName,
$key,
);
$body = 'hi oss';
$putObjRequest->body = Oss\Utils::streamFor($body);
$result = $client->putObject($putObjRequest);
$this->assertEquals(200, $result->statusCode);
$paginator = new Oss\Paginator\ListObjectVersionsPaginator($client);
$iterPromise = $paginator->iterPageAsync(
new Oss\Models\ListObjectVersionsRequest($bucketName),
['limit' => 1]
);
$this->assertTrue(is_object($iterPromise));
foreach ($iterPromise as $pagePromise) {
$page = $pagePromise->wait();
foreach ($page->contents ?? [] as $content) {
$this->assertEquals($key, $content->key);
}
}
}
public function testListObjectVersionsPaginatorAsyncFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . '-not-exist';
try {
$paginator = new Oss\Paginator\ListObjectVersionsPaginator($client);
$iterPromise = $paginator->iterPageAsync(
new Oss\Models\ListObjectVersionsRequest($bucketName),
['limit' => 1]
);
foreach ($iterPromise as $pagePromise) {
$page = $pagePromise->wait();
foreach ($page->contents ?? [] as $content) {
$this->assertTrue(false, 'should not here');
}
}
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error ListObjectVersions', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals('The specified bucket does not exist.', $se->getErrorMessage());
$this->assertEquals('0015-00000101', $se->getEC());
}
}
}
public function testListMultipartUploadsPaginator()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
$key = 'bigfile.tmp';
$initResult = $client->initiateMultipartUpload(
new Oss\Models\InitiateMultipartUploadRequest(
self::$bucketName,
$key,
)
);
$this->assertEquals(200, $initResult->statusCode);
$this->assertNotEmpty($initResult->uploadId);
$paginator = new Oss\Paginator\ListMultipartUploadsPaginator($client);
$iter = $paginator->iterPage(
new Oss\Models\ListMultipartUploadsRequest($bucketName),
['limit' => 1]
);
foreach ($iter as $page) {
foreach ($page->uploads ?? [] as $upload) {
$this->assertEquals($key, $upload->key);
$this->assertEquals($initResult->uploadId, $upload->uploadId);
}
}
}
public function testListMultipartUploadsPaginatorFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . '-not-exist';
try {
$paginator = new Oss\Paginator\ListMultipartUploadsPaginator($client);
$iter = $paginator->iterPage(
new Oss\Models\ListMultipartUploadsRequest($bucketName),
['limit' => 1]
);
foreach ($iter as $page) {
foreach ($page->uploads ?? [] as $upload) {
$this->assertTrue(false, 'should not here');
}
}
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error ListMultipartUploads', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals('The specified bucket does not exist.', $se->getErrorMessage());
$this->assertEquals('0015-00000101', $se->getEC());
}
}
}
public function testListMultipartUploadsPaginatorAsync()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
$key = 'bigfile.tmp';
$initResult = $client->initiateMultipartUpload(
new Oss\Models\InitiateMultipartUploadRequest(
self::$bucketName,
$key,
)
);
$this->assertEquals(200, $initResult->statusCode);
$this->assertNotEmpty($initResult->uploadId);
$paginator = new Oss\Paginator\ListObjectsV2Paginator($client);
$iterPromise = $paginator->iterPageAsync(
new Oss\Models\ListObjectsV2Request($bucketName),
['limit' => 1]
);
$this->assertTrue(is_object($iterPromise));
foreach ($iterPromise as $pagePromise) {
$page = $pagePromise->wait();
foreach ($page->uploads ?? [] as $upload) {
$this->assertEquals($key, $upload->key);
$this->assertEquals($initResult->uploadId, $upload->uploadId);
}
}
}
public function testListMultipartUploadsPaginatorAsyncFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . '-not-exist';
try {
$paginator = new Oss\Paginator\ListMultipartUploadsPaginator($client);
$iterPromise = $paginator->iterPageAsync(
new Oss\Models\ListMultipartUploadsRequest($bucketName),
['limit' => 1]
);
foreach ($iterPromise as $pagePromise) {
$page = $pagePromise->wait();
foreach ($page->uploads ?? [] as $upload) {
$this->assertTrue(false, 'should not here');
}
}
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error ListMultipartUploads', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals('The specified bucket does not exist.', $se->getErrorMessage());
$this->assertEquals('0015-00000101', $se->getEC());
}
}
}
public function testListPartsPaginator()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
$partSize = 200 * 1024;
$bigFileName = self::getTempFileName() . "-bigfile.tmp";
if (!file_exists($bigFileName)) {
$this->generateFile($bigFileName, 500 * 1024);
}
$key = 'bigfile.tmp';
$initResult = $client->initiateMultipartUpload(
new Oss\Models\InitiateMultipartUploadRequest(
self::$bucketName,
$key,
)
);
$this->assertEquals(200, $initResult->statusCode);
$this->assertNotEmpty($initResult->uploadId);
$file = fopen($bigFileName, 'r');
$parts = array();
if ($file) {
$i = 1;
while (!feof($file)) {
$chunk = fread($file, $partSize);
$partResult = $client->uploadPart(
new Oss\Models\UploadPartRequest(
self::$bucketName,
$key,
$i,
$initResult->uploadId,
null,
null,
null,
null,
Oss\Utils::streamFor($chunk)
)
);
$this->assertEquals(200, $partResult->statusCode);
$part = new Oss\Models\UploadPart(
$i,
$partResult->etag,
);
array_push($parts, $part);
$i++;
}
fclose($file);
}
$paginator = new Oss\Paginator\ListPartsPaginator($client);
$iter = $paginator->iterPage(
new Oss\Models\ListPartsRequest($bucketName, $key, $initResult->uploadId),
['limit' => 1]
);
foreach ($iter as $page) {
foreach ($page->parts ?? [] as $part) {
$this->assertNotEmpty($part->partNumber);
$this->assertNotEmpty($part->etag);
$this->assertNotEmpty($part->size);
}
}
}
public function testListPartsPaginatorFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . '-not-exist';
try {
$paginator = new Oss\Paginator\ListPartsPaginator($client);
$iter = $paginator->iterPage(
new Oss\Models\ListPartsRequest($bucketName, "not-exist", "not-exist"),
['limit' => 1]
);
foreach ($iter as $page) {
foreach ($page->parts ?? [] as $part) {
$this->assertTrue(false, 'should not here');
}
}
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error ListParts', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals('The specified bucket does not exist.', $se->getErrorMessage());
$this->assertEquals('0015-00000101', $se->getEC());
}
}
}
public function testListPartsPaginatorAsync()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
$partSize = 200 * 1024;
$bigFileName = self::getTempFileName() . "-bigfile.tmp";
if (!file_exists($bigFileName)) {
$this->generateFile($bigFileName, 500 * 1024);
}
$key = 'bigfile.tmp';
$initResult = $client->initiateMultipartUpload(
new Oss\Models\InitiateMultipartUploadRequest(
self::$bucketName,
$key,
)
);
$this->assertEquals(200, $initResult->statusCode);
$this->assertNotEmpty($initResult->uploadId);
$file = fopen($bigFileName, 'r');
$parts = array();
if ($file) {
$i = 1;
while (!feof($file)) {
$chunk = fread($file, $partSize);
$partResult = $client->uploadPart(
new Oss\Models\UploadPartRequest(
self::$bucketName,
$key,
$i,
$initResult->uploadId,
null,
null,
null,
null,
Oss\Utils::streamFor($chunk)
)
);
$this->assertEquals(200, $partResult->statusCode);
$part = new Oss\Models\UploadPart(
$i,
$partResult->etag,
);
array_push($parts, $part);
$i++;
}
fclose($file);
}
$paginator = new Oss\Paginator\ListPartsPaginator($client);
$iterPromise = $paginator->iterPageAsync(
new Oss\Models\ListPartsRequest($bucketName, $key, $initResult->uploadId),
['limit' => 1]
);
$resultParts = [];
foreach ($iterPromise as $pagePromise) {
$page = $pagePromise->wait();
foreach ($page->parts ?? [] as $part) {
$resultParts[] = $part;
}
}
$this->assertEquals(count($parts), count($resultParts));
}
public function testListPartsPaginatorAsyncFail()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName . '-not-exist';
try {
$paginator = new Oss\Paginator\ListPartsPaginator($client);
$iterPromise = $paginator->iterPageAsync(
new Oss\Models\ListPartsRequest($bucketName, "not-exist", "not-exist"),
['limit' => 1]
);
foreach ($iterPromise as $pagePromise) {
$page = $pagePromise->wait();
foreach ($page->parts ?? [] as $part) {
$this->assertTrue(false, 'should not here');
}
}
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error ListParts', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('NoSuchBucket', $se->getErrorCode());
$this->assertEquals(404, $se->getStatusCode());
$this->assertEquals('The specified bucket does not exist.', $se->getErrorMessage());
$this->assertEquals('0015-00000101', $se->getEC());
}
}
}
public function testListBucketsPaginator()
{
$client = $this->getDefaultClient();
$paginator = new Oss\Paginator\ListBucketsPaginator($client);
$iter = $paginator->iterPage(
new Oss\Models\ListBucketsRequest(self::$BUCKETNAME_PREFIX),
['limit' => 10]
);
foreach ($iter as $page) {
foreach ($page->buckets ?? [] as $bucket) {
$this->assertStringContainsString(self::$BUCKETNAME_PREFIX, $bucket->name);
}
}
}
public function testListBucketsPaginatorFail()
{
$client = $this->getInvalidAkClient();
try {
$paginator = new Oss\Paginator\ListBucketsPaginator($client);
$iter = $paginator->iterPage(
new Oss\Models\ListBucketsRequest(self::$BUCKETNAME_PREFIX),
['limit' => 10]
);
foreach ($iter as $page) {
foreach ($page->buckets ?? [] as $bucket) {
$this->assertTrue(false, 'should not here');
}
}
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error ListBuckets', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
$this->assertEquals('The OSS Access Key Id you provided does not exist in our records.', $se->getErrorMessage());
$this->assertEquals('0002-00000902', $se->getEC());
}
}
}
public function testListBucketsPaginatorAsync()
{
$client = $this->getDefaultClient();
$paginator = new Oss\Paginator\ListBucketsPaginator($client);
$iterPromise = $paginator->iterPageAsync(
new Oss\Models\ListBucketsRequest(self::$BUCKETNAME_PREFIX),
['limit' => 10]
);
foreach ($iterPromise as $pagePromise) {
$page = $pagePromise->wait();
foreach ($page->buckets ?? [] as $bucket) {
$this->assertStringContainsString(self::$BUCKETNAME_PREFIX, $bucket->name);
}
}
}
public function testListBucketsPaginatorAsyncFail()
{
$client = $this->getInvalidAkClient();
try {
$paginator = new Oss\Paginator\ListBucketsPaginator($client);
$iterPromise = $paginator->iterPageAsync(
new Oss\Models\ListBucketsRequest(self::$BUCKETNAME_PREFIX),
['limit' => 10]
);
foreach ($iterPromise as $pagePromise) {
$page = $pagePromise->wait();
foreach ($page->buckets ?? [] as $bucket) {
$this->assertTrue(false, 'should not here');
}
}
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error ListBuckets', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
$this->assertEquals('The OSS Access Key Id you provided does not exist in our records.', $se->getErrorMessage());
$this->assertEquals('0002-00000902', $se->getEC());
}
}
}
}

View File

@@ -0,0 +1,507 @@
<?php
namespace IntegrationTests;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestIntegration.php';
use AlibabaCloud\Oss\V2\Client;
use AlibabaCloud\Oss\V2\Models\CompleteMultipartUpload;
use AlibabaCloud\Oss\V2\Transform\Functions;
use AlibabaCloud\Oss\V2\Utils;
use DateInterval;
use GuzzleHttp;
use AlibabaCloud\Oss\V2 as Oss;
class ClientPresignerTest extends TestIntegration
{
public function testGetObject()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
$key = 'key-123+-/123%/345';
$content = 'hello world';
$request = new Oss\Models\PutObjectRequest($bucketName, $key);
$request->body = Oss\Utils::streamFor($content);
$result = $client->putObject($request);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
$request = new Oss\Models\GetObjectRequest($bucketName, $key);
$result = $client->presign($request);
$uri = GuzzleHttp\Psr7\Utils::uriFor($result->url);
$this->assertEquals('/key-123%2B-/123%25/345', $uri->getPath());
$query = GuzzleHttp\Psr7\Query::parse($uri->getQuery());
$this->assertArrayHasKey('x-oss-credential', $query);
$this->assertArrayHasKey('x-oss-date', $query);
$this->assertArrayHasKey('x-oss-expires', $query);
$this->assertEquals('900', $query['x-oss-expires']);
$this->assertArrayHasKey('x-oss-signature', $query);
$this->assertArrayHasKey('x-oss-signature-version', $query);
$this->assertEquals('OSS4-HMAC-SHA256', $query['x-oss-signature-version']);
$httpClient = new GuzzleHttp\Client();
$response = $httpClient->get($result->url);
$this->assertEquals(200, $response->getStatusCode());
$this->assertEquals($content, $response->getBody()->getContents());
}
public function testPresign()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
$objectName = self::$OBJECTNAME_PREFIX . self::randomLowStr() . '-put-object';
$body = 'hi oss';
$httpClient = new GuzzleHttp\Client();
// PutObjRequest
try {
$request = new Oss\Models\PutObjectRequest($bucketName, $objectName);
$result = $client->presign($request);
$response = $httpClient->request($result->method, $result->url, ['body' => $body]);
$this->assertEquals(200, $response->getStatusCode());
} catch (\Throwable $e) {
print_r($e->getMessage());
$this->assertTrue(false, 'should not here');
}
// GetObjRequest
try {
$request = new Oss\Models\GetObjectRequest($bucketName, $objectName);
$result = $client->presign($request);
$response = $httpClient->request($result->method, $result->url);
$this->assertEquals(200, $response->getStatusCode());
$this->assertEquals($body, $response->getBody()->getContents());
} catch (\Throwable $e) {
$this->assertTrue(false, 'should not here');
}
// HeadObjRequest
try {
$request = new Oss\Models\HeadObjectRequest($bucketName, $objectName);
$result = $client->presign($request);
$response = $httpClient->request($result->method, $result->url);
$this->assertEquals(200, $response->getStatusCode());
$this->assertEquals(strlen($body), $response->getHeaderLine('content-length'));
} catch (\Throwable $e) {
$this->assertTrue(false, 'should not here');
}
// UploadPart
$objectNameMultipart = self::$OBJECTNAME_PREFIX . self::randomLowStr() . '-multi-part';
try {
$request = new Oss\Models\InitiateMultipartUploadRequest($bucketName, $objectNameMultipart);
$result = $client->presign($request);
$response = $httpClient->request($result->method, $result->url, ['headers' => $result->signedHeaders]);
$this->assertEquals(200, $response->getStatusCode());
} catch (\Throwable $e) {
$this->assertTrue(false, 'should not here');
}
$body = $response->getBody()->getContents();
$xml = Utils::parseXml($body);
$uploadId = Functions::tryToString($xml->UploadId);
try {
$partRequest = new Oss\Models\UploadPartRequest($bucketName, $objectNameMultipart);
$partRequest->partNumber = 1;
$partRequest->uploadId = $uploadId;
$result = $client->presign($partRequest);
$response = $httpClient->request($result->method, $result->url, ['body' => $body, ['headers' => $result->signedHeaders]]);
$this->assertEquals(200, $response->getStatusCode());
} catch (\Throwable $e) {
print_r($e->getMessage());
$this->assertTrue(false, 'should not here');
}
try {
$request = new Oss\Models\CompleteMultipartUploadRequest($bucketName, $objectNameMultipart);
$request->completeMultipartUpload = new CompleteMultipartUpload(
[new Oss\Models\UploadPart(
$partRequest->partNumber, $response->getHeaderLine('ETag')
)]
);
$request->uploadId = $uploadId;
$result = $client->presign($request);
$xml = new \SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><CompleteMultipartUpload></CompleteMultipartUpload>');
if (isset($request->completeMultipartUpload->parts)) {
foreach ($request->completeMultipartUpload->parts as $part) {
$xmlPart = $xml->addChild('Part');
$xmlPart->addChild('PartNumber', strval($part->partNumber));
$xmlPart->addChild('ETag', $part->etag);
}
}
$response = $httpClient->request($result->method, $result->url, ['body' => $xml->asXML(), 'headers' => $result->signedHeaders]);
$this->assertEquals(200, $response->getStatusCode());
$headRequest = new Oss\Models\HeadObjectRequest($bucketName, $objectNameMultipart);
$headResult = $client->headObject($headRequest);
$this->assertEquals(200, $headResult->statusCode);
$this->assertEquals(strlen($body), $headResult->contentLength);
$this->assertEquals('Multipart', $headResult->objectType);
} catch (\Throwable $e) {
print_r($e->getMessage());
$this->assertTrue(false, 'should not here');
}
$objectNameMultipartCopy = self::$OBJECTNAME_PREFIX . self::randomLowStr() . '-multi-part-copy';
try {
$initRequest = new Oss\Models\InitiateMultipartUploadRequest($bucketName, $objectNameMultipartCopy);
$initResult = $client->presign($initRequest);
$response = $httpClient->request($initResult->method, $initResult->url, ['headers' => $initResult->signedHeaders]);
$this->assertEquals(200, $response->getStatusCode());
$body = $response->getBody()->getContents();
$xml = Utils::parseXml($body);
$uploadId = Functions::tryToString($xml->UploadId);
$abortRequest = new Oss\Models\AbortMultipartUploadRequest($bucketName, $objectNameMultipartCopy, $uploadId);
$result = $client->presign($abortRequest);
$response = $httpClient->request($result->method, $result->url, ['headers' => $result->signedHeaders]);
$this->assertEquals(204, $response->getStatusCode());
} catch (\Throwable $e) {
$this->assertTrue(false, 'should not here');
}
}
public function testPresignExtra()
{
$bucketName = self::$bucketName;
$objectName = self::$OBJECTNAME_PREFIX . self::randomLowStr() . '-put-object';
$body = 'hi oss';
$httpClient = new GuzzleHttp\Client();
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(new Oss\Credentials\StaticCredentialsProvider(
self::$ACCESS_ID,
self::$ACCESS_KEY
));
$cfg->setRegion(self::$REGION);
$cfg->setEndpoint(self::$ENDPOINT);
$cfg->setSignatureVersion('v1');
$cfg->setAdditionalHeaders(['email', 'name']);
$clientV1 = new Client($cfg);
$cfg->setSignatureVersion('v4');
$clientV4 = new Client($cfg);
$putObjRequest = new Oss\Models\PutObjectRequest(
$bucketName,
$objectName,
);
$putObjRequest->body = Utils::streamFor($body);
$putObjResult = $clientV1->putObject($putObjRequest);
$this->assertEquals(200, $putObjResult->statusCode);
$this->assertEquals('OK', $putObjResult->status);
// GetObjRequest
try {
$request = new Oss\Models\GetObjectRequest($bucketName, $objectName, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, ['headers' => ['email' => 'demo@aliyun.com']]);
$options['expiration'] = (new \DateTime('now', new \DateTimeZone('UTC')))->add(new DateInterval('PT1M'));
$result = $clientV1->presign($request, $options);
$response = $httpClient->request($result->method, $result->url, ['headers' => $result->signedHeaders]);
$this->assertEquals(200, $response->getStatusCode());
$this->assertEquals($body, $response->getBody()->getContents());
} catch (\Throwable $e) {
$this->assertTrue(false, 'should not here');
}
try {
$options = null;
$request = new Oss\Models\GetObjectRequest($bucketName, $objectName, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, ['headers' => ['email' => 'demo@aliyun.com']]);
$options['expiration'] = (new \DateTime('now', new \DateTimeZone('UTC')))->modify('-10 second');
$result = $clientV1->presign($request, $options);
$response = $httpClient->request($result->method, $result->url);
$this->assertTrue(false, 'should not here');
} catch (\Throwable $e) {
//$this->assertEquals(403, $e->getMessage());
$this->assertStringContainsString("403 Forbidden", $e->getMessage());
$this->assertStringContainsString("Request has expired.", $e->getMessage());
$this->assertInstanceOf(GuzzleHttp\Exception\ClientException::class, $e);
}
try {
$options = null;
$request = new Oss\Models\GetObjectRequest($bucketName, $objectName);
$options['expiration'] = (new \DateTime('now', new \DateTimeZone('UTC')))->add(new DateInterval('PT192H'));
$result = $clientV4->presign($request, $options);
$response = $httpClient->request($result->method, $result->url, ['headers' => $result->signedHeaders]);
$this->assertTrue(false, 'should not here');
} catch (\Throwable $e) {
$this->assertStringContainsString('Expires should not be greater than 604800 (seven days)', $e->getMessage());
}
$options = null;
$request = new Oss\Models\GetObjectRequest($bucketName, $objectName, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, ['headers' => ['email' => 'demo@aliyun.com']]);
$options['expires'] = new DateInterval('PT1H');
$result = $clientV4->presign($request, $options);
$response = $httpClient->request($result->method, $result->url, ['headers' => ['email' => 'demo@aliyun.com']]);
$this->assertEquals(200, $response->getStatusCode());
}
public function testPresignWithStsToken()
{
$client = $this->getClientUseStsToken();
$bucketName = self::$bucketName;
$objectName = self::$OBJECTNAME_PREFIX . self::randomLowStr() . '-put-object';
$body = 'hi oss';
$httpClient = new GuzzleHttp\Client();
// PutObjRequest
try {
$request = new Oss\Models\PutObjectRequest($bucketName, $objectName);
$result = $client->presign($request);
$response = $httpClient->request($result->method, $result->url, ['body' => $body]);
$this->assertEquals(200, $response->getStatusCode());
} catch (\Throwable $e) {
print_r($e->getMessage());
$this->assertTrue(false, 'should not here');
}
// GetObjRequest
try {
$request = new Oss\Models\GetObjectRequest($bucketName, $objectName);
$result = $client->presign($request);
$response = $httpClient->request($result->method, $result->url);
$this->assertEquals(200, $response->getStatusCode());
$this->assertEquals($body, $response->getBody()->getContents());
} catch (\Throwable $e) {
$this->assertTrue(false, 'should not here');
}
// HeadObjRequest
try {
$request = new Oss\Models\HeadObjectRequest($bucketName, $objectName);
$result = $client->presign($request);
$response = $httpClient->request($result->method, $result->url);
$this->assertEquals(200, $response->getStatusCode());
$this->assertEquals(strlen($body), $response->getHeaderLine('content-length'));
} catch (\Throwable $e) {
$this->assertTrue(false, 'should not here');
}
// UploadPart
$objectNameMultipart = self::$OBJECTNAME_PREFIX . self::randomLowStr() . '-multi-part';
try {
$request = new Oss\Models\InitiateMultipartUploadRequest($bucketName, $objectNameMultipart);
$result = $client->presign($request);
$response = $httpClient->request($result->method, $result->url, ['headers' => $result->signedHeaders]);
$this->assertEquals(200, $response->getStatusCode());
} catch (\Throwable $e) {
$this->assertTrue(false, 'should not here');
}
$body = $response->getBody()->getContents();
$xml = Utils::parseXml($body);
$uploadId = Functions::tryToString($xml->UploadId);
try {
$partRequest = new Oss\Models\UploadPartRequest($bucketName, $objectNameMultipart);
$partRequest->partNumber = 1;
$partRequest->uploadId = $uploadId;
$result = $client->presign($partRequest);
$response = $httpClient->request($result->method, $result->url, ['body' => $body, ['headers' => $result->signedHeaders]]);
$this->assertEquals(200, $response->getStatusCode());
} catch (\Throwable $e) {
$this->assertTrue(false, 'should not here');
}
try {
$request = new Oss\Models\CompleteMultipartUploadRequest($bucketName, $objectNameMultipart);
$request->completeMultipartUpload = new CompleteMultipartUpload(
[new Oss\Models\UploadPart(
$partRequest->partNumber, $response->getHeaderLine('ETag')
)]
);
$request->uploadId = $uploadId;
$result = $client->presign($request);
$xml = new \SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><CompleteMultipartUpload></CompleteMultipartUpload>');
if (isset($request->completeMultipartUpload->parts)) {
foreach ($request->completeMultipartUpload->parts as $part) {
$xmlPart = $xml->addChild('Part');
$xmlPart->addChild('PartNumber', strval($part->partNumber));
$xmlPart->addChild('ETag', $part->etag);
}
}
$response = $httpClient->request($result->method, $result->url, ['body' => $xml->asXML(), 'headers' => $result->signedHeaders]);
$this->assertEquals(200, $response->getStatusCode());
$headRequest = new Oss\Models\HeadObjectRequest($bucketName, $objectNameMultipart);
$headResult = $client->headObject($headRequest);
$this->assertEquals(200, $headResult->statusCode);
$this->assertEquals(strlen($body), $headResult->contentLength);
$this->assertEquals('Multipart', $headResult->objectType);
} catch (\Throwable $e) {
$this->assertTrue(false, 'should not here');
}
$objectNameMultipartCopy = self::$OBJECTNAME_PREFIX . self::randomLowStr() . '-multi-part-copy';
try {
$initRequest = new Oss\Models\InitiateMultipartUploadRequest($bucketName, $objectNameMultipartCopy);
$initResult = $client->presign($initRequest);
$response = $httpClient->request($initResult->method, $initResult->url, ['headers' => $initResult->signedHeaders]);
$this->assertEquals(200, $response->getStatusCode());
$body = $response->getBody()->getContents();
$xml = Utils::parseXml($body);
$uploadId = Functions::tryToString($xml->UploadId);
$abortRequest = new Oss\Models\AbortMultipartUploadRequest($bucketName, $objectNameMultipartCopy, $uploadId);
$result = $client->presign($abortRequest);
$response = $httpClient->request($result->method, $result->url, ['headers' => $result->signedHeaders]);
$this->assertEquals(204, $response->getStatusCode());
} catch (\Throwable $e) {
$this->assertTrue(false, 'should not here');
}
}
public function testPresignError()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
try {
$request = new Oss\Models\ListObjectsRequest($bucketName);
$result = $client->presign($request);
$this->assertTrue(false, 'should not here');
} catch (\Throwable $e) {
$this->assertStringContainsString("Invalid request type: AlibabaCloud\Oss\V2\Models\ListObjectsRequest", $e);
}
try {
$result = $client->presign(null);
$this->assertTrue(false, 'should not here');
} catch (\Throwable $e) {
$this->assertStringContainsString("is not subclass of RequestModel, got NULL", $e);
}
}
public function testPresignWithContentType()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName;
$objectName = self::$OBJECTNAME_PREFIX . self::randomLowStr() . '-put-object.zip';
$body = 'hi oss';
$httpClient = new GuzzleHttp\Client();
// PutObjRequest
try {
$request = new Oss\Models\PutObjectRequest($bucketName, $objectName);
$result = $client->presign($request);
$response = $httpClient->request($result->method, $result->url, ['body' => $body]);
$this->assertCount(0, $result->signedHeaders);
$this->assertEquals(200, $response->getStatusCode());
} catch (\Throwable $e) {
print_r($e->getMessage());
$this->assertTrue(false, 'should not here');
}
// UploadPart
$objectNameMultipart = self::$OBJECTNAME_PREFIX . self::randomLowStr() . '-multi-part.zip';
try {
$request = new Oss\Models\InitiateMultipartUploadRequest($bucketName, $objectNameMultipart);
$result = $client->presign($request);
$this->assertCount(1, $result->signedHeaders);
$this->assertArrayHasKey('content-md5', $result->signedHeaders);
$response = $httpClient->request($result->method, $result->url, ['headers' => $result->signedHeaders]);
$this->assertEquals(200, $response->getStatusCode());
} catch (\Throwable $e) {
$this->assertTrue(false, 'should not here');
}
$body = $response->getBody()->getContents();
$xml = Utils::parseXml($body);
$uploadId = Functions::tryToString($xml->UploadId);
try {
$partRequest = new Oss\Models\UploadPartRequest($bucketName, $objectNameMultipart);
$partRequest->partNumber = 1;
$partRequest->uploadId = $uploadId;
$result = $client->presign($partRequest);
$response = $httpClient->request($result->method, $result->url, ['body' => $body, ['headers' => $result->signedHeaders]]);
$this->assertEquals(200, $response->getStatusCode());
} catch (\Throwable $e) {
print_r($e->getMessage());
$this->assertTrue(false, 'should not here');
}
try {
$request = new Oss\Models\CompleteMultipartUploadRequest($bucketName, $objectNameMultipart);
$request->completeMultipartUpload = new CompleteMultipartUpload(
[new Oss\Models\UploadPart(
$partRequest->partNumber, $response->getHeaderLine('ETag')
)]
);
$request->uploadId = $uploadId;
$result = $client->presign($request);
$xml = new \SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><CompleteMultipartUpload></CompleteMultipartUpload>');
if (isset($request->completeMultipartUpload->parts)) {
foreach ($request->completeMultipartUpload->parts as $part) {
$xmlPart = $xml->addChild('Part');
$xmlPart->addChild('PartNumber', strval($part->partNumber));
$xmlPart->addChild('ETag', $part->etag);
}
}
$response = $httpClient->request($result->method, $result->url, ['body' => $xml->asXML(), 'headers' => $result->signedHeaders]);
$this->assertEquals(200, $response->getStatusCode());
$headRequest = new Oss\Models\HeadObjectRequest($bucketName, $objectNameMultipart);
$headResult = $client->headObject($headRequest);
$this->assertEquals(200, $headResult->statusCode);
$this->assertEquals(strlen($body), $headResult->contentLength);
$this->assertEquals('Multipart', $headResult->objectType);
} catch (\Throwable $e) {
print_r($e->getMessage());
$this->assertTrue(false, 'should not here');
}
$objectNameMultipartCopy = self::$OBJECTNAME_PREFIX . self::randomLowStr() . '-multi-part-copy';
try {
$initRequest = new Oss\Models\InitiateMultipartUploadRequest($bucketName, $objectNameMultipartCopy);
$initResult = $client->presign($initRequest);
$response = $httpClient->request($initResult->method, $initResult->url, ['headers' => $initResult->signedHeaders]);
$this->assertEquals(200, $response->getStatusCode());
$body = $response->getBody()->getContents();
$xml = Utils::parseXml($body);
$uploadId = Functions::tryToString($xml->UploadId);
$abortRequest = new Oss\Models\AbortMultipartUploadRequest($bucketName, $objectNameMultipartCopy, $uploadId);
$result = $client->presign($abortRequest);
$response = $httpClient->request($result->method, $result->url, ['headers' => $result->signedHeaders]);
$this->assertEquals(204, $response->getStatusCode());
} catch (\Throwable $e) {
$this->assertTrue(false, 'should not here');
}
}
public function testPresignWithAnonymous()
{
$client = $this->getDefaultClient();
$bucketName = self::$bucketName.'-pub';
$objectName = self::$OBJECTNAME_PREFIX . self::randomLowStr() . '-put-object';
$client->putBucket(new Oss\Models\PutBucketRequest($bucketName));
$client->putBucketPublicAccessBlock(new Oss\Models\PutBucketPublicAccessBlockRequest(
$bucketName,
new Oss\Models\PublicAccessBlockConfiguration(
false
)
));
$content = 'hi oss';
$putObjectRequest = new Oss\Models\PutObjectRequest(
$bucketName, $objectName
);
$putObjectRequest->acl = 'public-read';
$putObjectRequest->body = Utils::streamFor($content);
$client->putObject($putObjectRequest);
$request = new Oss\Models\GetObjectRequest($bucketName, $objectName);
$options['credentials_provider'] = new Oss\Credentials\AnonymousCredentialsProvider();
$result = $client->presign($request, $options);
$this->assertNotEmpty($result->url);
$this->assertNotEmpty($result->method);
$this->assertStringNotContainsString('?', $result->url);
$httpClient = new GuzzleHttp\Client();
$response = $httpClient->get($result->url);
$this->assertEquals($response->getStatusCode(), 200);
$this->assertEquals($response->getBody()->getContents(), $content);
}
}

View File

@@ -0,0 +1,88 @@
<?php
namespace IntegrationTests;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestIntegration.php';
use AlibabaCloud\Oss\V2 as Oss;
class ClientPublicAccessBlockTest extends TestIntegration
{
public function testPublicAccessBlock()
{
$client = $this->getDefaultClient();
// PutPublicAccessBlock
$putResult = $client->putPublicAccessBlock(new Oss\Models\PutPublicAccessBlockRequest(
new Oss\Models\PublicAccessBlockConfiguration(true)
));
$this->assertEquals(200, $putResult->statusCode);
$this->assertEquals('OK', $putResult->status);
$this->assertEquals(True, count($putResult->headers) > 0);
$this->assertEquals(24, strlen($putResult->requestId));
// GetPublicAccessBlock
$getResult = $client->getPublicAccessBlock(new Oss\Models\GetPublicAccessBlockRequest());
$this->assertEquals(200, $getResult->statusCode);
$this->assertEquals('OK', $getResult->status);
$this->assertEquals(True, count($getResult->headers) > 0);
$this->assertEquals(24, strlen($getResult->requestId));
// DeletePublicAccessBlock
$delResult = $client->deletePublicAccessBlock(new Oss\Models\DeletePublicAccessBlockRequest());
$this->assertEquals(204, $delResult->statusCode);
$this->assertEquals('No Content', $delResult->status);
$this->assertEquals(True, count($delResult->headers) > 0);
$this->assertEquals(24, strlen($delResult->requestId));
}
public function testPublicAccessBlockFail()
{
$client = $this->getInvalidAkClient();
// PutPublicAccessBlock
try {
$putResult = $client->putPublicAccessBlock(new Oss\Models\PutPublicAccessBlockRequest(
new Oss\Models\PublicAccessBlockConfiguration(true)
));
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error PutPublicAccessBlock', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// GetPublicAccessBlock
try {
$getResult = $client->getPublicAccessBlock(new Oss\Models\GetPublicAccessBlockRequest());
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error GetPublicAccessBlock', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
// DeletePublicAccessBlock
try {
$delResult = $client->deletePublicAccessBlock(new Oss\Models\DeletePublicAccessBlockRequest());
$this->assertTrue(false, "should not here");
} catch (Oss\Exception\OperationException $e) {
$this->assertStringContainsString('Operation error DeletePublicAccessBlock', $e);
$se = $e->getPrevious();
$this->assertInstanceOf(Oss\Exception\ServiceException::class, $se);
if ($se instanceof Oss\Exception\ServiceException) {
$this->assertEquals('InvalidAccessKeyId', $se->getErrorCode());
$this->assertEquals(403, $se->getStatusCode());
$this->assertEquals(24, strlen($se->getRequestId()));
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,402 @@
<?php
namespace IntegrationTests;
use AlibabaCloud\Oss\V2 as Oss;
class TestIntegration extends \PHPUnit\Framework\TestCase
{
static $ACCESS_ID;
static $ACCESS_KEY;
static $ENDPOINT;
static $REGION;
static $RAM_ROLE_ARN;
static $USER_ID;
static $PAYER_ACCESS_ID;
static $PAYER_ACCESS_KEY;
static $PAYER_UID;
public static $BUCKETNAME_PREFIX = "php-sdk-test-bucket-";
public static $OBJECTNAME_PREFIX = "php-sdk-test-object-";
static ?Oss\Client $defaultClient = null;
static ?Oss\Client $invalidAkClient = null;
static ?Oss\Client $signV1Client = null;
static ?string $tempDir;
static ?string $bucketName = null;
public static function setUpBeforeClass(): void
{
self::$ACCESS_ID = getenv("OSS_TEST_ACCESS_KEY_ID");
self::$ACCESS_KEY = getenv("OSS_TEST_ACCESS_KEY_SECRET");
self::$ENDPOINT = getenv("OSS_TEST_ENDPOINT");
self::$REGION = getenv("OSS_TEST_REGION") ?? 'cn-hangzhou';
self::$RAM_ROLE_ARN = getenv("OSS_TEST_RAM_ROLE_ARN");
self::$USER_ID = getenv("OSS_TEST_USER_ID");
self::$PAYER_ACCESS_ID = getenv("OSS_TEST_PAYER_ACCESS_KEY_ID");
self::$PAYER_ACCESS_KEY = getenv("OSS_TEST_PAYER_ACCESS_KEY_SECRET");
self::$PAYER_UID = getenv("OSS_TEST_PAYER_UID");
$client = self::getDefaultClient();
$bucketName = self::randomBucketName();
self::$bucketName = $bucketName;
self::$tempDir = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'oss-php-sdk-test-' . strval(time());
mkdir(self::$tempDir);
$client->putBucket(new Oss\Models\PutBucketRequest($bucketName));
}
public static function tearDownAfterClass(): void
{
//clean access points
if (version_compare(PHP_VERSION, '8.0.0', '>=')) {
self::deleteAccessPoint(self::getDefaultClient(), self::$bucketName);
}
//clean buckets
self::cleanBucket(self::getDefaultClient(), self::$bucketName);
//clean temp dir
self::deleteDir(self::$tempDir);
}
static function getDefaultClient()
{
if (self::$defaultClient != null) {
return self::$defaultClient;
}
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(new Oss\Credentials\StaticCredentialsProvider(
self::$ACCESS_ID,
self::$ACCESS_KEY
));
$cfg->setRegion(self::$REGION);
$cfg->setEndpoint(self::$ENDPOINT);
self::$defaultClient = new Oss\Client($cfg);
return self::$defaultClient;
}
static function getClient(string $ak, $sk, $region, $endpoint)
{
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(new Oss\Credentials\StaticCredentialsProvider(
$ak,
$sk
));
$cfg->setRegion($region);
if (!empty($endpoint)) {
$cfg->setEndpoint($endpoint);
}
return new Oss\Client($cfg);
}
static function getInvalidAkClient()
{
if (self::$invalidAkClient != null) {
return self::$invalidAkClient;
}
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(new Oss\Credentials\StaticCredentialsProvider(
'invalid-ak',
'invalid'
));
$cfg->setRegion(self::$REGION);
$cfg->setEndpoint(self::$ENDPOINT);
self::$invalidAkClient = new Oss\Client($cfg);
return self::$invalidAkClient;
}
public static function getTempFileName()
{
return tempnam(self::$tempDir, 'test');
}
/**
* @return Oss\Client|null
* @throws \Throwable
*/
public function getClientUseStsToken()
{
try {
$resp = $this->stsAssumeRole(self::$ACCESS_ID, self::$ACCESS_KEY, self::$RAM_ROLE_ARN);
$accessKeyId = $resp['Credentials']['AccessKeyId'];
$accessKeySecret = $resp['Credentials']['AccessKeySecret'];
$token = $resp['Credentials']['SecurityToken'];
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(new Oss\Credentials\StaticCredentialsProvider(
$accessKeyId,
$accessKeySecret,
$token
));
$cfg->setRegion(self::$REGION);
$cfg->setEndpoint(self::$ENDPOINT);
return new Oss\Client($cfg);
} catch (\Throwable $e) {
throw $e;
}
}
private function stsAssumeRole($accessKeyId, $accessKeySecret, $roleArn)
{
// Constants
$StsSignVersion = "1.0";
$StsAPIVersion = "2015-04-01";
$StsHost = "https://sts.aliyuncs.com/";
$TimeFormat = "Y-m-d\TH:i:s\Z";
$RespBodyFormat = "JSON";
$PercentEncode = "%2F";
$HTTPGet = "GET";
$uuid = "Nonce-" . rand(1000, 9999);
$currentTime = (new \DateTime('now', new \DateTimeZone('UTC')))->format($TimeFormat);
$queryStr = http_build_query([
"SignatureVersion" => $StsSignVersion,
"Format" => $RespBodyFormat,
"Timestamp" => $currentTime,
"RoleArn" => $roleArn,
"RoleSessionName" => "oss_test_sess",
"AccessKeyId" => $accessKeyId,
"SignatureMethod" => "HMAC-SHA1",
"Version" => $StsAPIVersion,
"Action" => "AssumeRole",
"SignatureNonce" => $uuid,
"DurationSeconds" => 3600
]);
parse_str($queryStr, $queryParams);
ksort($queryParams);
$queryStr = http_build_query($queryParams);
$strToSign = $HTTPGet . "&" . $PercentEncode . "&" . rawurlencode($queryStr);
$signature = base64_encode(hash_hmac('sha1', $strToSign, $accessKeySecret . "&", true));
$assumeURL = $StsHost . "?" . $queryStr . "&Signature=" . urlencode($signature);
$httpClient = new \GuzzleHttp\Client();
try {
$resp = $httpClient->get($assumeURL);
$result = json_decode($resp->getBody()->getContents(), true);
if (json_last_error() !== JSON_ERROR_NONE) {
throw new \Exception("Failed to decode JSON response");
}
return $result;
} catch (\Throwable $e) {
throw $e;
}
}
public static function randomBucketName()
{
return self::$BUCKETNAME_PREFIX . strval(rand(0, 100)) . '-' . strval(time());
}
public static function randomObjectName()
{
return self::$OBJECTNAME_PREFIX . strval(rand(0, 100)) . '-' . strval(time());
}
public static function randomLowStr()
{
self::$BUCKETNAME_PREFIX . strval(rand(0, 100)) . '-' . strval(time());
}
public static function randomStr()
{
self::$BUCKETNAME_PREFIX . strval(rand(0, 100)) . '-' . strval(time());
}
public static function waitFor(float $sec)
{
usleep((int)($sec * 1000000));
}
public static function cleanBucket(Oss\Client $client, string $bucketName): void
{
//delete Objects
$paginator = new Oss\Paginator\ListObjectsPaginator($client);
$iter = $paginator->iterPage(new Oss\Models\ListObjectsRequest($bucketName));
foreach ($iter as $page) {
$objects = [];
foreach ($page->contents ?? [] as $content) {
$objects[] = new Oss\Models\DeleteObject($content->key);
}
if (!empty($objects)) {
$client->deleteMultipleObjects(new Oss\Models\DeleteMultipleObjectsRequest(
$bucketName,
$objects
));
}
}
//delete uploadpart
$paginator = new Oss\Paginator\ListMultipartUploadsPaginator($client);
$iter = $paginator->iterPage(new Oss\Models\ListMultipartUploadsRequest($bucketName));
foreach ($iter as $page) {
foreach ($page->uploads ?? [] as $upload) {
$client->abortMultipartUpload(new Oss\Models\AbortMultipartUploadRequest(
$bucketName,
$upload->key,
$upload->uploadId
));
}
}
$client->deleteBucket(new Oss\Models\DeleteBucketRequest($bucketName));
}
public static function deleteDir(string $dir): void
{
if (!is_dir($dir)) {
return;
}
if ($handle = opendir($dir)) {
while (($entry = readdir($handle)) !== false) {
if ($entry == '.' || $entry == '..') {
continue;
}
$file = $dir . DIRECTORY_SEPARATOR . $entry;
if (is_dir($file)) {
self::deleteDir($file);
} else {
unlink($file);
}
}
closedir($handle);
}
rmdir($dir);
}
public static function getDataPath(): string
{
return dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'Data';
}
public static function deleteAccessPoint(Oss\Client $client, string $bucketName): void
{
$listRequest = new Oss\Models\ListAccessPointsRequest();
$listRequest->bucket = $bucketName;
while (true) {
$listResult = $client->listAccessPoints($listRequest);
if (isset($listResult->listAccessPoints->accessPoints->accessPoints) && count($listResult->listAccessPoints->accessPoints->accessPoints) > 0) {
foreach ($listResult->listAccessPoints->accessPoints->accessPoints as $accessPoint) {
switch ($accessPoint->status) {
case 'creating':
sleep(3);
while (true) {
$getResult = $client->getAccessPoint(new Oss\Models\GetAccessPointRequest(
$bucketName, $accessPoint->accessPointName
));
if ($getResult->getAccessPoint->status != 'creating') {
break;
} else {
sleep(3);
}
}
$client->deleteAccessPoint(new Oss\Models\DeleteAccessPointRequest(
$bucketName, $accessPoint->accessPointName
));
break;
case 'deleting':
sleep(5);
break;
default:
$client->deleteAccessPoint(new Oss\Models\DeleteAccessPointRequest(
$bucketName, $accessPoint->accessPointName
));
break;
}
while (true) {
try {
$client->getAccessPoint(new Oss\Models\GetAccessPointRequest(
$bucketName, $accessPoint->accessPointName
));
} catch (Oss\Exception\OperationException $e) {
$se = $e->getPrevious();
if ($se instanceof Oss\Exception\ServiceException) {
if ($se->getErrorCode() == 'NoSuchAccessPoint' && $se->getStatusCode() == 404) {
break;
}
}
}
sleep(3);
}
}
if ($listResult->listAccessPoints->isTruncated == false) {
break;
}
if ($listResult->listAccessPoints->nextContinuationToken != "") {
$listRequest->continuationToken = $listResult->listAccessPoints->nextContinuationToken;
}
} else {
break;
}
}
}
/**
* @param $filename
* @param $size
*/
public function generateFile($filename, $size)
{
if (
file_exists($filename) &&
$size == sprintf('%u', filesize($filename))
) {
return;
}
$part_size = 32;
$fp = fopen($filename, "w");
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
if ($fp) {
while ($size > 0) {
if ($size < $part_size) {
$write_size = $size;
} else {
$write_size = $part_size;
}
$size -= $write_size;
$a = $characters[rand(0, $charactersLength - 1)];
$content = str_repeat($a, $write_size);
$flag = fwrite($fp, $content);
if (!$flag) {
$this->assertTrue(false, "write to $filename failed.");
break;
}
}
} else {
$this->assertTrue(false, "open $filename failed.");
}
fclose($fp);
}
public function object_get_contents($client, $bucket, $key): string
{
$result = $client->getObject(new Oss\Models\GetObjectRequest(
self::$bucketName,
$key,
));
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
return $result->body->getContents();
}
public function object_get_content_type($client, $bucket, $key): string
{
$result = $client->headObject(new Oss\Models\HeadObjectRequest(
self::$bucketName,
$key,
));
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('OK', $result->status);
return $result->contentType;
}
}