Files
gaofeng 81ade70944 提交
2026-06-17 09:23:18 +08:00

2904 lines
151 KiB
PHP

<?php
namespace UnitTests\Transform;
use AlibabaCloud\Oss\V2\Models;
use AlibabaCloud\Oss\V2\Models\RestoreRequest;
use AlibabaCloud\Oss\V2\OperationInput;
use AlibabaCloud\Oss\V2\Transform\ObjectBasic;
use AlibabaCloud\Oss\V2\OperationOutput;
use AlibabaCloud\Oss\V2\Exception;
use AlibabaCloud\Oss\V2\Utils;
class ObjectBasicTest extends \PHPUnit\Framework\TestCase
{
public function testFromDeleteMultipleObjects()
{
// miss required field
try {
$request = new Models\DeleteMultipleObjectsRequest();
$input = ObjectBasic::fromDeleteMultipleObjects($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, bucket", (string)$e);
}
try {
$request = new Models\DeleteMultipleObjectsRequest('bucket-123');
$input = ObjectBasic::fromDeleteMultipleObjects($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, objects", (string)$e);
}
try {
$request = new Models\DeleteMultipleObjectsRequest('bucket-123');
$request->objects = [
new Models\DeleteObject('key1'),
new Models\DeleteObject('key2', 'version-id-2'),
];
$request->delete = new Models\Delete([
new Models\ObjectIdentifier('key1'),
new Models\ObjectIdentifier('key2', 'version-id-2'),
], true);
$input = ObjectBasic::fromDeleteMultipleObjects($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("InvalidArgumentException: The objects and delete parameters cannot be set simultaneously", (string)$e);
}
try {
$request = new Models\DeleteMultipleObjectsRequest('bucket-123');
$request->delete = new Models\Delete();
$request->delete->quiet = true;
$input = ObjectBasic::fromDeleteMultipleObjects($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, delete.objects", (string)$e);
}
// bucket only
$request = new Models\DeleteMultipleObjectsRequest('bucket-123', []);
$input = ObjectBasic::fromDeleteMultipleObjects($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('application/xml', $input->getHeaders()['content-type']);
$this->assertEquals('D0iFyCSGo62Kd/zfca7aPg==', $input->getHeaders()['content-md5']);
$this->assertEquals('url', $input->getParameters()['encoding-type']);
// no quiet
$request = new Models\DeleteMultipleObjectsRequest(
'bucket-123',
[
new Models\DeleteObject('key1'),
new Models\DeleteObject('key2', 'version-id-2'),
],
'url1',
null,
'request-payer'
);
$input = ObjectBasic::fromDeleteMultipleObjects($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('application/xml', $input->getHeaders()['content-type']);
$this->assertEquals('CNLPZjtD0MZNPvjKGf3yBg==', $input->getHeaders()['content-md5']);
$this->assertEquals('request-payer', $input->getHeaders()['x-oss-request-payer']);
$this->assertEquals('url1', $input->getParameters()['encoding-type']);
$str = $input->getBody()->getContents();
$this->assertStringContainsString('<Delete>', $str);
$xml = \simplexml_load_string($str);
$this->assertEquals(2, $xml->count());
$this->assertEquals(false, isset($xml->Quiet));
$this->assertEquals(2, $xml->Object->count());
$this->assertEquals('key1', $xml->Object[0]->Key);
$this->assertEquals(false, isset($xml->Object[0]->VersionId));
$this->assertEquals('key2', $xml->Object[1]->Key);
$this->assertEquals('version-id-2', $xml->Object[1]->VersionId);
// all settings
$xmlStr = <<<BBB
<?xml version="1.0" encoding="UTF-8"?><Delete><Quiet>true</Quiet><Object><Key>key1</Key></Object><Object><Key>key2</Key><VersionId>version-id-2</VersionId></Object></Delete>
BBB;
$request = new Models\DeleteMultipleObjectsRequest(
'bucket-123',
[
new Models\DeleteObject('key1'),
new Models\DeleteObject('key2', 'version-id-2'),
],
'url1',
true,
'request-payer'
);
$input = ObjectBasic::fromDeleteMultipleObjects($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('application/xml', $input->getHeaders()['content-type']);
$this->assertEquals('BesWzihB4UGzEXQLrXWg0w==', $input->getHeaders()['content-md5']);
$this->assertEquals('request-payer', $input->getHeaders()['x-oss-request-payer']);
$this->assertEquals('url1', $input->getParameters()['encoding-type']);
$str = $input->getBody()->getContents();
$this->assertEquals($xmlStr, $this->cleanXml($str));
$this->assertStringContainsString('<Delete>', $str);
$xml = \simplexml_load_string($str);
$this->assertEquals(3, $xml->count());
$this->assertEquals('true', $xml->Quiet);
$this->assertEquals(2, $xml->Object->count());
$this->assertEquals('key1', $xml->Object[0]->Key);
$this->assertEquals(false, isset($xml->Object[0]->VersionId));
$this->assertEquals('key2', $xml->Object[1]->Key);
$this->assertEquals('version-id-2', $xml->Object[1]->VersionId);
// extend header & parameters
$request = new Models\DeleteMultipleObjectsRequest(
'bucket-123',
[],
null,
null,
null,
[
'headers' => ['x-oss-test' => 'test-123'],
'parameters' => ['x-oss-param' => 'param-123']
],
null,
);
$input = ObjectBasic::fromDeleteMultipleObjects($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('application/xml', $input->getHeaders()['content-type']);
$this->assertEquals('D0iFyCSGo62Kd/zfca7aPg==', $input->getHeaders()['content-md5']);
$this->assertEquals('test-123', $input->getHeaders()['x-oss-test']);
$this->assertEquals('param-123', $input->getParameters()['x-oss-param']);
$request = new Models\DeleteMultipleObjectsRequest(
'bucket-123',
);
$request->delete = new Models\Delete(
[
new Models\ObjectIdentifier('key1'),
new Models\ObjectIdentifier('key2', 'version-id-2'),
], true
);
$input = ObjectBasic::fromDeleteMultipleObjects($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('application/xml', $input->getHeaders()['content-type']);
$this->assertEquals('BesWzihB4UGzEXQLrXWg0w==', $input->getHeaders()['content-md5']);
$this->assertEquals($xmlStr, $this->cleanXml($input->getBody()->getContents()));
}
public function testToDeleteMultipleObjects()
{
// empty output
try {
$output = new OperationOutput();
$result = ObjectBasic::toDeleteMultipleObjects($output);
$this->assertTrue(false, 'should not here');
} catch (Exception\DeserializationExecption $e) {
$this->assertStringContainsString('Not found tag <DeleteResult>', $e);
}
//empty xml
$str = '<?xml version="1.0" encoding="UTF-8"?>
<DeleteResult></DeleteResult>';
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'content-type' => 'test'],
Utils::streamFor($str)
);
$result = ObjectBasic::toDeleteMultipleObjects($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals(2, count($result->headers));
$this->assertEquals('test', $result->headers['content-type']);
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertNull($result->deletedObjects);
$this->assertNull($result->encodingType);
// xml
$str = '<?xml version="1.0" encoding="UTF-8"?>
<DeleteResult xmlns="http://doc.oss-cn-hangzhou.aliyuncs.com">
<Deleted>
<Key>multipart.data</Key>
</Deleted>
<Deleted>
<Key>test.jpg</Key>
</Deleted>
<Deleted>
<Key>demo.jpg</Key>
</Deleted>
</DeleteResult>';
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'content-type' => 'test'],
Utils::streamFor($str)
);
$result = ObjectBasic::toDeleteMultipleObjects($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals(2, count($result->headers));
$this->assertEquals('test', $result->headers['content-type']);
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertEquals(3, count($result->deletedObjects));
$this->assertEquals('multipart.data', $result->deletedObjects[0]->key);
$this->assertNull($result->deletedObjects[0]->versionId);
$this->assertNull($result->deletedObjects[0]->deleteMarker);
$this->assertNull($result->deletedObjects[0]->deleteMarkerVersionId);
$this->assertEquals('test.jpg', $result->deletedObjects[1]->key);
$this->assertEquals('demo.jpg', $result->deletedObjects[2]->key);
// encodingType
$str = '<?xml version="1.0" encoding="UTF-8"?>
<DeleteResult>
<EncodingType>url</EncodingType>
<Deleted>
<Key>123%2Fmultipart.data</Key>
</Deleted>
<Deleted>
<Key>135%2Ftest.jpg</Key>
</Deleted>
<Deleted>
<Key>136%2Fdemo.jpg</Key>
</Deleted>
</DeleteResult>';
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'content-type' => 'test'],
Utils::streamFor($str)
);
$result = ObjectBasic::toDeleteMultipleObjects($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals(2, count($result->headers));
$this->assertEquals('test', $result->headers['content-type']);
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertEquals(3, count($result->deletedObjects));
$this->assertEquals('123/multipart.data', $result->deletedObjects[0]->key);
$this->assertNull($result->deletedObjects[0]->versionId);
$this->assertNull($result->deletedObjects[0]->deleteMarker);
$this->assertNull($result->deletedObjects[0]->deleteMarkerVersionId);
$this->assertEquals('135/test.jpg', $result->deletedObjects[1]->key);
$this->assertEquals('136/demo.jpg', $result->deletedObjects[2]->key);
// xml
$str = '<?xml version="1.0" encoding="UTF-8"?>
<DeleteResult>
<Deleted>
<Key>multipart.data</Key>
<VersionId>CAEQNRiBgIDyz.6C0BYiIGQ2NWEwNmVhNTA3ZTQ3MzM5ODliYjM1ZTdjYjA4****</VersionId>
</Deleted>
<Deleted>
<Key>demo.jpg</Key>
<VersionId>CAEQNRiBgICEoPiC0BYiIGMxZWJmYmMzYjE0OTQ0ZmZhYjgzNzkzYjc2NjZk****</VersionId>
<DeleteMarker>true</DeleteMarker>
<DeleteMarkerVersionId>THUQNRiBgICEoPiC0BYiIGMxZWJmYmMzYjE0OTQ0ZmZhYjgzNzkzYjc2NjZk****</DeleteMarkerVersionId>
</Deleted>
</DeleteResult>';
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'content-type' => 'test'],
Utils::streamFor($str)
);
$result = ObjectBasic::toDeleteMultipleObjects($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals(2, count($result->headers));
$this->assertEquals('test', $result->headers['content-type']);
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertEquals(2, count($result->deletedObjects));
$this->assertEquals('multipart.data', $result->deletedObjects[0]->key);
$this->assertEquals('CAEQNRiBgIDyz.6C0BYiIGQ2NWEwNmVhNTA3ZTQ3MzM5ODliYjM1ZTdjYjA4****', $result->deletedObjects[0]->versionId);
$this->assertNull($result->deletedObjects[0]->deleteMarker);
$this->assertNull($result->deletedObjects[0]->deleteMarkerVersionId);
$this->assertEquals('demo.jpg', $result->deletedObjects[1]->key);
$this->assertEquals('CAEQNRiBgICEoPiC0BYiIGMxZWJmYmMzYjE0OTQ0ZmZhYjgzNzkzYjc2NjZk****', $result->deletedObjects[1]->versionId);
$this->assertEquals(true, $result->deletedObjects[1]->deleteMarker);
$this->assertEquals('THUQNRiBgICEoPiC0BYiIGMxZWJmYmMzYjE0OTQ0ZmZhYjgzNzkzYjc2NjZk****', $result->deletedObjects[1]->deleteMarkerVersionId);
}
public function testFromPutObject()
{
// miss required field
try {
$request = new Models\PutObjectRequest();
$input = ObjectBasic::fromPutObject($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, bucket", (string)$e);
}
try {
$request = new Models\PutObjectRequest('bucket-123');
$input = ObjectBasic::fromPutObject($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, key", (string)$e);
}
$request = new Models\PutObjectRequest('bucket-123', 'key-123');
$input = ObjectBasic::fromPutObject($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertNull($input->getBody());
$request = new Models\PutObjectRequest('bucket-123', 'key-123');
$request->cacheControl = 'no-cache';
$request->contentDisposition = 'attachment';
$request->contentEncoding = 'utf-8';
$request->contentMd5 = 'eB5eJF1ptWaXm4bijSPyxw==';
$request->contentLength = 100;
$request->expires = '2022-10-12T00:00:00.000Z';
$request->forbidOverwrite = true;
$request->serverSideEncryption = 'AES256';
$request->acl = Models\ObjectACLType::PRIVATE;
$request->storageClass = Models\StorageClassType::STANDARD;
$request->metadata = array(
"location" => "demo",
"user" => "walker",
);
$request->tagging = 'TagA=A&TagB=B';
$input = ObjectBasic::fromPutObject($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertNull($input->getBody());
$this->assertEquals('no-cache', $input->getHeaders()['cache-control']);
$this->assertEquals('attachment', $input->getHeaders()['content-disposition']);
$this->assertEquals('utf-8', $input->getHeaders()['content-encoding']);
$this->assertEquals('100', $input->getHeaders()['content-length']);
$this->assertEquals('eB5eJF1ptWaXm4bijSPyxw==', $input->getHeaders()['content-md5']);
$this->assertEquals('walker', $input->getHeaders()['x-oss-meta-user']);
$this->assertEquals('demo', $input->getHeaders()['x-oss-meta-location']);
$this->assertEquals('AES256', $input->getHeaders()['x-oss-server-side-encryption']);
$this->assertEquals(Models\StorageClassType::STANDARD, $input->getHeaders()['x-oss-storage-class']);
$this->assertEquals(Models\ObjectACLType::PRIVATE, $input->getHeaders()['x-oss-object-acl']);
$this->assertEquals('true', $input->getHeaders()['x-oss-forbid-overwrite']);
$this->assertEquals('2022-10-12T00:00:00.000Z', $input->getHeaders()['expires']);
$this->assertEquals('TagA=A&TagB=B', $input->getHeaders()['x-oss-tagging']);
$this->assertEquals([], $input->getParameters());
$this->assertEquals(true, $input->getOpMetadata()['detect_content_type']);
$request = new Models\PutObjectRequest('bucket-123', 'key-123');
$input = ObjectBasic::fromPutObject($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertNull($input->getBody());
$request = new Models\PutObjectRequest('bucket-123', 'key-123');
$request->cacheControl = 'no-cache';
$request->contentDisposition = 'attachment';
$request->contentEncoding = 'utf-8';
$request->contentMd5 = 'eB5eJF1ptWaXm4bijSPyxw==';
$request->contentLength = 1000;
$request->expires = '2022-10-12T00:00:00.000Z';
$request->forbidOverwrite = true;
$request->serverSideEncryption = 'KMS';
$request->serverSideDataEncryption = 'SM4';
$request->serverSideEncryptionKeyId = '9468da86-3509-4f8d-a61e-6eab1eac****';
$request->acl = Models\ObjectACLType::PRIVATE;
$request->storageClass = Models\StorageClassType::STANDARD;
$request->metadata = array(
"name" => "walker",
"email" => "demo@aliyun.com",
);
$request->tagging = 'TagA=B&TagC=D';
$body = random_bytes(1000);
$request->body = Utils::streamFor($body);
$input = ObjectBasic::fromPutObject($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertEquals($input->getBody()->getContents(), $body);
$this->assertEquals('no-cache', $input->getHeaders()['cache-control']);
$this->assertEquals('attachment', $input->getHeaders()['content-disposition']);
$this->assertEquals('utf-8', $input->getHeaders()['content-encoding']);
$this->assertEquals('1000', $input->getHeaders()['content-length']);
$this->assertEquals('eB5eJF1ptWaXm4bijSPyxw==', $input->getHeaders()['content-md5']);
$this->assertEquals('walker', $input->getHeaders()['x-oss-meta-name']);
$this->assertEquals('demo@aliyun.com', $input->getHeaders()['x-oss-meta-email']);
$this->assertEquals('KMS', $input->getHeaders()['x-oss-server-side-encryption']);
$this->assertEquals('SM4', $input->getHeaders()['x-oss-server-side-data-encryption']);
$this->assertEquals('9468da86-3509-4f8d-a61e-6eab1eac****', $input->getHeaders()['x-oss-server-side-encryption-key-id']);
$this->assertEquals(Models\StorageClassType::STANDARD, $input->getHeaders()['x-oss-storage-class']);
$this->assertEquals(Models\ObjectACLType::PRIVATE, $input->getHeaders()['x-oss-object-acl']);
$this->assertEquals('true', $input->getHeaders()['x-oss-forbid-overwrite']);
$this->assertEquals('2022-10-12T00:00:00.000Z', $input->getHeaders()['expires']);
$this->assertEquals('TagA=B&TagC=D', $input->getHeaders()['x-oss-tagging']);
$this->assertEquals([], $input->getParameters());
$this->assertEquals(true, $input->getOpMetadata()['detect_content_type']);
$request = new Models\PutObjectRequest('bucket-123', 'key-123');
$callback = base64_encode('{
"callbackUrl":"www.aliyuncs.com",
"callbackBody":"filename=${object}&size=${size}&mimeType=${mimeType}",
"callbackBodyType":"application/x-www-form-urlencoded",
}');
$callbackVar = base64_encode('{"x:a":"a", "x:b":"b"}');
$request->callback = $callback;
$request->callbackVar = $callbackVar;
$request->body = Utils::streamFor($body);
$input = ObjectBasic::fromPutObject($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertEquals($input->getBody()->getContents(), $body);
$this->assertEquals($callback, $input->getHeaders()['x-oss-callback']);
$this->assertEquals($callbackVar, $input->getHeaders()['x-oss-callback-var']);
$this->assertEquals([], $input->getParameters());
$this->assertEquals(true, $input->getOpMetadata()['detect_content_type']);
$request = new Models\PutObjectRequest('bucket-123', 'key-123');
$request->body = Utils::streamFor($body);
$request->trafficLimit = 102400;
$request->requestPayer = 'requester';
$input = ObjectBasic::fromPutObject($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertEquals($input->getBody()->getContents(), $body);
$this->assertEquals('102400', $input->getHeaders()['x-oss-traffic-limit']);
$this->assertEquals('requester', $input->getHeaders()['x-oss-request-payer']);
$this->assertEquals([], $input->getParameters());
$this->assertEquals(true, $input->getOpMetadata()['detect_content_type']);
$request = new Models\PutObjectRequest('bucket-123', 'key-123', null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, Models\ObjectACLType::PUBLIC_READ);
$request->body = Utils::streamFor($body);
$request->trafficLimit = 102400;
$request->requestPayer = 'requester';
$input = ObjectBasic::fromPutObject($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertEquals($input->getBody()->getContents(), $body);
$this->assertEquals('102400', $input->getHeaders()['x-oss-traffic-limit']);
$this->assertEquals('requester', $input->getHeaders()['x-oss-request-payer']);
$this->assertEquals([], $input->getParameters());
$this->assertEquals(true, $input->getOpMetadata()['detect_content_type']);
$this->assertEquals(true, $input->getHeaders()['x-oss-object-acl']);
$request = new Models\PutObjectRequest('bucket-123', 'key-123', Models\ObjectACLType::PRIVATE, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, Models\ObjectACLType::PUBLIC_READ);
$request->body = Utils::streamFor($body);
$request->trafficLimit = 102400;
$request->requestPayer = 'requester';
$input = ObjectBasic::fromPutObject($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertEquals($input->getBody()->getContents(), $body);
$this->assertEquals('102400', $input->getHeaders()['x-oss-traffic-limit']);
$this->assertEquals('requester', $input->getHeaders()['x-oss-request-payer']);
$this->assertEquals([], $input->getParameters());
$this->assertEquals(true, $input->getOpMetadata()['detect_content_type']);
$this->assertEquals(true, $input->getHeaders()['x-oss-object-acl']);
}
public function testToPutObject()
{
// empty output
try {
$output = new OperationOutput();
$result = ObjectBasic::toPutObject($output);
$this->assertTrue(false, 'should not here');
} catch (\Throwable $e) {
$this->assertStringContainsString('Call to a member function hasHeader() on null', $e->getMessage());
}
try {
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'ETag' => '"7265F4D211B56873A381D321F586****"', 'Content-MD5' => '1B2M2Y8AsgTpgAmY7Ph****', 'x-oss-hash-crc64ecma' => '316181249502703*****'],
null,
new OperationInput('PutObject', 'PUT', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'ETag' => '"7265F4D211B56873A381D321F586****"', 'Content-MD5' => '1B2M2Y8AsgTpgAmY7Ph****', 'x-oss-hash-crc64ecma' => '316181249502703*****'],
),
);
$result = ObjectBasic::toPutObject($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals(4, count($result->headers));
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertEquals('"7265F4D211B56873A381D321F586****"', $result->etag);
$this->assertEquals('1B2M2Y8AsgTpgAmY7Ph****', $result->contentMd5);
$this->assertEquals('316181249502703*****', $result->hashCrc64);
} catch (\Throwable $e) {
$this->assertTrue(false, "should not here");
}
try {
$body = '{"filename":"object.txt","size":"100","mimeType":""}';
$callback = base64_encode('{
"callbackUrl":"www.aliyuncs.com",
"callbackBody":"filename=${object}&size=${size}&mimeType=${mimeType}",
"callbackBodyType":"application/x-www-form-urlencoded",
}');
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'ETag' => '"7265F4D211B56873A381D321F586****"', 'Content-MD5' => '1B2M2Y8AsgTpgAmY7Ph****', 'x-oss-hash-crc64ecma' => '316181249502703*****', 'x-oss-version-id' => 'CAEQNhiBgMDJgZCA0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY0****'],
Utils::streamFor($body),
new OperationInput('PutObject', 'PUT', ['x-oss-callback' => $callback]),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'ETag' => '"7265F4D211B56873A381D321F586****"', 'Content-MD5' => '1B2M2Y8AsgTpgAmY7Ph****', 'x-oss-hash-crc64ecma' => '316181249502703*****', 'x-oss-version-id' => 'CAEQNhiBgMDJgZCA0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY0****'],
),
);
$result = ObjectBasic::toPutObject($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals(5, count($result->headers));
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertEquals('"7265F4D211B56873A381D321F586****"', $result->etag);
$this->assertEquals('1B2M2Y8AsgTpgAmY7Ph****', $result->contentMd5);
$this->assertEquals('316181249502703*****', $result->hashCrc64);
$this->assertEquals('CAEQNhiBgMDJgZCA0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY0****', $result->versionId);
$this->assertEquals($body, json_encode($result->callbackResult));
} catch (\Throwable $e) {
$this->assertTrue(false, "should not here");
}
}
public function testFromGetObject()
{
// miss required field
try {
$request = new Models\GetObjectRequest();
$input = ObjectBasic::fromGetObject($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, bucket", (string)$e);
}
try {
$request = new Models\GetObjectRequest('bucket-123');
$input = ObjectBasic::fromGetObject($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, key", (string)$e);
}
$request = new Models\GetObjectRequest('bucket-123', 'key-123');
$input = ObjectBasic::fromGetObject($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertNull($input->getBody());
$request = new Models\GetObjectRequest('bucket-123', 'key-123');
$request->trafficLimit = 102400;
$request->ifMatch = '"D41D8CD98F00B204E9800998ECF8****"';
$request->ifNoneMatch = '"D41D8CD98F00B204E9800998ECF9****"';
$request->ifModifiedSince = 'Fri, 13 Nov 2023 14:47:53 GMT';
$request->ifUnmodifiedSince = 'Fri, 13 Nov 2015 14:47:53 GMT';
$request->rangeHeader = 'bytes 0~9/44';
$request->responseCacheControl = 'gzip';
$request->responseContentDisposition = 'attachment; filename=testing.txt';
$request->responseContentEncoding = 'utf-8';
$request->responseContentLanguage = '中文';
$request->responseContentType = 'text';
$request->responseExpires = 'Fri, 24 Feb 2012 17:00:00 GMT';
$request->versionId = 'CAEQNhiBgM0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY*****';
$request->requestPayer = 'requester';
$input = ObjectBasic::fromGetObject($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertNull($input->getBody());
$this->assertEquals('"D41D8CD98F00B204E9800998ECF8****"', $input->getHeaders()['if-match']);
$this->assertEquals('"D41D8CD98F00B204E9800998ECF9****"', $input->getHeaders()['if-none-match']);
$this->assertEquals('Fri, 13 Nov 2023 14:47:53 GMT', $input->getHeaders()['if-modified-since']);
$this->assertEquals('Fri, 13 Nov 2015 14:47:53 GMT', $input->getHeaders()['if-unmodified-since']);
$this->assertEquals('bytes 0~9/44', $input->getHeaders()['range']);
$this->assertEquals('requester', $input->getHeaders()['x-oss-request-payer']);
$this->assertEquals('102400', $input->getHeaders()['x-oss-traffic-limit']);
$this->assertEquals('gzip', $input->getParameters()['response-cache-control']);
$this->assertEquals('attachment; filename=testing.txt', $input->getParameters()['response-content-disposition']);
$this->assertEquals('utf-8', $input->getParameters()['response-content-encoding']);
$this->assertEquals('中文', $input->getParameters()['response-content-language']);
$this->assertEquals('Fri, 24 Feb 2012 17:00:00 GMT', $input->getParameters()['response-expires']);
$this->assertEquals('CAEQNhiBgM0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY*****', $input->getParameters()['versionId']);
$this->assertEquals([], $input->getOpMetadata());
}
public function testToGetObject()
{
// empty output
try {
$output = new OperationOutput();
$result = ObjectBasic::toGetObject($output);
$this->assertTrue(false, 'should not here');
} catch (\Throwable $e) {
$this->assertStringContainsString('Call to a member function hasHeader() on null', $e->getMessage());
}
$length = 1000;
$body = random_bytes($length);
try {
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'ETag' => '"D41D8CD98F00B204E9800998ECF8****"', 'x-oss-object-type' => 'Normal', 'Last-Modified' => 'Fri, 24 Feb 2012 06:07:48 GMT', 'Content-Type' => 'image/jpg', 'Content-Length' => $length],
Utils::streamFor($body),
new OperationInput('GetObject', 'GET', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'ETag' => '"D41D8CD98F00B204E9800998ECF8****"', 'x-oss-object-type' => 'Normal', 'Last-Modified' => 'Fri, 24 Feb 2012 06:07:48 GMT', 'Content-Type' => 'image/jpg', 'Content-Length' => $length],
$body
),
);
$result = ObjectBasic::toGetObject($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals(6, count($result->headers));
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertEquals('"D41D8CD98F00B204E9800998ECF8****"', $result->etag);
$this->assertEquals(\DateTime::createFromFormat(
'D, d M Y H:i:s \G\M\T',
'Fri, 24 Feb 2012 06:07:48 GMT',
new \DateTimeZone('UTC')
), $result->lastModified);
$this->assertEquals('image/jpg', $result->contentType);
$this->assertEquals($length, $result->contentLength);
$this->assertEquals('Normal', $result->objectType);
$this->assertEquals($body, $result->body->getContents());
} catch (\Throwable $e) {
$this->assertTrue(false, "should not here");
}
$length2 = 800;
$body2 = random_bytes($length2);
try {
$output = new OperationOutput(
'Partial Content',
206,
['x-oss-request-id' => '123', 'ETag' => '"5B3C1A2E05E1B002CC607C****"', 'x-oss-object-type' => 'Normal', 'Last-Modified' => 'Fri, 24 Feb 2012 06:07:48 GMT', 'Content-Type' => 'image/jpg', 'Content-Length' => $length2, 'Accept-Ranges' => 'bytes', 'Content-Range' => 'bytes 100-900/34460'],
Utils::streamFor($body2),
new OperationInput('GetObject', 'GET', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'ETag' => '"5B3C1A2E05E1B002CC607C****"', 'x-oss-object-type' => 'Normal', 'Last-Modified' => 'Fri, 24 Feb 2012 06:07:48 GMT', 'Content-Type' => 'image/jpg', 'Content-Length' => $length2, 'Accept-Ranges' => 'bytes', 'Content-Range' => 'bytes 100-900/34460'],
$body2
),
);
$result = ObjectBasic::toGetObject($output);
$this->assertEquals('Partial Content', $result->status);
$this->assertEquals(206, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals(8, count($result->headers));
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertEquals('"5B3C1A2E05E1B002CC607C****"', $result->etag);
$this->assertEquals(\DateTime::createFromFormat(
'D, d M Y H:i:s \G\M\T',
'Fri, 24 Feb 2012 06:07:48 GMT',
new \DateTimeZone('UTC')
), $result->lastModified);
$this->assertEquals('image/jpg', $result->contentType);
$this->assertEquals($length2, $result->contentLength);
$this->assertEquals('Normal', $result->objectType);
$this->assertEquals('bytes 100-900/34460', $result->contentRange);
$this->assertEquals($body2, $result->body->getContents());
} catch (\Throwable $e) {
$this->assertTrue(false, "should not here");
}
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'ETag' => '"5B3C1A2E05E1B002CC607C****"', 'x-oss-object-type' => 'Normal', 'Last-Modified' => 'Fri, 24 Feb 2012 06:07:48 GMT', 'Content-Type' => 'image/jpg', 'Content-Length' => $length, 'Accept-Ranges' => 'bytes', 'Content-disposition' => 'attachment; filename=testing.txt', 'Cache-control' => 'no-cache', 'X-Oss-Storage-Class' => 'Standard', 'x-oss-server-side-encryption' => 'KMS', 'x-oss-server-side-data-encryption' => 'SM4', 'x-oss-server-side-encryption-key-id' => '12f8711f-90df-4e0d-903d-ab972b0f****', 'x-oss-tagging-count' => '2', 'Content-MD5' => 'si4Nw3Cn9wZ/rPX3XX+j****', 'x-oss-hash-crc64ecma' => '870718044876840****', 'x-oss-meta-name' => 'demo', 'x-oss-meta-email' => 'demo@aliyun.com'],
Utils::streamFor($body),
new OperationInput('GetObject', 'GET', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'ETag' => '"5B3C1A2E05E1B002CC607C****"', 'x-oss-object-type' => 'Normal', 'Last-Modified' => 'Fri, 24 Feb 2012 06:07:48 GMT', 'Content-Type' => 'image/jpg', 'Content-Length' => $length, 'Accept-Ranges' => 'bytes', 'Content-disposition' => 'attachment; filename=testing.txt', 'Cache-control' => 'no-cache', 'X-Oss-Storage-Class' => 'Standard', 'x-oss-server-side-encryption' => 'KMS', 'x-oss-server-side-data-encryption' => 'SM4', 'x-oss-server-side-encryption-key-id' => '12f8711f-90df-4e0d-903d-ab972b0f****', 'x-oss-tagging-count' => '2', 'Content-MD5' => 'si4Nw3Cn9wZ/rPX3XX+j****', 'x-oss-hash-crc64ecma' => '870718044876840****', 'x-oss-meta-name' => 'demo', 'x-oss-meta-email' => 'demo@aliyun.com'],
$body
),
);
$result = ObjectBasic::toGetObject($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals('"5B3C1A2E05E1B002CC607C****"', $result->etag);
$this->assertEquals(\DateTime::createFromFormat(
'D, d M Y H:i:s \G\M\T',
'Fri, 24 Feb 2012 06:07:48 GMT',
new \DateTimeZone('UTC')
), $result->lastModified);
$this->assertEquals('image/jpg', $result->contentType);
$this->assertEquals('no-cache', $result->cacheControl);
$this->assertEquals('attachment; filename=testing.txt', $result->contentDisposition);
$this->assertEquals($length, $result->contentLength);
$this->assertEquals('Normal', $result->objectType);
$this->assertEquals(Models\StorageClassType::STANDARD, $result->storageClass);
$this->assertEquals('KMS', $result->serverSideEncryption);
$this->assertEquals($body, $result->body->getContents());
$this->assertEquals('SM4', $result->serverSideDataEncryption);
$this->assertEquals('12f8711f-90df-4e0d-903d-ab972b0f****', $result->serverSideEncryptionKeyId);
$this->assertEquals(2, $result->taggingCount);
$this->assertEquals('demo', $result->metadata['name']);
$this->assertEquals('demo@aliyun.com', $result->metadata['email']);
$this->assertEquals('si4Nw3Cn9wZ/rPX3XX+j****', $result->contentMd5);
$this->assertEquals('870718044876840****', $result->hashCrc64);
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'ETag' => '"5B3C1A2E05E1B002CC607C****"', 'x-oss-object-type' => 'Normal', 'Last-Modified' => 'Fri, 24 Feb 2012 06:07:48 GMT', 'Content-Type' => 'image/jpg', 'Content-Length' => $length, 'X-Oss-Storage-Class' => 'Standard', 'x-oss-restore' => 'ongoing-request="false", expiry-date="Sun, 16 Apr 2017 08:12:33 GMT"'],
Utils::streamFor($body),
new OperationInput('GetObject', 'GET', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'ETag' => '"5B3C1A2E05E1B002CC607C****"', 'x-oss-object-type' => 'Normal', 'Last-Modified' => 'Fri, 24 Feb 2012 06:07:48 GMT', 'Content-Type' => 'image/jpg', 'Content-Length' => $length, 'X-Oss-Storage-Class' => 'Standard', 'x-oss-restore' => 'ongoing-request="false", expiry-date="Sun, 16 Apr 2017 08:12:33 GMT"'],
$body
),
);
$result = ObjectBasic::toGetObject($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals('"5B3C1A2E05E1B002CC607C****"', $result->etag);
$this->assertEquals(\DateTime::createFromFormat(
'D, d M Y H:i:s \G\M\T',
'Fri, 24 Feb 2012 06:07:48 GMT',
new \DateTimeZone('UTC')
), $result->lastModified);
$this->assertEquals('image/jpg', $result->contentType);
$this->assertEquals($length, $result->contentLength);
$this->assertEquals('Normal', $result->objectType);
$this->assertEquals(Models\StorageClassType::STANDARD, $result->storageClass);
$this->assertEquals($body, $result->body->getContents());
$this->assertEquals('ongoing-request="false", expiry-date="Sun, 16 Apr 2017 08:12:33 GMT"', $result->restore);
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'ETag' => '"5B3C1A2E05E1B002CC607C****"', 'x-oss-object-type' => 'Normal', 'Last-Modified' => 'Fri, 24 Feb 2012 06:07:48 GMT', 'Content-Type' => 'image/jpg', 'Content-Length' => $length, 'X-Oss-Storage-Class' => 'Standard', 'x-oss-version-id' => 'CAEQNhiBgM0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY*****', 'x-oss-delete-marker' => 'true'],
Utils::streamFor($body),
new OperationInput('GetObject', 'GET', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'ETag' => '"5B3C1A2E05E1B002CC607C****"', 'x-oss-object-type' => 'Normal', 'Last-Modified' => 'Fri, 24 Feb 2012 06:07:48 GMT', 'Content-Type' => 'image/jpg', 'Content-Length' => $length, 'X-Oss-Storage-Class' => 'Standard', 'x-oss-version-id' => 'CAEQNhiBgM0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY*****', 'x-oss-delete-marker' => 'true'],
$body
),
);
$result = ObjectBasic::toGetObject($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals('"5B3C1A2E05E1B002CC607C****"', $result->etag);
$this->assertEquals(\DateTime::createFromFormat(
'D, d M Y H:i:s \G\M\T',
'Fri, 24 Feb 2012 06:07:48 GMT',
new \DateTimeZone('UTC')
), $result->lastModified);
$this->assertEquals('image/jpg', $result->contentType);
$this->assertEquals($length, $result->contentLength);
$this->assertEquals('Normal', $result->objectType);
$this->assertEquals(Models\StorageClassType::STANDARD, $result->storageClass);
$this->assertEquals($body, $result->body->getContents());
$this->assertTrue($result->deleteMarker);
$this->assertEquals('CAEQNhiBgM0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY*****', $result->versionId);
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'ETag' => '"5B3C1A2E05E1B002CC607C****"', 'x-oss-object-type' => 'Appendable', 'Last-Modified' => 'Fri, 24 Feb 2012 06:07:48 GMT', 'Content-Type' => 'text', 'Content-Length' => $length, 'X-Oss-Storage-Class' => 'Standard', 'x-oss-next-append-position' => '1001'],
Utils::streamFor($body),
new OperationInput('GetObject', 'GET', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'ETag' => '"5B3C1A2E05E1B002CC607C****"', 'x-oss-object-type' => 'Appendable', 'Last-Modified' => 'Fri, 24 Feb 2012 06:07:48 GMT', 'Content-Type' => 'text', 'Content-Length' => $length, 'X-Oss-Storage-Class' => 'Standard', 'x-oss-next-append-position' => '1001'],
$body
),
);
$result = ObjectBasic::toGetObject($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals('"5B3C1A2E05E1B002CC607C****"', $result->etag);
$this->assertEquals(\DateTime::createFromFormat(
'D, d M Y H:i:s \G\M\T',
'Fri, 24 Feb 2012 06:07:48 GMT',
new \DateTimeZone('UTC')
), $result->lastModified);
$this->assertEquals('text', $result->contentType);
$this->assertEquals($length, $result->contentLength);
$this->assertEquals('Appendable', $result->objectType);
$this->assertEquals(Models\StorageClassType::STANDARD, $result->storageClass);
$this->assertEquals($body, $result->body->getContents());
$this->assertEquals(1001, $result->nextAppendPosition);
}
public function testFromCopyObject()
{
// miss required field
try {
$request = new Models\CopyObjectRequest();
$input = ObjectBasic::fromCopyObject($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, bucket", (string)$e);
}
try {
$request = new Models\CopyObjectRequest('bucket-123');
$input = ObjectBasic::fromCopyObject($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, key", (string)$e);
}
try {
$request = new Models\CopyObjectRequest('bucket-123', 'key-123');
$input = ObjectBasic::fromCopyObject($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, sourceKey", (string)$e);
}
$request = new Models\CopyObjectRequest('bucket-123', 'key-123');
$request->sourceKey = 'src-key';
$request->trafficLimit = 245760;
$request->requestPayer = 'requester';
$input = ObjectBasic::fromCopyObject($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertEquals('/bucket-123/src-key', $input->getHeaders()['x-oss-copy-source']);
$this->assertEquals(245760, $input->getHeaders()['x-oss-traffic-limit']);
$this->assertEquals('requester', $input->getHeaders()['x-oss-request-payer']);
$request = new Models\CopyObjectRequest('bucket-123', 'key-123');
$request->sourceBucket = 'src-bucket';
$request->sourceKey = 'src-key';
$request->trafficLimit = 102400;
$request->ifMatch = '"D41D8CD98F00B204E9800998ECF8****"';
$request->ifNoneMatch = '"D41D8CD98F00B204E9800998ECF9****"';
$request->ifModifiedSince = 'Fri, 13 Nov 2023 14:47:53 GMT';
$request->ifUnmodifiedSince = 'Fri, 13 Nov 2015 14:47:53 GMT';
$request->sourceVersionId = 'CAEQNhiBgM0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY*****';
$input = ObjectBasic::fromCopyObject($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertNull($input->getBody());
$this->assertEquals('"D41D8CD98F00B204E9800998ECF8****"', $input->getHeaders()['x-oss-copy-source-if-match']);
$this->assertEquals('"D41D8CD98F00B204E9800998ECF9****"', $input->getHeaders()['x-oss-copy-source-if-none-match']);
$this->assertEquals('Fri, 13 Nov 2023 14:47:53 GMT', $input->getHeaders()['x-oss-copy-source-if-modified-since']);
$this->assertEquals('Fri, 13 Nov 2015 14:47:53 GMT', $input->getHeaders()['x-oss-copy-source-if-unmodified-since']);
$this->assertEquals('/src-bucket/src-key?versionId=CAEQNhiBgM0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY*****', $input->getHeaders()['x-oss-copy-source']);
$this->assertEquals([], $input->getOpMetadata());
$request = new Models\CopyObjectRequest('bucket-123', 'key-123');
$request->sourceKey = 'src-key';
$request->trafficLimit = 102400;
$request->ifMatch = '"D41D8CD98F00B204E9800998ECF8****"';
$request->ifNoneMatch = '"D41D8CD98F00B204E9800998ECF9****"';
$request->ifModifiedSince = 'Fri, 13 Nov 2023 14:47:53 GMT';
$request->ifUnmodifiedSince = 'Fri, 13 Nov 2015 14:47:53 GMT';
$request->sourceVersionId = 'CAEQNhiBgM0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY*****';
$request->forbidOverwrite = true;
$request->serverSideEncryption = 'KMS';
$request->serverSideDataEncryption = 'SM4';
$request->serverSideEncryptionKeyId = '9468da86-3509-4f8d-a61e-6eab1eac****';
$request->metadataDirective = 'REPLACE';
$request->taggingDirective = 'Replace';
$request->acl = Models\ObjectACLType::PRIVATE;
$request->storageClass = Models\StorageClassType::STANDARD;
$request->metadata = array(
"name" => "walker",
"email" => "demo@aliyun.com",
);
$request->tagging = 'TagA=B&TagC=D';
$input = ObjectBasic::fromCopyObject($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertNull($input->getBody());
$this->assertEquals('"D41D8CD98F00B204E9800998ECF8****"', $input->getHeaders()['x-oss-copy-source-if-match']);
$this->assertEquals('"D41D8CD98F00B204E9800998ECF9****"', $input->getHeaders()['x-oss-copy-source-if-none-match']);
$this->assertEquals('Fri, 13 Nov 2023 14:47:53 GMT', $input->getHeaders()['x-oss-copy-source-if-modified-since']);
$this->assertEquals('Fri, 13 Nov 2015 14:47:53 GMT', $input->getHeaders()['x-oss-copy-source-if-unmodified-since']);
$this->assertEquals('/bucket-123/src-key?versionId=CAEQNhiBgM0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY*****', $input->getHeaders()['x-oss-copy-source']);
$this->assertEquals('walker', $input->getHeaders()['x-oss-meta-name']);
$this->assertEquals('demo@aliyun.com', $input->getHeaders()['x-oss-meta-email']);
$this->assertEquals('KMS', $input->getHeaders()['x-oss-server-side-encryption']);
$this->assertEquals('SM4', $input->getHeaders()['x-oss-server-side-data-encryption']);
$this->assertEquals('9468da86-3509-4f8d-a61e-6eab1eac****', $input->getHeaders()['x-oss-server-side-encryption-key-id']);
$this->assertEquals(Models\StorageClassType::STANDARD, $input->getHeaders()['x-oss-storage-class']);
$this->assertEquals(Models\ObjectACLType::PRIVATE, $input->getHeaders()['x-oss-object-acl']);
$this->assertEquals('true', $input->getHeaders()['x-oss-forbid-overwrite']);
$this->assertEquals('TagA=B&TagC=D', $input->getHeaders()['x-oss-tagging']);
$this->assertEquals('Replace', $input->getHeaders()['x-oss-tagging-directive']);
$this->assertEquals('REPLACE', $input->getHeaders()['x-oss-metadata-directive']);
$this->assertEquals([], $input->getOpMetadata());
$request = new Models\CopyObjectRequest('bucket-123', 'key-123', null, 'src-key', 'CAEQNhiBgM0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY*****', '"D41D8CD98F00B204E9800998ECF8****"', '"D41D8CD98F00B204E9800998ECF9****"', 'Fri, 13 Nov 2023 14:47:53 GMT', 'Fri, 13 Nov 2015 14:47:53 GMT', null, Models\StorageClassType::STANDARD, array(
"name" => "walker",
"email" => "demo@aliyun.com",
), null, null, null, null, null, null, null, 'REPLACE', 'KMS', 'SM4', '9468da86-3509-4f8d-a61e-6eab1eac****', 'TagA=B&TagC=D', 'Replace', true, 102400, null, null, null, Models\ObjectACLType::PRIVATE);
$input = ObjectBasic::fromCopyObject($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertNull($input->getBody());
$this->assertEquals('"D41D8CD98F00B204E9800998ECF8****"', $input->getHeaders()['x-oss-copy-source-if-match']);
$this->assertEquals('"D41D8CD98F00B204E9800998ECF9****"', $input->getHeaders()['x-oss-copy-source-if-none-match']);
$this->assertEquals('Fri, 13 Nov 2023 14:47:53 GMT', $input->getHeaders()['x-oss-copy-source-if-modified-since']);
$this->assertEquals('Fri, 13 Nov 2015 14:47:53 GMT', $input->getHeaders()['x-oss-copy-source-if-unmodified-since']);
$this->assertEquals('/bucket-123/src-key?versionId=CAEQNhiBgM0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY*****', $input->getHeaders()['x-oss-copy-source']);
$this->assertEquals('walker', $input->getHeaders()['x-oss-meta-name']);
$this->assertEquals('demo@aliyun.com', $input->getHeaders()['x-oss-meta-email']);
$this->assertEquals('KMS', $input->getHeaders()['x-oss-server-side-encryption']);
$this->assertEquals('SM4', $input->getHeaders()['x-oss-server-side-data-encryption']);
$this->assertEquals('9468da86-3509-4f8d-a61e-6eab1eac****', $input->getHeaders()['x-oss-server-side-encryption-key-id']);
$this->assertEquals(Models\StorageClassType::STANDARD, $input->getHeaders()['x-oss-storage-class']);
$this->assertEquals(Models\ObjectACLType::PRIVATE, $input->getHeaders()['x-oss-object-acl']);
$this->assertEquals('true', $input->getHeaders()['x-oss-forbid-overwrite']);
$this->assertEquals('TagA=B&TagC=D', $input->getHeaders()['x-oss-tagging']);
$this->assertEquals('Replace', $input->getHeaders()['x-oss-tagging-directive']);
$this->assertEquals('REPLACE', $input->getHeaders()['x-oss-metadata-directive']);
$this->assertEquals([], $input->getOpMetadata());
$request = new Models\CopyObjectRequest('bucket-123', 'key-123', null, 'src-key', 'CAEQNhiBgM0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY*****', '"D41D8CD98F00B204E9800998ECF8****"', '"D41D8CD98F00B204E9800998ECF9****"', 'Fri, 13 Nov 2023 14:47:53 GMT', 'Fri, 13 Nov 2015 14:47:53 GMT', Models\ObjectACLType::PUBLIC_READ, Models\StorageClassType::STANDARD, array(
"name" => "walker",
"email" => "demo@aliyun.com",
), null, null, null, null, null, null, null, 'REPLACE', 'KMS', 'SM4', '9468da86-3509-4f8d-a61e-6eab1eac****', 'TagA=B&TagC=D', 'Replace', true, 102400, null, null, null, Models\ObjectACLType::PRIVATE);
$input = ObjectBasic::fromCopyObject($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertNull($input->getBody());
$this->assertEquals('"D41D8CD98F00B204E9800998ECF8****"', $input->getHeaders()['x-oss-copy-source-if-match']);
$this->assertEquals('"D41D8CD98F00B204E9800998ECF9****"', $input->getHeaders()['x-oss-copy-source-if-none-match']);
$this->assertEquals('Fri, 13 Nov 2023 14:47:53 GMT', $input->getHeaders()['x-oss-copy-source-if-modified-since']);
$this->assertEquals('Fri, 13 Nov 2015 14:47:53 GMT', $input->getHeaders()['x-oss-copy-source-if-unmodified-since']);
$this->assertEquals('/bucket-123/src-key?versionId=CAEQNhiBgM0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY*****', $input->getHeaders()['x-oss-copy-source']);
$this->assertEquals('walker', $input->getHeaders()['x-oss-meta-name']);
$this->assertEquals('demo@aliyun.com', $input->getHeaders()['x-oss-meta-email']);
$this->assertEquals('KMS', $input->getHeaders()['x-oss-server-side-encryption']);
$this->assertEquals('SM4', $input->getHeaders()['x-oss-server-side-data-encryption']);
$this->assertEquals('9468da86-3509-4f8d-a61e-6eab1eac****', $input->getHeaders()['x-oss-server-side-encryption-key-id']);
$this->assertEquals(Models\StorageClassType::STANDARD, $input->getHeaders()['x-oss-storage-class']);
$this->assertEquals(Models\ObjectACLType::PRIVATE, $input->getHeaders()['x-oss-object-acl']);
$this->assertEquals('true', $input->getHeaders()['x-oss-forbid-overwrite']);
$this->assertEquals('TagA=B&TagC=D', $input->getHeaders()['x-oss-tagging']);
$this->assertEquals('Replace', $input->getHeaders()['x-oss-tagging-directive']);
$this->assertEquals('REPLACE', $input->getHeaders()['x-oss-metadata-directive']);
$this->assertEquals([], $input->getOpMetadata());
}
public function testToCopyObject()
{
// empty output
try {
$output = new OperationOutput();
$result = ObjectBasic::toCopyObject($output);
$this->assertTrue(false, 'should not here');
} catch (\Throwable $e) {
$this->assertStringContainsString('Call to a member function hasHeader() on null', $e->getMessage());
}
$body = '<?xml version="1.0" encoding="UTF-8"?>
<CopyObjectResult>
<ETag>"F2064A169EE92E9775EE5324D0B1****"</ETag>
<LastModified>2018-02-24T09:41:56.000Z</LastModified>
</CopyObjectResult>';
$length = strlen($body);
try {
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'ETag' => '"F2064A169EE92E9775EE5324D0B1****"', 'Content-Type' => 'image/jpg', 'Content-Length' => $length, 'x-oss-hash-crc64ecma' => '1275300285919610****'],
Utils::streamFor($body),
new OperationInput('CopyObject', 'PUT', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'ETag' => '"F2064A169EE92E9775EE5324D0B1****"', 'Content-Type' => 'image/jpg', 'Content-Length' => $length, 'x-oss-hash-crc64ecma' => '1275300285919610****'],
$body
),
);
$result = ObjectBasic::toCopyObject($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertEquals('"F2064A169EE92E9775EE5324D0B1****"', $result->etag);
$this->assertEquals(\DateTime::createFromFormat(
'Y-m-d\TH:i:s.000\Z',
'2018-02-24T09:41:56.000Z',
new \DateTimeZone('UTC')
), $result->lastModified);
$this->assertEquals('1275300285919610****', $result->hashCrc64);
} catch (\Throwable $e) {
$this->assertTrue(false, "should not here");
}
try {
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'ETag' => '"F2064A169EE92E9775EE5324D0B1****"', 'Content-Type' => 'text', 'Content-Length' => $length, 'x-oss-hash-crc64ecma' => '1275300285919610****', "x-oss-server-side-encryption" => 'KMS', 'x-oss-server-side-data-encryption' => 'SM4', 'x-oss-server-side-encryption-key-id' => '12f8711f-90df-4e0d-903d-ab972b0f****', 'x-oss-copy-source-version-id' => 'CAEQHxiBgICDvseg3hgiIGZmOGNjNWJiZDUzNjQxNDM4MWM2NDc1YjhkYTk3****', 'x-oss-version-id' => 'CAEQHxiBgMD4qOWz3hgiIDUyMWIzNTBjMWM4NjQ5MDJiNTM4YzEwZGQxM2Rk****'],
Utils::streamFor($body),
new OperationInput('CopyObject', 'PUT', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'ETag' => '"F2064A169EE92E9775EE5324D0B1****"', 'Content-Type' => 'text', 'Content-Length' => $length, 'x-oss-hash-crc64ecma' => '1275300285919610****', "x-oss-server-side-encryption" => 'KMS', 'x-oss-server-side-data-encryption' => 'SM4', 'x-oss-server-side-encryption-key-id' => '12f8711f-90df-4e0d-903d-ab972b0f****', 'x-oss-copy-source-version-id' => 'CAEQHxiBgICDvseg3hgiIGZmOGNjNWJiZDUzNjQxNDM4MWM2NDc1YjhkYTk3****', 'x-oss-version-id' => 'CAEQHxiBgMD4qOWz3hgiIDUyMWIzNTBjMWM4NjQ5MDJiNTM4YzEwZGQxM2Rk****'],
$body
),
);
$result = ObjectBasic::toCopyObject($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertEquals('"F2064A169EE92E9775EE5324D0B1****"', $result->etag);
$this->assertEquals(\DateTime::createFromFormat(
'Y-m-d\TH:i:s.000\Z',
'2018-02-24T09:41:56.000Z',
new \DateTimeZone('UTC')
), $result->lastModified);
$this->assertEquals('1275300285919610****', $result->hashCrc64);
$this->assertEquals('KMS', $result->serverSideEncryption);
$this->assertEquals('SM4', $result->serverSideDataEncryption);
$this->assertEquals('12f8711f-90df-4e0d-903d-ab972b0f****', $result->serverSideEncryptionKeyId);
$this->assertEquals('CAEQHxiBgMD4qOWz3hgiIDUyMWIzNTBjMWM4NjQ5MDJiNTM4YzEwZGQxM2Rk****', $result->versionId);
$this->assertEquals('CAEQHxiBgICDvseg3hgiIGZmOGNjNWJiZDUzNjQxNDM4MWM2NDc1YjhkYTk3****', $result->sourceVersionId);
} catch (\Throwable $e) {
$this->assertTrue(false, "should not here");
}
}
public function testFromAppendObject()
{
// miss required field
try {
$request = new Models\AppendObjectRequest();
$input = ObjectBasic::fromAppendObject($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, bucket", (string)$e);
}
try {
$request = new Models\AppendObjectRequest('bucket-123');
$input = ObjectBasic::fromAppendObject($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, key", (string)$e);
}
try {
$request = new Models\AppendObjectRequest('bucket-123', 'key-123');
$input = ObjectBasic::fromAppendObject($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, position", (string)$e);
}
$body = 'hi oss';
$request = new Models\AppendObjectRequest('bucket-123', 'key-123', 0);
$request->trafficLimit = 245760;
$request->requestPayer = 'requester';
$request->body = Utils::streamFor($body);
$input = ObjectBasic::fromAppendObject($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertEquals($body, $input->getBody()->getContents());
$this->assertEquals('0', $input->getParameters()['position']);
$this->assertEquals(245760, $input->getHeaders()['x-oss-traffic-limit']);
$this->assertEquals('requester', $input->getHeaders()['x-oss-request-payer']);
$request = new Models\AppendObjectRequest('bucket-123', 'key-123', 0);
$request->cacheControl = 'no-cache';
$request->contentDisposition = 'attachment';
$request->contentEncoding = 'gzip';
$request->contentMd5 = 'eB5eJF1ptWaXm4bijSPyxw==';
$request->expires = '2022-10-12T00:00:00.000Z';
$request->forbidOverwrite = true;
$request->serverSideEncryption = 'AES256';
$request->acl = Models\ObjectACLType::PRIVATE;
$request->storageClass = Models\StorageClassType::STANDARD;
$request->metadata = array(
"location" => "demo",
"user" => "walker",
);
$request->tagging = 'TagA=A&TagB=B';
$input = ObjectBasic::fromAppendObject($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertNull($input->getBody());
$this->assertEquals('no-cache', $input->getHeaders()['cache-control']);
$this->assertEquals('attachment', $input->getHeaders()['content-disposition']);
$this->assertEquals('walker', $input->getHeaders()['x-oss-meta-user']);
$this->assertEquals('demo', $input->getHeaders()['x-oss-meta-location']);
$this->assertEquals('AES256', $input->getHeaders()['x-oss-server-side-encryption']);
$this->assertEquals(Models\StorageClassType::STANDARD, $input->getHeaders()['x-oss-storage-class']);
$this->assertEquals(Models\ObjectACLType::PRIVATE, $input->getHeaders()['x-oss-object-acl']);
$this->assertEquals('true', $input->getHeaders()['x-oss-forbid-overwrite']);
$this->assertEquals('gzip', $input->getHeaders()['content-encoding']);
$this->assertEquals('eB5eJF1ptWaXm4bijSPyxw==', $input->getHeaders()['content-md5']);
$this->assertEquals('2022-10-12T00:00:00.000Z', $input->getHeaders()['expires']);
$this->assertEquals('TagA=A&TagB=B', $input->getHeaders()['x-oss-tagging']);
$this->assertEmpty($input->getParameters()['append']);
$this->assertEquals('0', $input->getParameters()['position']);
$request = new Models\AppendObjectRequest('bucket-123', 'key-123', 0, null, Models\StorageClassType::STANDARD, array(
"location" => "demo",
"user" => "walker",
), 'no-cache', 'attachment', 'gzip', null, 'eB5eJF1ptWaXm4bijSPyxw==', null, '2022-10-12T00:00:00.000Z', 'AES256', null, null, 'TagA=A&TagB=B', true, null, null, null, null, null, Models\ObjectACLType::PRIVATE);
$input = ObjectBasic::fromAppendObject($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertNull($input->getBody());
$this->assertEquals('no-cache', $input->getHeaders()['cache-control']);
$this->assertEquals('attachment', $input->getHeaders()['content-disposition']);
$this->assertEquals('walker', $input->getHeaders()['x-oss-meta-user']);
$this->assertEquals('demo', $input->getHeaders()['x-oss-meta-location']);
$this->assertEquals('AES256', $input->getHeaders()['x-oss-server-side-encryption']);
$this->assertEquals(Models\StorageClassType::STANDARD, $input->getHeaders()['x-oss-storage-class']);
$this->assertEquals(Models\ObjectACLType::PRIVATE, $input->getHeaders()['x-oss-object-acl']);
$this->assertEquals('true', $input->getHeaders()['x-oss-forbid-overwrite']);
$this->assertEquals('gzip', $input->getHeaders()['content-encoding']);
$this->assertEquals('eB5eJF1ptWaXm4bijSPyxw==', $input->getHeaders()['content-md5']);
$this->assertEquals('2022-10-12T00:00:00.000Z', $input->getHeaders()['expires']);
$this->assertEquals('TagA=A&TagB=B', $input->getHeaders()['x-oss-tagging']);
$this->assertEmpty($input->getParameters()['append']);
$this->assertEquals('0', $input->getParameters()['position']);
$request = new Models\AppendObjectRequest('bucket-123', 'key-123', 0, Models\ObjectACLType::PUBLIC_READ, Models\StorageClassType::STANDARD, array(
"location" => "demo",
"user" => "walker",
), 'no-cache', 'attachment', 'gzip', null, 'eB5eJF1ptWaXm4bijSPyxw==', null, '2022-10-12T00:00:00.000Z', 'AES256', null, null, 'TagA=A&TagB=B', true, null, null, null, null, null, Models\ObjectACLType::PRIVATE);
$input = ObjectBasic::fromAppendObject($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertNull($input->getBody());
$this->assertEquals('no-cache', $input->getHeaders()['cache-control']);
$this->assertEquals('attachment', $input->getHeaders()['content-disposition']);
$this->assertEquals('walker', $input->getHeaders()['x-oss-meta-user']);
$this->assertEquals('demo', $input->getHeaders()['x-oss-meta-location']);
$this->assertEquals('AES256', $input->getHeaders()['x-oss-server-side-encryption']);
$this->assertEquals(Models\StorageClassType::STANDARD, $input->getHeaders()['x-oss-storage-class']);
$this->assertEquals(Models\ObjectACLType::PRIVATE, $input->getHeaders()['x-oss-object-acl']);
$this->assertEquals('true', $input->getHeaders()['x-oss-forbid-overwrite']);
$this->assertEquals('gzip', $input->getHeaders()['content-encoding']);
$this->assertEquals('eB5eJF1ptWaXm4bijSPyxw==', $input->getHeaders()['content-md5']);
$this->assertEquals('2022-10-12T00:00:00.000Z', $input->getHeaders()['expires']);
$this->assertEquals('TagA=A&TagB=B', $input->getHeaders()['x-oss-tagging']);
$this->assertEmpty($input->getParameters()['append']);
$this->assertEquals('0', $input->getParameters()['position']);
$request = new Models\AppendObjectRequest('bucket-123', 'key-123', 0);
$request->cacheControl = 'no-cache';
$request->contentDisposition = 'attachment';
$request->contentEncoding = 'gzip';
$request->contentMd5 = 'eB5eJF1ptWaXm4bijSPyxw==';
$request->expires = '2022-10-12T00:00:00.000Z';
$request->forbidOverwrite = true;
$request->serverSideEncryption = 'KMS';
$request->serverSideDataEncryption = 'SM4';
$request->serverSideEncryptionKeyId = '9468da86-3509-4f8d-a61e-6eab1eac****';
$request->body = Utils::streamFor($body);
$input = ObjectBasic::fromAppendObject($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertEquals($input->getBody()->getContents(), $body);
$this->assertEquals('no-cache', $input->getHeaders()['cache-control']);
$this->assertEquals('attachment', $input->getHeaders()['content-disposition']);
$this->assertEquals('KMS', $input->getHeaders()['x-oss-server-side-encryption']);
$this->assertEquals('SM4', $input->getHeaders()['x-oss-server-side-data-encryption']);
$this->assertEquals('9468da86-3509-4f8d-a61e-6eab1eac****', $input->getHeaders()['x-oss-server-side-encryption-key-id']);
$this->assertEmpty($input->getParameters()['append']);
$this->assertEquals('0', $input->getParameters()['position']);
}
public function testToAppendObject()
{
// empty output
try {
$output = new OperationOutput();
$result = ObjectBasic::toAppendObject($output);
$this->assertTrue(false, 'should not here');
} catch (\Throwable $e) {
$this->assertStringContainsString('Call to a member function hasHeader() on null', $e->getMessage());
}
try {
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'ETag' => '"F2064A169EE92E9775EE5324D0B1****"', 'x-oss-next-append-position' => '0', 'x-oss-hash-crc64ecma' => '1275300285919610****'],
null,
new OperationInput('AppendObject', 'POST', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'ETag' => '"F2064A169EE92E9775EE5324D0B1****"', 'x-oss-next-append-position' => '0', 'x-oss-hash-crc64ecma' => '1275300285919610****'],
),
);
$result = ObjectBasic::toAppendObject($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertEquals('"F2064A169EE92E9775EE5324D0B1****"', $result->etag);
$this->assertEquals('1275300285919610****', $result->hashCrc64);
$this->assertEquals(0, $result->nextPosition);
} catch (\Throwable $e) {
$this->assertTrue(false, "should not here");
}
try {
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'ETag' => '"F2064A169EE92E9775EE5324D0B1****"', 'Content-Type' => 'text', 'x-oss-hash-crc64ecma' => '1275300285919610****', "x-oss-server-side-encryption" => 'KMS', 'x-oss-server-side-data-encryption' => 'SM4', 'x-oss-server-side-encryption-key-id' => '12f8711f-90df-4e0d-903d-ab972b0f****', 'x-oss-version-id' => 'CAEQHxiBgMD4qOWz3hgiIDUyMWIzNTBjMWM4NjQ5MDJiNTM4YzEwZGQxM2Rk****', 'x-oss-next-append-position' => '1717',],
null,
new OperationInput('AppendObject', 'POST', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'ETag' => '"F2064A169EE92E9775EE5324D0B1****"', 'Content-Type' => 'text', 'x-oss-hash-crc64ecma' => '1275300285919610****', "x-oss-server-side-encryption" => 'KMS', 'x-oss-server-side-data-encryption' => 'SM4', 'x-oss-server-side-encryption-key-id' => '12f8711f-90df-4e0d-903d-ab972b0f****', 'x-oss-version-id' => 'CAEQHxiBgMD4qOWz3hgiIDUyMWIzNTBjMWM4NjQ5MDJiNTM4YzEwZGQxM2Rk****', 'x-oss-next-append-position' => '1717'],
),
);
$result = ObjectBasic::toAppendObject($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertEquals('"F2064A169EE92E9775EE5324D0B1****"', $result->etag);
$this->assertEquals('1275300285919610****', $result->hashCrc64);
$this->assertEquals('KMS', $result->serverSideEncryption);
$this->assertEquals('SM4', $result->serverSideDataEncryption);
$this->assertEquals('12f8711f-90df-4e0d-903d-ab972b0f****', $result->serverSideEncryptionKeyId);
$this->assertEquals('CAEQHxiBgMD4qOWz3hgiIDUyMWIzNTBjMWM4NjQ5MDJiNTM4YzEwZGQxM2Rk****', $result->versionId);
$this->assertEquals(1717, $result->nextPosition);
} catch (\Throwable $e) {
$this->assertTrue(false, "should not here");
}
}
public function testFromDeleteObject()
{
// miss required field
try {
$request = new Models\DeleteObjectRequest();
$input = ObjectBasic::fromDeleteObject($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, bucket", (string)$e);
}
try {
$request = new Models\DeleteObjectRequest('bucket-123');
$input = ObjectBasic::fromDeleteObject($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, key", (string)$e);
}
$request = new Models\DeleteObjectRequest('bucket-123', 'key-123');
$input = ObjectBasic::fromDeleteObject($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$request = new Models\DeleteObjectRequest('bucket-123', 'key-123');
$request->requestPayer = 'requester';
$request->versionId = 'CAEQNhiBgM0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY****';
$input = ObjectBasic::fromDeleteObject($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertEquals('CAEQNhiBgM0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY****', $input->getParameters()['versionId']);
$this->assertEquals('requester', $input->getHeaders()['x-oss-request-payer']);
}
public function testToDeleteObject()
{
// empty output
try {
$output = new OperationOutput();
$result = ObjectBasic::toDeleteObject($output);
$this->assertTrue(false, 'should not here');
} catch (\Throwable $e) {
$this->assertStringContainsString('Call to a member function hasHeader() on null', $e->getMessage());
}
try {
$output = new OperationOutput(
'No Content',
204,
['x-oss-request-id' => '123',],
null,
new OperationInput('DeleteObject', 'DELETE', []),
null,
new \GuzzleHttp\Psr7\Response(
204,
['x-oss-request-id' => '123'],
),
);
$result = ObjectBasic::toDeleteObject($output);
$this->assertEquals('No Content', $result->status);
$this->assertEquals(204, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals('123', $result->headers['x-oss-request-id']);
} catch (\Throwable $e) {
$this->assertTrue(false, "should not here");
}
try {
$output = new OperationOutput(
'No Content',
204,
['x-oss-request-id' => '123', 'x-oss-version-id' => 'CAEQHxiBgMD4qOWz3hgiIDUyMWIzNTBjMWM4NjQ5MDJiNTM4YzEwZGQxM2Rk****', 'x-oss-delete-marker' => 'true'],
null,
new OperationInput('DeleteObject', 'POST', []),
null,
new \GuzzleHttp\Psr7\Response(
204,
['x-oss-request-id' => '123', 'x-oss-version-id' => 'CAEQHxiBgMD4qOWz3hgiIDUyMWIzNTBjMWM4NjQ5MDJiNTM4YzEwZGQxM2Rk****', 'x-oss-delete-marker' => 'true'],
),
);
$result = ObjectBasic::toDeleteObject($output);
$this->assertEquals('No Content', $result->status);
$this->assertEquals(204, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertTrue($result->deleteMarker);
$this->assertEquals('CAEQHxiBgMD4qOWz3hgiIDUyMWIzNTBjMWM4NjQ5MDJiNTM4YzEwZGQxM2Rk****', $result->versionId);
} catch (\Throwable $e) {
$this->assertTrue(false, "should not here");
}
}
public function testFromHeadObject()
{
// miss required field
try {
$request = new Models\HeadObjectRequest();
$input = ObjectBasic::fromHeadObject($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, bucket", (string)$e);
}
try {
$request = new Models\HeadObjectRequest('bucket-123');
$input = ObjectBasic::fromHeadObject($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, key", (string)$e);
}
$request = new Models\HeadObjectRequest('bucket-123', 'key-123');
$input = ObjectBasic::fromHeadObject($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$request = new Models\HeadObjectRequest('bucket-123', 'key-123');
$request->requestPayer = 'requester';
$request->versionId = 'CAEQNhiBgM0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY****';
$input = ObjectBasic::fromHeadObject($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertEquals('CAEQNhiBgM0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY****', $input->getParameters()['versionId']);
$this->assertEquals('requester', $input->getHeaders()['x-oss-request-payer']);
}
public function testToHeadObject()
{
// empty output
try {
$output = new OperationOutput();
$result = ObjectBasic::toHeadObject($output);
$this->assertTrue(false, 'should not here');
} catch (\Throwable $e) {
$this->assertStringContainsString('Call to a member function hasHeader() on null', $e->getMessage());
}
try {
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'x-oss-object-type' => 'Normal', 'x-oss-storage-class' => 'Archive', 'Last-Modified' => 'Fri, 24 Feb 2018 09:41:56 GMT', 'Content-Length' => '344606', 'Content-Type' => 'image/jpg', 'ETag' => '"fba9dede5f27731c9771645a3986****"'],
null,
new OperationInput('HeadObject', 'HEAD', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'x-oss-object-type' => 'Normal', 'x-oss-storage-class' => 'Archive', 'Last-Modified' => 'Fri, 24 Feb 2018 09:41:56 GMT', 'Content-Length' => '344606', 'Content-Type' => 'image/jpg', 'ETag' => '"fba9dede5f27731c9771645a3986****"'],
),
);
$result = ObjectBasic::toHeadObject($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertEquals('"fba9dede5f27731c9771645a3986****"', $result->etag);
$this->assertEquals(\DateTime::createFromFormat(
'D, d M Y H:i:s \G\M\T',
'Fri, 24 Feb 2018 09:41:56 GMT',
new \DateTimeZone('UTC')
), $result->lastModified);
$this->assertEquals(344606, $result->contentLength);
$this->assertEquals('Archive', $result->storageClass);
$this->assertEquals('Normal', $result->objectType);
$this->assertEquals('image/jpg', $result->contentType);
} catch (\Throwable $e) {
$this->assertTrue(false, "should not here");
}
try {
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'x-oss-object-type' => 'Normal', 'x-oss-storage-class' => 'ColdArchive', 'Last-Modified' => 'Fri, 24 Feb 2018 09:41:56 GMT', 'Content-Length' => '344606', 'Content-Type' => 'image/jpg', 'ETag' => '"fba9dede5f27731c9771645a3986****"', 'x-oss-transition-time' => 'Thu, 31 Oct 2024 00:24:17 GMT', 'x-oss-restore' => 'ongoing-request="false", expiry-date="Fri, 08 Nov 2024 08:15:52 GMT"', 'x-oss-version-Id' => 'CAEQNRiBgICb8o6D0BYiIDNlNzk5NGE2M2Y3ZjRhZTViYTAxZGE0ZTEyMWYy****'],
null,
new OperationInput('HeadObject', 'HEAD', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'x-oss-object-type' => 'Normal', 'x-oss-storage-class' => 'ColdArchive', 'Last-Modified' => 'Fri, 24 Feb 2018 09:41:56 GMT', 'Content-Length' => '344606', 'Content-Type' => 'image/jpg', 'ETag' => '"fba9dede5f27731c9771645a3986****"', 'x-oss-transition-time' => 'Thu, 31 Oct 2024 00:24:17 GMT', 'x-oss-restore' => 'ongoing-request="false", expiry-date="Fri, 08 Nov 2024 08:15:52 GMT"', 'x-oss-version-Id' => 'CAEQNRiBgICb8o6D0BYiIDNlNzk5NGE2M2Y3ZjRhZTViYTAxZGE0ZTEyMWYy****'],
),
);
$result = ObjectBasic::toHeadObject($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertEquals('"fba9dede5f27731c9771645a3986****"', $result->etag);
$this->assertEquals(\DateTime::createFromFormat(
'D, d M Y H:i:s \G\M\T',
'Fri, 24 Feb 2018 09:41:56 GMT',
new \DateTimeZone('UTC')
), $result->lastModified);
$this->assertEquals(344606, $result->contentLength);
$this->assertEquals('ColdArchive', $result->storageClass);
$this->assertEquals('Normal', $result->objectType);
$this->assertEquals('image/jpg', $result->contentType);
$this->assertEquals(\DateTime::createFromFormat(
'D, d M Y H:i:s \G\M\T',
'Thu, 31 Oct 2024 00:24:17 GMT',
new \DateTimeZone('UTC')
), $result->transitionTime);
$this->assertEquals('ongoing-request="false", expiry-date="Fri, 08 Nov 2024 08:15:52 GMT"', $result->restore);
$this->assertEquals('CAEQNRiBgICb8o6D0BYiIDNlNzk5NGE2M2Y3ZjRhZTViYTAxZGE0ZTEyMWYy****', $result->versionId);
} catch (\Throwable $e) {
$this->assertTrue(false, "should not here");
}
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'ETag' => '"5B3C1A2E05E1B002CC607C****"', 'x-oss-object-type' => 'Normal', 'Last-Modified' => 'Fri, 24 Feb 2012 06:07:48 GMT', 'Content-Type' => 'image/jpg', 'Content-Length' => '20', 'Accept-Ranges' => 'bytes', 'Content-disposition' => 'attachment; filename=testing.txt', 'Cache-control' => 'no-cache', 'X-Oss-Storage-Class' => 'Standard', 'x-oss-server-side-encryption' => 'KMS', 'x-oss-server-side-data-encryption' => 'SM4', 'x-oss-server-side-encryption-key-id' => '12f8711f-90df-4e0d-903d-ab972b0f****', 'x-oss-tagging-count' => '2', 'Content-MD5' => 'si4Nw3Cn9wZ/rPX3XX+j****', 'x-oss-hash-crc64ecma' => '870718044876840****', 'x-oss-meta-name' => 'demo', 'x-oss-meta-email' => 'demo@aliyun.com'],
Utils::streamFor(),
new OperationInput('GetObject', 'GET', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'ETag' => '"5B3C1A2E05E1B002CC607C****"', 'x-oss-object-type' => 'Normal', 'Last-Modified' => 'Fri, 24 Feb 2012 06:07:48 GMT', 'Content-Type' => 'image/jpg', 'Content-Length' => '20', 'Accept-Ranges' => 'bytes', 'Content-disposition' => 'attachment; filename=testing.txt', 'Cache-control' => 'no-cache', 'X-Oss-Storage-Class' => 'Standard', 'x-oss-server-side-encryption' => 'KMS', 'x-oss-server-side-data-encryption' => 'SM4', 'x-oss-server-side-encryption-key-id' => '12f8711f-90df-4e0d-903d-ab972b0f****', 'x-oss-tagging-count' => '2', 'Content-MD5' => 'si4Nw3Cn9wZ/rPX3XX+j****', 'x-oss-hash-crc64ecma' => '870718044876840****', 'x-oss-meta-name' => 'demo', 'x-oss-meta-email' => 'demo@aliyun.com'],
null
),
);
$result = ObjectBasic::toHeadObject($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals('"5B3C1A2E05E1B002CC607C****"', $result->etag);
$this->assertEquals(\DateTime::createFromFormat(
'D, d M Y H:i:s \G\M\T',
'Fri, 24 Feb 2012 06:07:48 GMT',
new \DateTimeZone('UTC')
), $result->lastModified);
$this->assertEquals('image/jpg', $result->contentType);
$this->assertEquals('no-cache', $result->cacheControl);
$this->assertEquals('attachment; filename=testing.txt', $result->contentDisposition);
$this->assertEquals(20, $result->contentLength);
$this->assertEquals('Normal', $result->objectType);
$this->assertEquals(Models\StorageClassType::STANDARD, $result->storageClass);
$this->assertEquals('KMS', $result->serverSideEncryption);
$this->assertEquals('SM4', $result->serverSideDataEncryption);
$this->assertEquals('12f8711f-90df-4e0d-903d-ab972b0f****', $result->serverSideEncryptionKeyId);
$this->assertEquals(2, $result->taggingCount);
$this->assertEquals('demo', $result->metadata['name']);
$this->assertEquals('demo@aliyun.com', $result->metadata['email']);
$this->assertEquals('si4Nw3Cn9wZ/rPX3XX+j****', $result->contentMd5);
$this->assertEquals('870718044876840****', $result->hashCrc64);
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'ETag' => '"5B3C1A2E05E1B002CC607C****"', 'x-oss-object-type' => 'Appendable', 'Last-Modified' => 'Fri, 24 Feb 2012 06:07:48 GMT', 'Content-Type' => 'text', 'X-Oss-Storage-Class' => 'Standard', 'x-oss-next-append-position' => '1001'],
Utils::streamFor(),
new OperationInput('GetObject', 'GET', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'ETag' => '"5B3C1A2E05E1B002CC607C****"', 'x-oss-object-type' => 'Appendable', 'Last-Modified' => 'Fri, 24 Feb 2012 06:07:48 GMT', 'Content-Type' => 'text', 'X-Oss-Storage-Class' => 'Standard', 'x-oss-next-append-position' => '1001'],
null
),
);
$result = ObjectBasic::toHeadObject($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals('"5B3C1A2E05E1B002CC607C****"', $result->etag);
$this->assertEquals(\DateTime::createFromFormat(
'D, d M Y H:i:s \G\M\T',
'Fri, 24 Feb 2012 06:07:48 GMT',
new \DateTimeZone('UTC')
), $result->lastModified);
$this->assertEquals('text', $result->contentType);
$this->assertEquals('Appendable', $result->objectType);
$this->assertEquals(Models\StorageClassType::STANDARD, $result->storageClass);
$this->assertEquals(1001, $result->nextAppendPosition);
}
public function testFromGetObjectMeta()
{
// miss required field
try {
$request = new Models\GetObjectMetaRequest();
$input = ObjectBasic::fromGetObjectMeta($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, bucket", (string)$e);
}
try {
$request = new Models\GetObjectMetaRequest('bucket-123');
$input = ObjectBasic::fromGetObjectMeta($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, key", (string)$e);
}
$request = new Models\GetObjectMetaRequest('bucket-123', 'key-123');
$input = ObjectBasic::fromGetObjectMeta($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$request = new Models\GetObjectMetaRequest('bucket-123', 'key-123');
$request->requestPayer = 'requester';
$request->versionId = 'CAEQNhiBgM0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY****';
$input = ObjectBasic::fromGetObjectMeta($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertEquals('CAEQNhiBgM0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY****', $input->getParameters()['versionId']);
$this->assertEquals('requester', $input->getHeaders()['x-oss-request-payer']);
}
public function testToGetObjectMeta()
{
// empty output
try {
$output = new OperationOutput();
$result = ObjectBasic::toGetObjectMeta($output);
$this->assertTrue(false, 'should not here');
} catch (\Throwable $e) {
$this->assertStringContainsString('Call to a member function hasHeader() on null', $e->getMessage());
}
try {
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'x-oss-object-type' => 'Normal', 'x-oss-storage-class' => 'Archive', 'Last-Modified' => 'Fri, 24 Feb 2018 09:41:56 GMT', 'Content-Length' => '344606', 'Content-Type' => 'image/jpg', 'ETag' => '"fba9dede5f27731c9771645a3986****"'],
null,
new OperationInput('GetObjectMeta', 'HEAD', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'x-oss-object-type' => 'Normal', 'x-oss-storage-class' => 'Archive', 'Last-Modified' => 'Fri, 24 Feb 2018 09:41:56 GMT', 'Content-Length' => '344606', 'Content-Type' => 'image/jpg', 'ETag' => '"fba9dede5f27731c9771645a3986****"'],
),
);
$result = ObjectBasic::toGetObjectMeta($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertEquals('"fba9dede5f27731c9771645a3986****"', $result->etag);
$this->assertEquals(\DateTime::createFromFormat(
'D, d M Y H:i:s \G\M\T',
'Fri, 24 Feb 2018 09:41:56 GMT',
new \DateTimeZone('UTC')
), $result->lastModified);
$this->assertEquals(344606, $result->contentLength);
} catch (\Throwable $e) {
$this->assertTrue(false, "should not here");
}
try {
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'Last-Modified' => 'Fri, 24 Feb 2018 09:41:56 GMT', 'Content-Length' => '344606', 'ETag' => '"fba9dede5f27731c9771645a3986****"', 'x-oss-transition-time' => 'Thu, 31 Oct 2024 00:24:17 GMT', 'x-oss-version-Id' => 'CAEQNRiBgICb8o6D0BYiIDNlNzk5NGE2M2Y3ZjRhZTViYTAxZGE0ZTEyMWYy****', 'x-oss-last-access-time' => 'Thu, 14 Oct 2021 11:49:05 GMT'],
null,
new OperationInput('GetObjectMeta', 'HEAD', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'Last-Modified' => 'Fri, 24 Feb 2018 09:41:56 GMT', 'Content-Length' => '344606', 'ETag' => '"fba9dede5f27731c9771645a3986****"', 'x-oss-transition-time' => 'Thu, 31 Oct 2024 00:24:17 GMT', 'x-oss-version-Id' => 'CAEQNRiBgICb8o6D0BYiIDNlNzk5NGE2M2Y3ZjRhZTViYTAxZGE0ZTEyMWYy****', 'x-oss-last-access-time' => 'Thu, 14 Oct 2021 11:49:05 GMT'],
),
);
$result = ObjectBasic::toGetObjectMeta($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertEquals('"fba9dede5f27731c9771645a3986****"', $result->etag);
$this->assertEquals(\DateTime::createFromFormat(
'D, d M Y H:i:s \G\M\T',
'Fri, 24 Feb 2018 09:41:56 GMT',
new \DateTimeZone('UTC')
), $result->lastModified);
$this->assertEquals(344606, $result->contentLength);
$this->assertEquals(\DateTime::createFromFormat(
'D, d M Y H:i:s \G\M\T',
'Thu, 31 Oct 2024 00:24:17 GMT',
new \DateTimeZone('UTC')
), $result->transitionTime);
$this->assertEquals(\DateTime::createFromFormat(
'D, d M Y H:i:s \G\M\T',
'Thu, 14 Oct 2021 11:49:05 GMT',
new \DateTimeZone('UTC')
), $result->lastAccessTime);
$this->assertEquals('CAEQNRiBgICb8o6D0BYiIDNlNzk5NGE2M2Y3ZjRhZTViYTAxZGE0ZTEyMWYy****', $result->versionId);
} catch (\Throwable $e) {
$this->assertTrue(false, "should not here");
}
}
public function testFromRestoreObject()
{
// miss required field
try {
$request = new Models\RestoreObjectRequest();
$input = ObjectBasic::fromRestoreObject($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, bucket", (string)$e);
}
try {
$request = new Models\RestoreObjectRequest('bucket-123');
$input = ObjectBasic::fromRestoreObject($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, key", (string)$e);
}
$request = new Models\RestoreObjectRequest('bucket-123', 'key-123');
$input = ObjectBasic::fromRestoreObject($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$request = new Models\RestoreObjectRequest('bucket-123', 'key-123');
$request->restoreRequest = new RestoreRequest(3);
$input = ObjectBasic::fromRestoreObject($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$xml = <<<BBB
<?xml version="1.0" encoding="UTF-8"?><RestoreRequest><Days>3</Days></RestoreRequest>
BBB;
$body = $input->getBody()->getContents();
$this->assertEquals($xml, $this->cleanXml($body));
$request = new Models\RestoreObjectRequest('bucket-123', 'key-123');
$request->restoreRequest = new RestoreRequest(3, 'Bulk');
$request->requestPayer = 'requester';
$request->versionId = 'CAEQNhiBgM0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY****';
$input = ObjectBasic::fromRestoreObject($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertEquals('CAEQNhiBgM0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY****', $input->getParameters()['versionId']);
$this->assertEquals('requester', $input->getHeaders()['x-oss-request-payer']);
$xml = <<<BBB
<?xml version="1.0" encoding="UTF-8"?><RestoreRequest><Days>3</Days><JobParameters><Tier>Bulk</Tier></JobParameters></RestoreRequest>
BBB;
$body = $input->getBody()->getContents();
$this->assertEquals($xml, $this->cleanXml($body));
}
public function testToRestoreObject()
{
// empty output
try {
$output = new OperationOutput();
$result = ObjectBasic::toRestoreObject($output);
$this->assertTrue(false, 'should not here');
} catch (\Throwable $e) {
$this->assertStringContainsString('Call to a member function hasHeader() on null', $e->getMessage());
}
try {
$output = new OperationOutput(
'Accepted',
202,
['x-oss-request-id' => '123'],
null,
new OperationInput('RestoreObject', 'POST', []),
null,
new \GuzzleHttp\Psr7\Response(
202,
['x-oss-request-id' => '123',],
),
);
$result = ObjectBasic::toRestoreObject($output);
$this->assertEquals('Accepted', $result->status);
$this->assertEquals(202, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals('123', $result->headers['x-oss-request-id']);
} catch (\Throwable $e) {
$this->assertTrue(false, "should not here");
}
try {
$output = new OperationOutput(
'Accepted',
202,
['x-oss-request-id' => '123', 'x-oss-object-restore-priority' => 'Standard', 'x-oss-version-id' => 'CAEQNRiBgICb8o6D0BYiIDNlNzk5NGE2M2Y3ZjRhZTViYTAxZGE0ZTEyMWYy****'],
null,
new OperationInput('RestoreObject', 'POST', []),
null,
new \GuzzleHttp\Psr7\Response(
202,
['x-oss-request-id' => '123', 'x-oss-object-restore-priority' => 'Standard', 'x-oss-version-id' => 'CAEQNRiBgICb8o6D0BYiIDNlNzk5NGE2M2Y3ZjRhZTViYTAxZGE0ZTEyMWYy****'],
),
);
$result = ObjectBasic::toRestoreObject($output);
$this->assertEquals('Accepted', $result->status);
$this->assertEquals(202, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertEquals('Standard', $result->restorePriority);
$this->assertEquals('CAEQNRiBgICb8o6D0BYiIDNlNzk5NGE2M2Y3ZjRhZTViYTAxZGE0ZTEyMWYy****', $result->versionId);
} catch (\Throwable $e) {
$this->assertTrue(false, "should not here");
}
}
public function testFromCleanRestoredObject()
{
// miss required field
try {
$request = new Models\CleanRestoredObjectRequest();
$input = ObjectBasic::fromCleanRestoredObject($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, bucket", (string)$e);
}
try {
$request = new Models\CleanRestoredObjectRequest('bucket-123');
$input = ObjectBasic::fromCleanRestoredObject($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, key", (string)$e);
}
$request = new Models\CleanRestoredObjectRequest('bucket-123', 'key-123');
$input = ObjectBasic::fromCleanRestoredObject($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$request = new Models\CleanRestoredObjectRequest('bucket-123', 'key-123');
$request->requestPayer = 'requester';
$request->versionId = 'CAEQNhiBgM0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY****';
$input = ObjectBasic::fromCleanRestoredObject($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertEquals('CAEQNhiBgM0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY****', $input->getParameters()['versionId']);
$this->assertEquals('requester', $input->getHeaders()['x-oss-request-payer']);
}
public function testToCleanRestoredObject()
{
// empty output
try {
$output = new OperationOutput();
$result = ObjectBasic::toCleanRestoredObject($output);
$this->assertEquals('', $result->status);
$this->assertEquals(0, $result->statusCode);
$this->assertEquals('', $result->requestId);
$this->assertEquals(0, count($result->headers));
} catch (\Throwable $e) {
$this->assertTrue(false, 'should not here');
}
try {
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123'],
null,
new OperationInput('CleanRestoredObject', 'POST', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123',],
),
);
$result = ObjectBasic::toCleanRestoredObject($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals('123', $result->headers['x-oss-request-id']);
} catch (\Throwable $e) {
$this->assertTrue(false, "should not here");
}
}
public function testFromPutObjectAcl()
{
// miss required field
try {
$request = new Models\PutObjectAclRequest();
$input = ObjectBasic::fromPutObjectAcl($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, bucket", (string)$e);
}
try {
$request = new Models\PutObjectAclRequest('bucket-123');
$input = ObjectBasic::fromPutObjectAcl($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, key", (string)$e);
}
try {
$request = new Models\PutObjectAclRequest('bucket-123', 'key-123');
$input = ObjectBasic::fromPutObjectAcl($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, acl", (string)$e);
}
$request = new Models\PutObjectAclRequest('bucket-123', 'key-123', Models\ObjectACLType::PRIVATE);
$input = ObjectBasic::fromPutObjectAcl($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertEquals(Models\ObjectACLType::PRIVATE, $input->getHeaders()["x-oss-object-acl"]);
$request = new Models\PutObjectAclRequest('bucket-123', 'key-123', Models\ObjectACLType::PRIVATE, "CAEQMhiBgMC1qpSD0BYiIGQ0ZmI5ZDEyYWVkNTQwMjBiNTliY2NjNmY3ZTVk****");
$input = ObjectBasic::fromPutObjectAcl($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertEquals(Models\ObjectACLType::PRIVATE, $input->getHeaders()["x-oss-object-acl"]);
$this->assertEquals('CAEQMhiBgMC1qpSD0BYiIGQ0ZmI5ZDEyYWVkNTQwMjBiNTliY2NjNmY3ZTVk****', $input->getParameters()['versionId']);
$request = new Models\PutObjectAclRequest('bucket-123', 'key-123', Models\ObjectACLType::PRIVATE);
$request->requestPayer = 'requester';
$input = ObjectBasic::fromPutObjectAcl($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertEquals(Models\ObjectACLType::PRIVATE, $input->getHeaders()["x-oss-object-acl"]);
$this->assertEquals('requester', $input->getHeaders()['x-oss-request-payer']);
$request = new Models\PutObjectAclRequest('bucket-123', 'key-123', null, null, null, null, Models\ObjectACLType::PRIVATE);
$request->requestPayer = 'requester';
$input = ObjectBasic::fromPutObjectAcl($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertEquals(Models\ObjectACLType::PRIVATE, $input->getHeaders()["x-oss-object-acl"]);
$this->assertEquals('requester', $input->getHeaders()['x-oss-request-payer']);
$request = new Models\PutObjectAclRequest('bucket-123', 'key-123',Models\ObjectACLType::PUBLIC_READ,null,'requester',null,Models\ObjectACLType::PRIVATE);
$input = ObjectBasic::fromPutObjectAcl($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertEquals(Models\ObjectACLType::PRIVATE, $input->getHeaders()["x-oss-object-acl"]);
$this->assertEquals('requester', $input->getHeaders()['x-oss-request-payer']);
}
public function testToPutObjectAcl()
{
try {
$output = new OperationOutput();
$result = ObjectBasic::toPutObjectAcl($output);
$this->assertTrue(false, 'should not here');
} catch (\Throwable $e) {
$this->assertStringContainsString('Call to a member function hasHeader() on null', $e->getMessage());
}
try {
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123'],
null,
new OperationInput('PutObjectAcl', 'PUT', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123',],
),
);
$result = ObjectBasic::toPutObjectAcl($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals('123', $result->headers['x-oss-request-id']);
} catch (\Throwable $e) {
$this->assertTrue(false, "should not here");
}
try {
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'X-Oss-Version-Id' => 'CAEQMhiBgMC1qpSD0BYiIGQ0ZmI5ZDEyYWVkNTQwMjBiNTliY2NjNmY3ZTVk****'],
null,
new OperationInput('PutObjectAcl', 'PUT', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'X-Oss-Version-Id' => 'CAEQMhiBgMC1qpSD0BYiIGQ0ZmI5ZDEyYWVkNTQwMjBiNTliY2NjNmY3ZTVk****'],
),
);
$result = ObjectBasic::toPutObjectAcl($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals('CAEQMhiBgMC1qpSD0BYiIGQ0ZmI5ZDEyYWVkNTQwMjBiNTliY2NjNmY3ZTVk****', $result->versionId);
$this->assertEquals('123', $result->headers['x-oss-request-id']);
} catch (\Throwable $e) {
$this->assertTrue(false, "should not here");
}
}
public function testFromGetObjectAcl()
{
// miss required field
try {
$request = new Models\GetObjectAclRequest();
$input = ObjectBasic::fromGetObjectAcl($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, bucket", (string)$e);
}
try {
$request = new Models\GetObjectAclRequest('bucket-123');
$input = ObjectBasic::fromGetObjectAcl($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, key", (string)$e);
}
$request = new Models\GetObjectAclRequest('bucket-123', 'key-123');
$input = ObjectBasic::fromGetObjectAcl($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$request = new Models\GetObjectAclRequest('bucket-123', 'key-123', "CAEQMhiBgMC1qpSD0BYiIGQ0ZmI5ZDEyYWVkNTQwMjBiNTliY2NjNmY3ZTVk****");
$input = ObjectBasic::fromGetObjectAcl($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertEquals('CAEQMhiBgMC1qpSD0BYiIGQ0ZmI5ZDEyYWVkNTQwMjBiNTliY2NjNmY3ZTVk****', $input->getParameters()['versionId']);
$request = new Models\GetObjectAclRequest('bucket-123', 'key-123');
$request->requestPayer = 'requester';
$input = ObjectBasic::fromGetObjectAcl($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertEquals('requester', $input->getHeaders()['x-oss-request-payer']);
}
public function testToGetObjectAcl()
{
try {
$output = new OperationOutput();
$result = ObjectBasic::toGetObjectAcl($output);
} catch (\Throwable $e) {
$this->assertStringContainsString('Call to a member function hasHeader() on null', $e);
}
try {
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'content-type' => 'test'],
null,
new OperationInput('GetObjectAcl', 'GET', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'content-type' => 'test'],
),
);
$result = ObjectBasic::toGetObjectAcl($output);
} catch (\Throwable $e) {
$this->assertStringContainsString('Not found tag <AccessControlPolicy>', $e);
}
//empty xml
$str = '<?xml version="1.0" encoding="UTF-8"?>
<AccessControlPolicy></AccessControlPolicy>';
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'content-type' => 'test'],
Utils::streamFor($str),
new OperationInput('GetObjectAcl', 'GET', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'content-type' => 'test'],
),
);
$result = ObjectBasic::toGetObjectAcl($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals(2, count($result->headers));
$this->assertEquals('test', $result->headers['content-type']);
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertNull($result->accessControlList);
$str = '<?xml version="1.0" encoding="UTF-8"?>
<AccessControlPolicy>
<Owner>
<ID>0022012****</ID>
<DisplayName>0022012****</DisplayName>
</Owner>
<AccessControlList>
<Grant>public-read</Grant>
</AccessControlList>
</AccessControlPolicy>';
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'content-type' => 'application/xml'],
Utils::streamFor($str),
new OperationInput('GetObjectAcl', 'GET', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'content-type' => 'application/xml'],
),
);
$result = ObjectBasic::toGetObjectAcl($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals(2, count($result->headers));
$this->assertEquals('application/xml', $result->headers['content-type']);
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertEquals(Models\ObjectACLType::PUBLIC_READ, $result->accessControlList->grant);
$this->assertEquals('0022012****', $result->owner->id);
$this->assertEquals('0022012****', $result->owner->displayName);
$str = '<?xml version="1.0" encoding="UTF-8"?>
<AccessControlPolicy>
<Owner>
<ID>0022012****</ID>
<DisplayName>0022012****</DisplayName>
</Owner>
<AccessControlList>
<Grant>private</Grant>
</AccessControlList>
</AccessControlPolicy>';
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'content-type' => 'application/xml', 'X-Oss-Version-Id' => 'CAEQMhiBgMC1qpSD0BYiIGQ0ZmI5ZDEyYWVkNTQwMjBiNTliY2NjNmY3ZTVk****'],
Utils::streamFor($str),
new OperationInput('GetObjectAcl', 'GET', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'content-type' => 'application/xml', 'X-Oss-Version-Id' => 'CAEQMhiBgMC1qpSD0BYiIGQ0ZmI5ZDEyYWVkNTQwMjBiNTliY2NjNmY3ZTVk****'],
),
);
$result = ObjectBasic::toGetObjectAcl($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals(3, count($result->headers));
$this->assertEquals('application/xml', $result->headers['content-type']);
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertEquals(Models\ObjectACLType::PRIVATE, $result->accessControlList->grant);
$this->assertEquals('0022012****', $result->owner->id);
$this->assertEquals('0022012****', $result->owner->displayName);
$this->assertEquals('CAEQMhiBgMC1qpSD0BYiIGQ0ZmI5ZDEyYWVkNTQwMjBiNTliY2NjNmY3ZTVk****', $result->versionId);
}
public function testFromGetObjectTagging()
{
// miss required field
try {
$request = new Models\GetObjectTaggingRequest();
$input = ObjectBasic::fromGetObjectTagging($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, bucket", (string)$e);
}
try {
$request = new Models\GetObjectTaggingRequest('bucket-123');
$input = ObjectBasic::fromGetObjectTagging($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, key", (string)$e);
}
$request = new Models\GetObjectTaggingRequest('bucket-123', 'key-123');
$input = ObjectBasic::fromGetObjectTagging($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$request = new Models\GetObjectTaggingRequest('bucket-123', 'key-123', "CAEQMhiBgMC1qpSD0BYiIGQ0ZmI5ZDEyYWVkNTQwMjBiNTliY2NjNmY3ZTVk****", "requester");
$input = ObjectBasic::fromGetObjectTagging($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertEquals('CAEQMhiBgMC1qpSD0BYiIGQ0ZmI5ZDEyYWVkNTQwMjBiNTliY2NjNmY3ZTVk****', $input->getParameters()['versionId']);
$this->assertEquals('requester', $input->getHeaders()['x-oss-request-payer']);
}
public function testToGetObjectTagging()
{
try {
$output = new OperationOutput();
$result = ObjectBasic::toGetObjectTagging($output);
} catch (\Throwable $e) {
$this->assertStringContainsString('Call to a member function hasHeader() on null', $e);
}
try {
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'content-type' => 'test'],
null,
new OperationInput('GetObjectTagging', 'GET', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'content-type' => 'test'],
),
);
$result = ObjectBasic::toGetObjectTagging($output);
} catch (\Throwable $e) {
$this->assertStringContainsString('Not found tag <Tagging>', $e);
}
//empty xml
$str = '<?xml version="1.0" encoding="UTF-8"?>
<Tagging></Tagging>';
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'content-type' => 'test'],
Utils::streamFor($str),
new OperationInput('GetObjectTagging', 'GET', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'content-type' => 'test'],
),
);
$result = ObjectBasic::toGetObjectTagging($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals(2, count($result->headers));
$this->assertEquals('test', $result->headers['content-type']);
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertNull($result->tagSet);
$str = '<Tagging>
<TagSet>
<Tag>
<Key>a</Key>
<Value>1</Value>
</Tag>
<Tag>
<Key>b</Key>
<Value>2</Value>
</Tag>
</TagSet>
</Tagging>';
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'content-type' => 'application/xml'],
Utils::streamFor($str),
new OperationInput('GetObjectTagging', 'GET', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'content-type' => 'application/xml'],
),
);
$result = ObjectBasic::toGetObjectTagging($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals(2, count($result->headers));
$this->assertEquals('application/xml', $result->headers['content-type']);
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertEquals(2, count($result->tagSet->tags));
$this->assertEquals('a', $result->tagSet->tags[0]->key);
$this->assertEquals('1', $result->tagSet->tags[0]->value);
$this->assertEquals('b', $result->tagSet->tags[1]->key);
$this->assertEquals('2', $result->tagSet->tags[1]->value);
$str = '<?xml version="1.0" encoding="UTF-8"?>
<Tagging>
<TagSet>
<Tag>
<Key>age</Key>
<Value>18</Value>
</Tag>
</TagSet>
</Tagging>';
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'content-type' => 'application/xml', 'X-Oss-Version-Id' => 'CAEQMhiBgMC1qpSD0BYiIGQ0ZmI5ZDEyYWVkNTQwMjBiNTliY2NjNmY3ZTVk****'],
Utils::streamFor($str),
new OperationInput('GetObjectTagging', 'GET', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'content-type' => 'application/xml', 'X-Oss-Version-Id' => 'CAEQMhiBgMC1qpSD0BYiIGQ0ZmI5ZDEyYWVkNTQwMjBiNTliY2NjNmY3ZTVk****'],
),
);
$result = ObjectBasic::toGetObjectTagging($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals(3, count($result->headers));
$this->assertEquals('application/xml', $result->headers['content-type']);
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertEquals(1, count($result->tagSet->tags));
$this->assertEquals('age', $result->tagSet->tags[0]->key);
$this->assertEquals('18', $result->tagSet->tags[0]->value);
$this->assertEquals('CAEQMhiBgMC1qpSD0BYiIGQ0ZmI5ZDEyYWVkNTQwMjBiNTliY2NjNmY3ZTVk****', $result->versionId);
}
public function testFromPutObjectTagging()
{
// miss required field
try {
$request = new Models\PutObjectTaggingRequest();
$input = ObjectBasic::fromPutObjectTagging($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, bucket", (string)$e);
}
try {
$request = new Models\PutObjectTaggingRequest('bucket-123');
$input = ObjectBasic::fromPutObjectTagging($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, key", (string)$e);
}
try {
$request = new Models\PutObjectTaggingRequest('bucket-123', 'key-123');
$input = ObjectBasic::fromPutObjectTagging($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, tagging", (string)$e);
}
$request = new Models\PutObjectTaggingRequest('bucket-123', 'key-123');
$request->tagging = new Models\Tagging(
new Models\TagSet(
[new Models\Tag('k1', 'v1'), new Models\Tag('k2', 'v2')]
)
);
$request->requestPayer = 'requester';
$request->versionId = 'CAEQMhiBgMC1qpSD0BYiIGQ0ZmI5ZDEyYWVkNTQwMjBiNTliY2NjNmY3ZTVk****';
$input = ObjectBasic::fromPutObjectTagging($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$inputXml = <<<BBB
<?xml version="1.0" encoding="UTF-8"?><Tagging><TagSet><Tag><Key>k1</Key><Value>v1</Value></Tag><Tag><Key>k2</Key><Value>v2</Value></Tag></TagSet></Tagging>
BBB;
$this->assertEquals($inputXml, $this->cleanXml($input->getBody()->getContents()));
$this->assertEquals('requester', $input->getHeaders()['x-oss-request-payer']);
$this->assertEquals('CAEQMhiBgMC1qpSD0BYiIGQ0ZmI5ZDEyYWVkNTQwMjBiNTliY2NjNmY3ZTVk****', $input->getParameters()['versionId']);
}
public function testToPutObjectTagging()
{
try {
$output = new OperationOutput();
$result = ObjectBasic::toPutObjectTagging($output);
} catch (\Throwable $e) {
$this->assertStringContainsString('Call to a member function hasHeader() on null', $e);
}
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'content-type' => 'test'],
null,
new OperationInput('PutObjectTagging', 'PUT', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'content-type' => 'test'],
),
);
$result = ObjectBasic::toPutObjectTagging($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals(2, count($result->headers));
$this->assertEquals('test', $result->headers['content-type']);
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'X-Oss-Version-Id' => 'CAEQMhiBgMC1qpSD0BYiIGQ0ZmI5ZDEyYWVkNTQwMjBiNTliY2NjNmY3ZTVk****'],
null,
new OperationInput('PutObjectTagging', 'GET', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'X-Oss-Version-Id' => 'CAEQMhiBgMC1qpSD0BYiIGQ0ZmI5ZDEyYWVkNTQwMjBiNTliY2NjNmY3ZTVk****'],
),
);
$result = ObjectBasic::toPutObjectTagging($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals(2, count($result->headers));
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertEquals('CAEQMhiBgMC1qpSD0BYiIGQ0ZmI5ZDEyYWVkNTQwMjBiNTliY2NjNmY3ZTVk****', $result->versionId);
}
public function testFromDeleteObjectTagging()
{
// miss required field
try {
$request = new Models\DeleteObjectTaggingRequest();
$input = ObjectBasic::fromDeleteObjectTagging($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, bucket", (string)$e);
}
try {
$request = new Models\DeleteObjectTaggingRequest('bucket-123');
$input = ObjectBasic::fromDeleteObjectTagging($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, key", (string)$e);
}
$request = new Models\DeleteObjectTaggingRequest('bucket-123', 'key-123');
$input = ObjectBasic::fromDeleteObjectTagging($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$request = new Models\DeleteObjectTaggingRequest('bucket-123', 'key-123');
$request->requestPayer = 'requester';
$request->versionId = 'CAEQMhiBgMC1qpSD0BYiIGQ0ZmI5ZDEyYWVkNTQwMjBiNTliY2NjNmY3ZTVk****';
$input = ObjectBasic::fromDeleteObjectTagging($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertEquals('requester', $input->getHeaders()['x-oss-request-payer']);
$this->assertEquals('CAEQMhiBgMC1qpSD0BYiIGQ0ZmI5ZDEyYWVkNTQwMjBiNTliY2NjNmY3ZTVk****', $input->getParameters()['versionId']);
}
public function testToDeleteObjectTagging()
{
try {
$output = new OperationOutput();
$result = ObjectBasic::toDeleteObjectTagging($output);
} catch (\Throwable $e) {
$this->assertStringContainsString('Call to a member function hasHeader() on null', $e);
}
$output = new OperationOutput(
'No Content',
204,
['x-oss-request-id' => '123', 'content-type' => 'test'],
null,
new OperationInput('DeleteObjectTagging', 'DELETE', []),
null,
new \GuzzleHttp\Psr7\Response(
204,
['x-oss-request-id' => '123', 'content-type' => 'test'],
),
);
$result = ObjectBasic::toDeleteObjectTagging($output);
$this->assertEquals('No Content', $result->status);
$this->assertEquals(204, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals(2, count($result->headers));
$this->assertEquals('test', $result->headers['content-type']);
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$output = new OperationOutput(
'No Content',
204,
['x-oss-request-id' => '123', 'X-Oss-Version-Id' => 'CAEQMhiBgMC1qpSD0BYiIGQ0ZmI5ZDEyYWVkNTQwMjBiNTliY2NjNmY3ZTVk****'],
null,
new OperationInput('DeleteObjectTagging', 'DELETE', []),
null,
new \GuzzleHttp\Psr7\Response(
204,
['x-oss-request-id' => '123', 'X-Oss-Version-Id' => 'CAEQMhiBgMC1qpSD0BYiIGQ0ZmI5ZDEyYWVkNTQwMjBiNTliY2NjNmY3ZTVk****'],
),
);
$result = ObjectBasic::toDeleteObjectTagging($output);
$this->assertEquals('No Content', $result->status);
$this->assertEquals(204, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals(2, count($result->headers));
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertEquals('CAEQMhiBgMC1qpSD0BYiIGQ0ZmI5ZDEyYWVkNTQwMjBiNTliY2NjNmY3ZTVk****', $result->versionId);
}
public function testFromPutSymlink()
{
// miss required field
try {
$request = new Models\PutSymlinkRequest();
$input = ObjectBasic::fromPutSymlink($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, bucket", (string)$e);
}
try {
$request = new Models\PutSymlinkRequest('bucket-123');
$input = ObjectBasic::fromPutSymlink($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, key", (string)$e);
}
try {
$request = new Models\PutSymlinkRequest('bucket-123', 'key-123');
$input = ObjectBasic::fromPutSymlink($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, target", (string)$e);
}
$request = new Models\PutSymlinkRequest('bucket-123', 'key-123', 'target-key');
$input = ObjectBasic::fromPutSymlink($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertEquals('target-key', $input->getHeaders()['x-oss-symlink-target']);
$request = new Models\PutSymlinkRequest('bucket-123', 'key-123', 'target-key', Models\ObjectACLType::PRIVATE, Models\StorageClassType::STANDARD, ['name' => 'demo', 'email' => 'demo@aliyun.com'], true);
$input = ObjectBasic::fromPutSymlink($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertEquals('target-key', $input->getHeaders()['x-oss-symlink-target']);
$this->assertEquals('true', $input->getHeaders()['x-oss-forbid-overwrite']);
$this->assertEquals(Models\ObjectACLType::PRIVATE, $input->getHeaders()['x-oss-object-acl']);
$this->assertEquals(Models\StorageClassType::STANDARD, $input->getHeaders()['x-oss-storage-class']);
$this->assertEquals('demo', $input->getHeaders()['x-oss-meta-name']);
$this->assertEquals('demo@aliyun.com', $input->getHeaders()['x-oss-meta-email']);
$request = new Models\PutSymlinkRequest('bucket-123', 'key-123', 'target-key');
$request->requestPayer = 'requester';
$input = ObjectBasic::fromPutSymlink($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertEquals('target-key', $input->getHeaders()['x-oss-symlink-target']);
$this->assertEquals('requester', $input->getHeaders()['x-oss-request-payer']);
$request = new Models\PutSymlinkRequest('bucket-123', 'key-123', null, null, Models\StorageClassType::STANDARD, ['name' => 'demo', 'email' => 'demo@aliyun.com'], true, null, null, Models\ObjectACLType::PUBLIC_READ, 'target-key');
$input = ObjectBasic::fromPutSymlink($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertEquals('target-key', $input->getHeaders()['x-oss-symlink-target']);
$this->assertEquals('true', $input->getHeaders()['x-oss-forbid-overwrite']);
$this->assertEquals(Models\ObjectACLType::PUBLIC_READ, $input->getHeaders()['x-oss-object-acl']);
$this->assertEquals(Models\StorageClassType::STANDARD, $input->getHeaders()['x-oss-storage-class']);
$this->assertEquals('demo', $input->getHeaders()['x-oss-meta-name']);
$this->assertEquals('demo@aliyun.com', $input->getHeaders()['x-oss-meta-email']);
$request = new Models\PutSymlinkRequest('bucket-123', 'key-123', 'target-key',Models\ObjectACLType::PRIVATE, Models\StorageClassType::STANDARD, ['name' => 'demo', 'email' => 'demo@aliyun.com'], true,null,null,Models\ObjectACLType::PUBLIC_READ,'target-key2');
$input = ObjectBasic::fromPutSymlink($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertEquals('target-key2', $input->getHeaders()['x-oss-symlink-target']);
$this->assertEquals('true', $input->getHeaders()['x-oss-forbid-overwrite']);
$this->assertEquals(Models\ObjectACLType::PUBLIC_READ, $input->getHeaders()['x-oss-object-acl']);
$this->assertEquals(Models\StorageClassType::STANDARD, $input->getHeaders()['x-oss-storage-class']);
$this->assertEquals('demo', $input->getHeaders()['x-oss-meta-name']);
$this->assertEquals('demo@aliyun.com', $input->getHeaders()['x-oss-meta-email']);
}
public function testToPutSymlink()
{
try {
$output = new OperationOutput();
$result = ObjectBasic::toPutSymlink($output);
} catch (\Throwable $e) {
$this->assertStringContainsString('Call to a member function hasHeader() on null', $e);
}
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'content-type' => 'test'],
null,
new OperationInput('PutSymlink', 'DELETE', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'content-type' => 'test'],
),
);
$result = ObjectBasic::toPutSymlink($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals(2, count($result->headers));
$this->assertEquals('test', $result->headers['content-type']);
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'X-Oss-Version-Id' => 'CAEQMhiBgMC1qpSD0BYiIGQ0ZmI5ZDEyYWVkNTQwMjBiNTliY2NjNmY3ZTVk****'],
null,
new OperationInput('PutSymlink', 'DELETE', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'X-Oss-Version-Id' => 'CAEQMhiBgMC1qpSD0BYiIGQ0ZmI5ZDEyYWVkNTQwMjBiNTliY2NjNmY3ZTVk****'],
),
);
$result = ObjectBasic::toPutSymlink($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals(2, count($result->headers));
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertEquals('CAEQMhiBgMC1qpSD0BYiIGQ0ZmI5ZDEyYWVkNTQwMjBiNTliY2NjNmY3ZTVk****', $result->versionId);
}
public function testFromGetSymlink()
{
// miss required field
try {
$request = new Models\GetSymlinkRequest();
$input = ObjectBasic::fromGetSymlink($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, bucket", (string)$e);
}
try {
$request = new Models\GetSymlinkRequest('bucket-123');
$input = ObjectBasic::fromGetSymlink($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, key", (string)$e);
}
$request = new Models\GetSymlinkRequest('bucket-123', 'key-123');
$input = ObjectBasic::fromGetSymlink($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$request = new Models\GetSymlinkRequest('bucket-123', 'key-123', 'CAEQNRiBgMClj7qD0BYiIDQ5Y2QyMjc3NGZkODRlMTU5M2VkY2U3MWRiNGRh****', 'requester');
$input = ObjectBasic::fromGetSymlink($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertEquals('CAEQNRiBgMClj7qD0BYiIDQ5Y2QyMjc3NGZkODRlMTU5M2VkY2U3MWRiNGRh****', $input->getParameters()['versionId']);
$this->assertEquals('requester', $input->getHeaders()['x-oss-request-payer']);
}
public function testToGetSymlink()
{
try {
$output = new OperationOutput();
$result = ObjectBasic::toGetSymlink($output);
} catch (\Throwable $e) {
$this->assertStringContainsString('Call to a member function hasHeader() on null', $e);
}
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'ETag' => 'A797938C31D59EDD08D86188F6D5****', 'x-oss-symlink-target' => 'example.jpg'],
null,
new OperationInput('GetSymlink', 'GET', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'ETag' => 'A797938C31D59EDD08D86188F6D5****', 'x-oss-symlink-target' => 'example.jpg'],
),
);
$result = ObjectBasic::toGetSymlink($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals(3, count($result->headers));
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertEquals('A797938C31D59EDD08D86188F6D5****', $result->etag);
$this->assertEquals('example.jpg', $result->target);
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'ETag' => 'A797938C31D59EDD08D86188F6D5****', 'x-oss-symlink-target' => 'example.jpg', 'x-oss-version-id' => 'CAEQNRiBgMClj7qD0BYiIDQ5Y2QyMjc3NGZkODRlMTU5M2VkY2U3MWRiNGRh****'],
null,
new OperationInput('GetSymlink', 'GET', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'ETag' => 'A797938C31D59EDD08D86188F6D5****', 'x-oss-symlink-target' => 'example.jpg', 'x-oss-version-id' => 'CAEQNRiBgMClj7qD0BYiIDQ5Y2QyMjc3NGZkODRlMTU5M2VkY2U3MWRiNGRh****'],
),
);
$result = ObjectBasic::toGetSymlink($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals(4, count($result->headers));
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertEquals('CAEQNRiBgMClj7qD0BYiIDQ5Y2QyMjc3NGZkODRlMTU5M2VkY2U3MWRiNGRh****', $result->versionId);
$this->assertEquals('A797938C31D59EDD08D86188F6D5****', $result->etag);
$this->assertEquals('example.jpg', $result->target);
}
public function testFromAsyncProcessObject()
{
// miss required field
try {
$request = new Models\AsyncProcessObjectRequest();
$input = ObjectBasic::fromAsyncProcessObject($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, bucket", (string)$e);
}
try {
$request = new Models\AsyncProcessObjectRequest('bucket-123');
$input = ObjectBasic::fromAsyncProcessObject($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, key", (string)$e);
}
try {
$request = new Models\AsyncProcessObjectRequest('bucket-123', 'key-123');
$input = ObjectBasic::fromAsyncProcessObject($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, process", (string)$e);
}
$base = 'video/convert,f_avi,vcodec_h265,s_1920x1080,vb_2000000,fps_30,acodec_aac,ab_100000,sn_1';
$bucket = 'dest-bucket';
$file = 'demo.mp4';
$encoded_bucket = rtrim(base64_encode($bucket), '=');
$encoded_file = rtrim(base64_encode($file), '=');
$process = sprintf("%s|sys/saveas,b_%s,o_%s", $base, $encoded_bucket, $encoded_file);
$request = new Models\AsyncProcessObjectRequest('bucket-123', 'key-123', $process, 'requester');
$input = ObjectBasic::fromAsyncProcessObject($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertEquals('x-oss-async-process=video/convert,f_avi,vcodec_h265,s_1920x1080,vb_2000000,fps_30,acodec_aac,ab_100000,sn_1|sys/saveas,b_ZGVzdC1idWNrZXQ,o_ZGVtby5tcDQ', $input->getBody()->getContents());
$this->assertEquals('requester', $input->getHeaders()['x-oss-request-payer']);
}
public function testToAsyncProcessObject()
{
try {
$output = new OperationOutput();
$result = ObjectBasic::toAsyncProcessObject($output);
$this->assertEquals('', $result->status);
$this->assertEquals(0, $result->statusCode);
$this->assertEquals('', $result->requestId);
$this->assertEquals(0, count($result->headers));
} catch (\Throwable $e) {
print_r($e->getMessage());
$this->assertTrue(false, 'should not here');
}
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'Content-Type' => 'application/json;charset=utf-8'],
null,
new OperationInput('AsyncProcessObject', 'POST', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'Content-Type' => 'application/json;charset=utf-8'],
),
);
$result = ObjectBasic::toAsyncProcessObject($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals(2, count($result->headers));
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertNull($result->eventId);
$this->assertNull($result->taskId);
$this->assertNull($result->processRequestId);
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'Content-Type' => 'application/json;charset=utf-8'],
Utils::streamFor('{"EventId":"181-1kZUlN60OH4fWOcOjZEnGnG****","RequestId":"1D99637F-F59E-5B41-9200-C4892F52****","TaskId":"MediaConvert-e4a737df-69e9-4fca-8d9b-17c40ea3****"}'),
new OperationInput('AsyncProcessObject', 'POST', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'Content-Type' => 'application/json;charset=utf-8'],
),
);
$result = ObjectBasic::toAsyncProcessObject($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals(2, count($result->headers));
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertEquals('181-1kZUlN60OH4fWOcOjZEnGnG****', $result->eventId);
$this->assertEquals('1D99637F-F59E-5B41-9200-C4892F52****', $result->processRequestId);
$this->assertEquals('MediaConvert-e4a737df-69e9-4fca-8d9b-17c40ea3****', $result->taskId);
}
public function testFromProcessObject()
{
// miss required field
try {
$request = new Models\ProcessObjectRequest();
$input = ObjectBasic::fromProcessObject($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, bucket", (string)$e);
}
try {
$request = new Models\ProcessObjectRequest('bucket-123');
$input = ObjectBasic::fromProcessObject($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, key", (string)$e);
}
try {
$request = new Models\ProcessObjectRequest('bucket-123', 'key-123');
$input = ObjectBasic::fromProcessObject($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, process", (string)$e);
}
$process = sprintf("image/resize,w_100|sys/saveas,o_%s", base64_encode("dest.jpg"));
$request = new Models\ProcessObjectRequest('bucket-123', 'key-123', $process, 'requester');
$input = ObjectBasic::fromProcessObject($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertEquals('x-oss-process=image/resize,w_100|sys/saveas,o_ZGVzdC5qcGc=', $input->getBody()->getContents());
$this->assertEquals('requester', $input->getHeaders()['x-oss-request-payer']);
}
public function testToProcessObject()
{
try {
$output = new OperationOutput();
$result = ObjectBasic::toProcessObject($output);
$this->assertEquals('', $result->status);
$this->assertEquals(0, $result->statusCode);
$this->assertEquals('', $result->requestId);
$this->assertEquals(0, count($result->headers));
} catch (\Throwable $e) {
print_r($e->getMessage());
$this->assertTrue(false, 'should not here');
}
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'Content-Type' => 'application/json'],
null,
new OperationInput('ProcessObject', 'POST', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'Content-Type' => 'application/json'],
),
);
$result = ObjectBasic::toProcessObject($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals(2, count($result->headers));
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertNull($result->processStatus);
$this->assertNull($result->fileSize);
$this->assertNull($result->bucket);
$this->assertNull($result->key);
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'Content-Type' => 'application/json;charset=utf-8'],
Utils::streamFor('{
"bucket": "dest-bucket",
"fileSize": 3267,
"object": "dest.jpg",
"status": "OK"}'),
new OperationInput('ProcessObject', 'POST', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'Content-Type' => 'application/json;charset=utf-8'],
),
);
$result = ObjectBasic::toProcessObject($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals(2, count($result->headers));
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertEquals('dest-bucket', $result->bucket);
$this->assertEquals('dest.jpg', $result->key);
$this->assertEquals(3267, $result->fileSize);
$this->assertEquals('OK', $result->processStatus);
}
public function testFromSealAppendObject()
{
// miss required field
try {
$request = new Models\SealAppendObjectRequest();
$input = ObjectBasic::fromSealAppendObject($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, bucket", (string)$e);
}
try {
$request = new Models\SealAppendObjectRequest('bucket-123');
$input = ObjectBasic::fromSealAppendObject($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, key", (string)$e);
}
try {
$request = new Models\SealAppendObjectRequest('bucket-123', 'key-123');
$input = ObjectBasic::fromSealAppendObject($request);
} catch (\InvalidArgumentException $e) {
$this->assertStringContainsString("missing required field, position", (string)$e);
}
$body = 'hi oss';
$request = new Models\SealAppendObjectRequest('bucket-123', 'key-123', 0);
$input = ObjectBasic::fromSealAppendObject($request);
$this->assertEquals('bucket-123', $input->getBucket());
$this->assertEquals('key-123', $input->getKey());
$this->assertEquals('0', $input->getParameters()['position']);
}
public function testToSealAppendObject()
{
// empty output
try {
$output = new OperationOutput();
$result = ObjectBasic::toSealAppendObject($output);
$this->assertTrue(false, 'should not here');
} catch (\Throwable $e) {
$this->assertStringContainsString('Call to a member function hasHeader() on null', $e->getMessage());
}
try {
$output = new OperationOutput(
'OK',
200,
['x-oss-request-id' => '123', 'ETag' => '"F2064A169EE92E9775EE5324D0B1****"', 'x-oss-sealed-time' => 'Wed, 07 May 2025 23:00:00 GMT'],
null,
new OperationInput('SealAppendObject', 'POST', []),
null,
new \GuzzleHttp\Psr7\Response(
200,
['x-oss-request-id' => '123', 'ETag' => '"F2064A169EE92E9775EE5324D0B1****"', 'x-oss-sealed-time' => 'Wed, 07 May 2025 23:00:00 GMT'],
),
);
$result = ObjectBasic::toSealAppendObject($output);
$this->assertEquals('OK', $result->status);
$this->assertEquals(200, $result->statusCode);
$this->assertEquals('123', $result->requestId);
$this->assertEquals('123', $result->headers['x-oss-request-id']);
$this->assertEquals('Wed, 07 May 2025 23:00:00 GMT', $result->sealedTime);
} catch (\Throwable $e) {
$this->assertTrue(false, "should not here");
}
}
private function cleanXml($xml)
{
return str_replace("\n", "", str_replace("\r", "", $xml));
}
}