Files
miniapi/vendor/alibabacloud/oss-v2/tests/IntegrationTests/ClientObjectMultipartTest.php
gaofeng 81ade70944 提交
2026-06-17 09:23:18 +08:00

434 lines
16 KiB
PHP

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