assertStringContainsString("missing required field, bucket", (string)$e); } // bucket only $request = new Models\PutBucketRequest('bucket-123'); $input = BucketBasic::fromPutBucket($request); $this->assertEquals('bucket-123', $input->getBucket()); $this->assertEquals('application/xml', $input->getHeaders()['content-type']); $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); // all settings $request = new Models\PutBucketRequest( 'bucket-123', Models\BucketACLType::PRIVATE, 'rg-123', new Models\CreateBucketConfiguration( Models\StorageClassType::IA, Models\DataRedundancyType::LRS ) ); $createXml = <<IALRS BBB; $input = BucketBasic::fromPutBucket($request); $this->assertEquals('bucket-123', $input->getBucket()); $this->assertEquals('application/xml', $input->getHeaders()['content-type']); $str = $input->getBody()->getContents(); $this->assertEquals(base64_encode(md5($str, true)), $input->getHeaders()['content-md5']); $this->assertEquals(Models\BucketACLType::PRIVATE, $input->getHeaders()['x-oss-acl']); $this->assertEquals('rg-123', $input->getHeaders()['x-oss-resource-group-id']); $this->assertEquals($createXml, $this->cleanXml($str)); $this->assertStringContainsString('', $str); $xml = \simplexml_load_string($str); $this->assertEquals(2, $xml->count()); $this->assertEquals('IA', $xml->StorageClass); $this->assertEquals('LRS', $xml->DataRedundancyType); // extend header & parameters $request = new Models\PutBucketRequest( 'bucket-123', null, null, null, [ 'headers' => ['x-oss-test' => 'test-123'], 'parameters' => ['x-oss-param' => 'param-123'] ] ); $input = BucketBasic::fromPutBucket($request); $this->assertEquals('bucket-123', $input->getBucket()); $this->assertEquals('application/xml', $input->getHeaders()['content-type']); $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); $this->assertEquals('test-123', $input->getHeaders()['x-oss-test']); $this->assertEquals('param-123', $input->getParameters()['x-oss-param']); } public function testToPutBucket() { // empty output $output = new OperationOutput(); $result = BucketBasic::toPutBucket($output); $this->assertEquals('', $result->status); $this->assertEquals(0, $result->statusCode); $this->assertEquals('', $result->requestId); $this->assertEquals(0, count($result->headers)); $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'test'] ); $result = BucketBasic::toPutBucket($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']); } public function testFromDeleteBucket() { // miss required field try { $request = new Models\DeleteBucketRequest(); $input = BucketBasic::fromDeleteBucket($request); } catch (\InvalidArgumentException $e) { $this->assertStringContainsString("missing required field, bucket", (string)$e); } // bucket only $request = new Models\DeleteBucketRequest('bucket-123'); $input = BucketBasic::fromDeleteBucket($request); $this->assertEquals('bucket-123', $input->getBucket()); $this->assertEquals('application/xml', $input->getHeaders()['content-type']); $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); // extend header & parameters $request = new Models\DeleteBucketRequest( 'bucket-123', [ 'headers' => ['x-oss-test' => 'test-123'], 'parameters' => ['x-oss-param' => 'param-123'] ] ); $input = BucketBasic::fromDeleteBucket($request); $this->assertEquals('bucket-123', $input->getBucket()); $this->assertEquals('application/xml', $input->getHeaders()['content-type']); $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); $this->assertEquals('test-123', $input->getHeaders()['x-oss-test']); $this->assertEquals('param-123', $input->getParameters()['x-oss-param']); } public function testToDeleteBucket() { // empty output $output = new OperationOutput(); $result = BucketBasic::toDeleteBucket($output); $this->assertEquals('', $result->status); $this->assertEquals(0, $result->statusCode); $this->assertEquals('', $result->requestId); $this->assertEquals(0, count($result->headers)); $output = new OperationOutput( 'No Content', 204, ['x-oss-request-id' => '123', 'content-type' => 'test'] ); $result = BucketBasic::toDeleteBucket($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']); } public function testFromGetBucketInfo() { // miss required field try { $request = new Models\GetBucketInfoRequest(); $input = BucketBasic::fromGetBucketInfo($request); } catch (\InvalidArgumentException $e) { $this->assertStringContainsString("missing required field, bucket", (string)$e); } // bucket only $request = new Models\GetBucketInfoRequest('bucket-123'); $input = BucketBasic::fromGetBucketInfo($request); $this->assertEquals('bucket-123', $input->getBucket()); $this->assertEquals('application/xml', $input->getHeaders()['content-type']); $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); // extend header & parameters $request = new Models\GetBucketInfoRequest( 'bucket-123', [ 'headers' => ['x-oss-test' => 'test-123'], 'parameters' => ['x-oss-param' => 'param-123'] ] ); $input = BucketBasic::fromGetBucketInfo($request); $this->assertEquals('bucket-123', $input->getBucket()); $this->assertEquals('application/xml', $input->getHeaders()['content-type']); $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); $this->assertEquals('test-123', $input->getHeaders()['x-oss-test']); $this->assertEquals('param-123', $input->getParameters()['x-oss-param']); } public function testToGetBucketInfo() { // empty output try { $output = new OperationOutput(); $result = BucketBasic::toGetBucketInfo($output); $this->assertTrue(false, 'should not here'); } catch (Exception\DeserializationExecption $e) { $this->assertStringContainsString('Not found tag ', $e); } // xml invalid try { $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'test'], Utils::streamFor('') ); $result = BucketBasic::toGetBucketInfo($output); $this->assertTrue(false, 'should not here'); } catch (Exception\DeserializationExecption $e) { $this->assertStringContainsString('Not found tag ', $e); } //empty xml $str = ' '; $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'test'], Utils::streamFor($str) ); $result = BucketBasic::toGetBucketInfo($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->assertNotEmpty($result->bucketInfo); $this->assertNull($result->bucketInfo->name); $this->assertNull($result->bucketInfo->accessMonitor); $this->assertNull($result->bucketInfo->location); $this->assertNull($result->bucketInfo->creationDate); $this->assertNull($result->bucketInfo->extranetEndpoint); $this->assertNull($result->bucketInfo->intranetEndpoint); $this->assertNull($result->bucketInfo->acl); $this->assertNull($result->bucketInfo->dataRedundancyType); $this->assertNull($result->bucketInfo->owner); $this->assertNull($result->bucketInfo->storageClass); $this->assertNull($result->bucketInfo->resourceGroupId); $this->assertNull($result->bucketInfo->sseRule); $this->assertNull($result->bucketInfo->versioning); $this->assertNull($result->bucketInfo->transferAcceleration); $this->assertNull($result->bucketInfo->crossRegionReplication); $this->assertNull($result->bucketInfo->comment); $this->assertNull($result->bucketInfo->blockPublicAccess); // xml $str = ' Enabled 2023-12-17T03:30:09.000Z oss-cn-hangzhou.aliyuncs.com oss-cn-hangzhou-internal.aliyuncs.com oss-cn-hangzhou Standard Disabled Disabled LRS oss-example rg-aek27tc******** username 27183473914**** private Suspended test KMS 123 examplebucket log/ true '; $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'test'], Utils::streamFor($str) ); $result = BucketBasic::toGetBucketInfo($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->assertNotEmpty($result->bucketInfo); $datetimeUtc = new \DateTime(); $datetimeUtc->setTimestamp(1702783809); $this->assertEquals('oss-example', $result->bucketInfo->name); $this->assertEquals('Enabled', $result->bucketInfo->accessMonitor); $this->assertEquals('oss-cn-hangzhou', $result->bucketInfo->location); $this->assertEquals($datetimeUtc, $result->bucketInfo->creationDate); $this->assertEquals('oss-cn-hangzhou.aliyuncs.com', $result->bucketInfo->extranetEndpoint); $this->assertEquals('oss-cn-hangzhou-internal.aliyuncs.com', $result->bucketInfo->intranetEndpoint); $this->assertEquals('private', $result->bucketInfo->acl); $this->assertEquals('LRS', $result->bucketInfo->dataRedundancyType); $this->assertEquals('27183473914****', $result->bucketInfo->owner->id); $this->assertEquals('username', $result->bucketInfo->owner->displayName); $this->assertEquals('Standard', $result->bucketInfo->storageClass); $this->assertEquals('rg-aek27tc********', $result->bucketInfo->resourceGroupId); $this->assertEquals('KMS', $result->bucketInfo->sseRule->sseAlgorithm); $this->assertEquals('123', $result->bucketInfo->sseRule->kmsMasterKeyId); $this->assertNull($result->bucketInfo->sseRule->kmsDataEncryption); $this->assertEquals('Suspended', $result->bucketInfo->versioning); $this->assertEquals('Disabled', $result->bucketInfo->transferAcceleration); $this->assertEquals('Disabled', $result->bucketInfo->crossRegionReplication); $this->assertEquals('test', $result->bucketInfo->comment); $this->assertEquals('examplebucket', $result->bucketInfo->bucketPolicy->logBucket); $this->assertEquals('log/', $result->bucketInfo->bucketPolicy->logPrefix); $this->assertEquals(true, $result->bucketInfo->blockPublicAccess); // xml $str = ' / / '; $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'test'], Utils::streamFor($str) ); $result = BucketBasic::toGetBucketInfo($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->assertNotEmpty($result->bucketInfo); $this->assertEquals('', $result->bucketInfo->name); $this->assertEquals('', $result->bucketInfo->accessMonitor); $this->assertEquals('', $result->bucketInfo->location); } public function testFromGetBucketLocation() { // miss required field try { $request = new Models\GetBucketLocationRequest(); $input = BucketBasic::fromGetBucketLocation($request); } catch (\InvalidArgumentException $e) { $this->assertStringContainsString("missing required field, bucket", (string)$e); } // bucket only $request = new Models\GetBucketLocationRequest('bucket-123'); $input = BucketBasic::fromGetBucketLocation($request); $this->assertEquals('bucket-123', $input->getBucket()); $this->assertEquals('application/xml', $input->getHeaders()['content-type']); $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); // extend header & parameters $request = new Models\GetBucketLocationRequest( 'bucket-123', [ 'headers' => ['x-oss-test' => 'test-123'], 'parameters' => ['x-oss-param' => 'param-123'] ] ); $input = BucketBasic::fromGetBucketLocation($request); $this->assertEquals('bucket-123', $input->getBucket()); $this->assertEquals('application/xml', $input->getHeaders()['content-type']); $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); $this->assertEquals('test-123', $input->getHeaders()['x-oss-test']); $this->assertEquals('param-123', $input->getParameters()['x-oss-param']); } public function testToGetBucketLocation() { // empty output try { $output = new OperationOutput(); $result = BucketBasic::toGetBucketLocation($output); $this->assertTrue(false, 'should not here'); } catch (Exception\DeserializationExecption $e) { $this->assertStringContainsString('Not found tag ', $e); } //empty xml $str = ' '; $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'test'], Utils::streamFor($str) ); $result = BucketBasic::toGetBucketLocation($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('', $result->location); // xml $str = ' oss-cn-hangzhou'; $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'test'], Utils::streamFor($str) ); $result = BucketBasic::toGetBucketLocation($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('oss-cn-hangzhou', $result->location); } public function testFromGetBucketStat() { // miss required field try { $request = new Models\GetBucketStatRequest(); $input = BucketBasic::fromGetBucketStat($request); } catch (\InvalidArgumentException $e) { $this->assertStringContainsString("missing required field, bucket", (string)$e); } // bucket only $request = new Models\GetBucketStatRequest('bucket-123'); $input = BucketBasic::fromGetBucketStat($request); $this->assertEquals('bucket-123', $input->getBucket()); $this->assertEquals('application/xml', $input->getHeaders()['content-type']); $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); // extend header & parameters $request = new Models\GetBucketStatRequest( 'bucket-123', [ 'headers' => ['x-oss-test' => 'test-123'], 'parameters' => ['x-oss-param' => 'param-123'] ] ); $input = BucketBasic::fromGetBucketStat($request); $this->assertEquals('bucket-123', $input->getBucket()); $this->assertEquals('application/xml', $input->getHeaders()['content-type']); $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); $this->assertEquals('test-123', $input->getHeaders()['x-oss-test']); $this->assertEquals('param-123', $input->getParameters()['x-oss-param']); } public function testToGetBucketStat() { // empty output try { $output = new OperationOutput(); $result = BucketBasic::toGetBucketStat($output); $this->assertTrue(false, 'should not here'); } catch (Exception\DeserializationExecption $e) { $this->assertStringContainsString('Not found tag ', $e); } //empty xml $str = ' '; $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'test'], Utils::streamFor($str) ); $result = BucketBasic::toGetBucketStat($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->storage); $this->assertNull($result->objectCount); $this->assertNull($result->multipartUploadCount); $this->assertNull($result->liveChannelCount); $this->assertNull($result->lastModifiedTime); $this->assertNull($result->standardStorage); $this->assertNull($result->standardObjectCount); $this->assertNull($result->infrequentAccessStorage); $this->assertNull($result->infrequentAccessRealStorage); $this->assertNull($result->infrequentAccessObjectCount); $this->assertNull($result->archiveStorage); $this->assertNull($result->archiveRealStorage); $this->assertNull($result->archiveObjectCount); $this->assertNull($result->coldArchiveStorage); $this->assertNull($result->coldArchiveRealStorage); $this->assertNull($result->coldArchiveObjectCount); $this->assertNull($result->deepColdArchiveStorage); $this->assertNull($result->deepColdArchiveRealStorage); $this->assertNull($result->deepColdArchiveObjectCount); $this->assertNull($result->deleteMarkerCount); // xml $str = ' 1600 230 40 4 1643341269 430 66 2359296 360 54 2949120 450 74 2359296 360 36 235929 30 361 1361 '; $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'test'], Utils::streamFor($str) ); $result = BucketBasic::toGetBucketStat($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(1600, $result->storage); $this->assertEquals(230, $result->objectCount); $this->assertEquals(40, $result->multipartUploadCount); $this->assertEquals(4, $result->liveChannelCount); $this->assertEquals(1643341269, $result->lastModifiedTime); $this->assertEquals(430, $result->standardStorage); $this->assertEquals(66, $result->standardObjectCount); $this->assertEquals(2359296, $result->infrequentAccessStorage); $this->assertEquals(360, $result->infrequentAccessRealStorage); $this->assertEquals(54, $result->infrequentAccessObjectCount); $this->assertEquals(2949120, $result->archiveStorage); $this->assertEquals(450, $result->archiveRealStorage); $this->assertEquals(74, $result->archiveObjectCount); $this->assertEquals(2359296, $result->coldArchiveStorage); $this->assertEquals(360, $result->coldArchiveRealStorage); $this->assertEquals(36, $result->coldArchiveObjectCount); $this->assertEquals(235929, $result->deepColdArchiveStorage); $this->assertEquals(30, $result->deepColdArchiveRealStorage); $this->assertEquals(361, $result->deepColdArchiveObjectCount); $this->assertEquals(1361, $result->deleteMarkerCount); // xml $str = ' '; $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'test'], Utils::streamFor($str) ); $result = BucketBasic::toGetBucketStat($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(0, $result->storage); $this->assertEquals(0, $result->objectCount); $this->assertEquals(0, $result->multipartUploadCount); $this->assertEquals(0, $result->liveChannelCount); $this->assertEquals(0, $result->lastModifiedTime); $this->assertEquals(0, $result->standardStorage); $this->assertEquals(0, $result->standardObjectCount); $this->assertEquals(0, $result->infrequentAccessStorage); $this->assertEquals(0, $result->infrequentAccessRealStorage); $this->assertEquals(0, $result->infrequentAccessObjectCount); $this->assertEquals(0, $result->archiveStorage); $this->assertEquals(0, $result->archiveRealStorage); $this->assertEquals(0, $result->archiveObjectCount); $this->assertEquals(0, $result->coldArchiveStorage); $this->assertEquals(0, $result->coldArchiveRealStorage); $this->assertEquals(0, $result->coldArchiveObjectCount); $this->assertEquals(0, $result->deepColdArchiveStorage); $this->assertEquals(0, $result->deepColdArchiveRealStorage); $this->assertEquals(0, $result->deepColdArchiveObjectCount); $this->assertEquals(0, $result->deleteMarkerCount); } public function testFromGetBucketVersioning() { // miss required field try { $request = new Models\GetBucketVersioningRequest(); $input = BucketBasic::fromGetBucketVersioning($request); } catch (\InvalidArgumentException $e) { $this->assertStringContainsString("missing required field, bucket", (string)$e); } // bucket only $request = new Models\GetBucketVersioningRequest('bucket-123'); $input = BucketBasic::fromGetBucketVersioning($request); $this->assertEquals('bucket-123', $input->getBucket()); $this->assertEquals('application/xml', $input->getHeaders()['content-type']); $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); // extend header & parameters $request = new Models\GetBucketVersioningRequest( 'bucket-123', [ 'headers' => ['x-oss-test' => 'test-123'], 'parameters' => ['x-oss-param' => 'param-123'] ] ); $input = BucketBasic::fromGetBucketVersioning($request); $this->assertEquals('bucket-123', $input->getBucket()); $this->assertEquals('application/xml', $input->getHeaders()['content-type']); $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); $this->assertEquals('test-123', $input->getHeaders()['x-oss-test']); $this->assertEquals('param-123', $input->getParameters()['x-oss-param']); } public function testToGetBucketVersioning() { // empty output try { $output = new OperationOutput(); $result = BucketBasic::toGetBucketVersioning($output); $this->assertTrue(false, 'should not here'); } catch (Exception\DeserializationExecption $e) { $this->assertStringContainsString('Not found tag ', $e); } //empty xml $str = ' '; $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'test'], Utils::streamFor($str) ); $result = BucketBasic::toGetBucketVersioning($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->assertNotNull($result->versioningConfiguration); $this->assertNull($result->versioningConfiguration->status); // xml $str = ' Enabled '; $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'test'], Utils::streamFor($str) ); $result = BucketBasic::toGetBucketVersioning($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(Models\BucketVersioningStatusType::ENABLED, $result->versioningConfiguration->status); // xml $str = ' '; $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'test'], Utils::streamFor($str) ); $result = BucketBasic::toGetBucketVersioning($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('', $result->versioningConfiguration->status); } public function testFromPutBucketVersioning() { // miss required field try { $request = new Models\PutBucketVersioningRequest(); $input = BucketBasic::fromPutBucketVersioning($request); } catch (\InvalidArgumentException $e) { $this->assertStringContainsString("missing required field, bucket", (string)$e); } // bucket only $request = new Models\PutBucketVersioningRequest('bucket-123'); $input = BucketBasic::fromPutBucketVersioning($request); $this->assertEquals('bucket-123', $input->getBucket()); $this->assertEquals('application/xml', $input->getHeaders()['content-type']); $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); // all settings $request = new Models\PutBucketVersioningRequest( 'bucket-123', new Models\VersioningConfiguration('Enabled'), ); $input = BucketBasic::fromPutBucketVersioning($request); $this->assertEquals('bucket-123', $input->getBucket()); $str = $input->getBody()->getContents(); $this->assertEquals('application/xml', $input->getHeaders()['content-type']); $this->assertEquals(base64_encode(md5($str, true)), $input->getHeaders()['content-md5']); $createXml = <<Enabled BBB; $this->assertEquals($createXml, $this->cleanXml($str)); $this->assertStringContainsString('', $str); $xml = \simplexml_load_string($str); $this->assertEquals(1, $xml->count()); $this->assertEquals('Enabled', $xml->Status); // extend header & parameters $request = new Models\PutBucketVersioningRequest( 'bucket-123', null, [ 'headers' => ['x-oss-test' => 'test-123'], 'parameters' => ['x-oss-param' => 'param-123'] ] ); $input = BucketBasic::fromPutBucketVersioning($request); $this->assertEquals('bucket-123', $input->getBucket()); $this->assertEquals('application/xml', $input->getHeaders()['content-type']); $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); $this->assertEquals('test-123', $input->getHeaders()['x-oss-test']); $this->assertEquals('param-123', $input->getParameters()['x-oss-param']); } public function testToPutBucketVersioning() { // empty output $output = new OperationOutput(); $result = BucketBasic::toPutBucketVersioning($output); $this->assertEquals('', $result->status); $this->assertEquals(0, $result->statusCode); $this->assertEquals('', $result->requestId); $this->assertEquals(0, count($result->headers)); $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'test'] ); $result = BucketBasic::toPutBucketVersioning($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']); } public function testFromPutBucketAcl() { // miss required field try { $request = new Models\PutBucketAclRequest(); $input = BucketBasic::fromPutBucketAcl($request); } catch (\InvalidArgumentException $e) { $this->assertStringContainsString("missing required field, bucket", (string)$e); } // bucket only try { $request = new Models\PutBucketAclRequest('bucket-123'); $input = BucketBasic::fromPutBucketAcl($request); } catch (\InvalidArgumentException $e) { $this->assertStringContainsString("missing required field, acl", (string)$e); } // all settings $request = new Models\PutBucketAclRequest( 'bucket-123', Models\BucketACLType::PRIVATE, ); $input = BucketBasic::fromPutBucketAcl($request); $this->assertEquals('bucket-123', $input->getBucket()); $this->assertEquals('application/xml', $input->getHeaders()['content-type']); $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); $this->assertEquals(Models\BucketACLType::PRIVATE, $input->getHeaders()['x-oss-acl']); // extend header & parameters $request = new Models\PutBucketAclRequest( 'bucket-123', Models\BucketACLType::PUBLIC_READ, [ 'headers' => ['x-oss-test' => 'test-123'], 'parameters' => ['x-oss-param' => 'param-123'] ] ); $input = BucketBasic::fromPutBucketAcl($request); $this->assertEquals('bucket-123', $input->getBucket()); $this->assertEquals('application/xml', $input->getHeaders()['content-type']); $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); $this->assertEquals('test-123', $input->getHeaders()['x-oss-test']); $this->assertEquals('param-123', $input->getParameters()['x-oss-param']); $this->assertEquals(Models\BucketACLType::PUBLIC_READ, $input->getHeaders()['x-oss-acl']); } public function testToPutBucketAcl() { // empty output $output = new OperationOutput(); $result = BucketBasic::toPutBucketAcl($output); $this->assertEquals('', $result->status); $this->assertEquals(0, $result->statusCode); $this->assertEquals('', $result->requestId); $this->assertEquals(0, count($result->headers)); $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'test'] ); $result = BucketBasic::toPutBucketAcl($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']); } public function testFromGetBucketAcl() { // miss required field try { $request = new Models\GetBucketAclRequest(); $input = BucketBasic::fromGetBucketAcl($request); } catch (\InvalidArgumentException $e) { $this->assertStringContainsString("missing required field, bucket", (string)$e); } // bucket only $request = new Models\GetBucketAclRequest('bucket-123'); $input = BucketBasic::fromGetBucketAcl($request); $this->assertEquals('bucket-123', $input->getBucket()); $this->assertEquals('application/xml', $input->getHeaders()['content-type']); $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); // extend header & parameters $request = new Models\GetBucketAclRequest( 'bucket-123', [ 'headers' => ['x-oss-test' => 'test-123'], 'parameters' => ['x-oss-param' => 'param-123'] ] ); $input = BucketBasic::fromGetBucketAcl($request); $this->assertEquals('bucket-123', $input->getBucket()); $this->assertEquals('application/xml', $input->getHeaders()['content-type']); $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); $this->assertEquals('test-123', $input->getHeaders()['x-oss-test']); $this->assertEquals('param-123', $input->getParameters()['x-oss-param']); } public function testToGetBucketAcl() { // empty output try { $output = new OperationOutput(); $result = BucketBasic::toGetBucketAcl($output); $this->assertTrue(false, 'should not here'); } catch (Exception\DeserializationExecption $e) { $this->assertStringContainsString('Not found tag ', $e); } //empty xml $str = ' '; $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'test'], Utils::streamFor($str) ); $result = BucketBasic::toGetBucketAcl($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->owner); $this->assertNull($result->accessControlList); // xml $str = ' 0022012**** user_example public-read '; $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'test'], Utils::streamFor($str) ); $result = BucketBasic::toGetBucketAcl($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('0022012****', $result->owner->id); $this->assertEquals('user_example', $result->owner->displayName); $this->assertEquals(Models\BucketACLType::PUBLIC_READ, $result->accessControlList->grant); // xml $str = ' '; $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'test'], Utils::streamFor($str) ); $result = BucketBasic::toGetBucketAcl($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->owner->id); $this->assertNull($result->owner->displayName); $this->assertNull($result->accessControlList->grant); } public function testFromListObjects() { // miss required field try { $request = new Models\ListObjectsRequest(); $input = BucketBasic::fromListObjects($request); } catch (\InvalidArgumentException $e) { $this->assertStringContainsString("missing required field, bucket", (string)$e); } // bucket only $request = new Models\ListObjectsRequest('bucket-123'); $input = BucketBasic::fromListObjects($request); $this->assertEquals('bucket-123', $input->getBucket()); $this->assertEquals('application/octet-stream', $input->getHeaders()['content-type']); $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); // all settings $request = new Models\ListObjectsRequest( 'bucket-123', 'deli-123', 'url', 'marker-123', 123, 'prefix-123', 'requester' ); $input = BucketBasic::fromListObjects($request); $this->assertEquals('bucket-123', $input->getBucket()); $this->assertEquals('application/octet-stream', $input->getHeaders()['content-type']); $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); $this->assertEquals('deli-123', $input->getParameters()['delimiter']); $this->assertEquals('marker-123', $input->getParameters()['marker']); $this->assertEquals('url', $input->getParameters()['encoding-type']); $this->assertEquals('123', $input->getParameters()['max-keys']); $this->assertEquals('prefix-123', $input->getParameters()['prefix']); $this->assertEquals('requester', $input->getHeaders()['x-oss-request-payer']); // extend header & parameters $request = new Models\ListObjectsRequest( 'bucket-123', null, null, null, null, null, null, [ 'headers' => ['x-oss-test' => 'test-123'], 'parameters' => ['x-oss-param' => 'param-123'] ] ); $input = BucketBasic::fromListObjects($request); $this->assertEquals('bucket-123', $input->getBucket()); $this->assertEquals('application/octet-stream', $input->getHeaders()['content-type']); $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); $this->assertEquals('test-123', $input->getHeaders()['x-oss-test']); $this->assertEquals('param-123', $input->getParameters()['x-oss-param']); } public function testToListObjects() { // empty output try { $output = new OperationOutput(); $result = BucketBasic::toListObjects($output); $this->assertTrue(false, 'should not here'); } catch (Exception\DeserializationExecption $e) { $this->assertStringContainsString('Not found tag ', $e); } //empty xml $str = ' '; $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'test'], Utils::streamFor($str) ); $result = BucketBasic::toListObjects($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->name); $this->assertNull($result->prefix); $this->assertNull($result->marker); $this->assertNull($result->maxKeys); $this->assertNull($result->delimiter); $this->assertNull($result->isTruncated); $this->assertNull($result->encodingType); $this->assertNull($result->nextMarker); $this->assertNull($result->contents); $this->assertNull($result->commonPrefixes); // xml $str = ' examplebucket fun/ fu 2 / true fun/test-1.jpg fun/test.jpg 2023-12-17T03:30:09.000Z "5B3C1A2E053D763E1B002CC607C5A0FE1****" Normal 344606 Standard 0022012**** user_example ongoing-request="true" fun/test-1.jpg 2023-12-17T03:30:19.000Z "5B3C1A2E053D763E1B002CC607C5A0FE1****" Normal 344605 IA fun/movie/ '; $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'test'], Utils::streamFor($str) ); $datetimeUtc = new \DateTime(); $datetimeUtc->setTimestamp(1702783809); $datetimeUtc1 = new \DateTime(); $datetimeUtc1->setTimestamp(1702783819); $result = BucketBasic::toListObjects($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('examplebucket', $result->name); $this->assertEquals('fun/', $result->prefix); $this->assertEquals('fu', $result->marker); $this->assertEquals(2, $result->maxKeys); $this->assertEquals('/', $result->delimiter); $this->assertEquals(true, $result->isTruncated); $this->assertNull($result->encodingType); $this->assertEquals('fun/test-1.jpg', $result->nextMarker); $this->assertEquals(2, count($result->contents)); $this->assertEquals('fun/test.jpg', $result->contents[0]->key); $this->assertEquals($datetimeUtc, $result->contents[0]->lastModified); $this->assertEquals('"5B3C1A2E053D763E1B002CC607C5A0FE1****"', $result->contents[0]->etag); $this->assertEquals('Normal', $result->contents[0]->type); $this->assertEquals(344606, $result->contents[0]->size); $this->assertEquals('Standard', $result->contents[0]->storageClass); $this->assertEquals('0022012****', $result->contents[0]->owner->id); $this->assertEquals('user_example', $result->contents[0]->owner->displayName); $this->assertEquals('ongoing-request="true"', $result->contents[0]->restoreInfo); $this->assertEquals('fun/test-1.jpg', $result->contents[1]->key); $this->assertEquals($datetimeUtc1, $result->contents[1]->lastModified); $this->assertEquals('"5B3C1A2E053D763E1B002CC607C5A0FE1****"', $result->contents[1]->etag); $this->assertEquals('Normal', $result->contents[1]->type); $this->assertEquals(344605, $result->contents[1]->size); $this->assertEquals('IA', $result->contents[1]->storageClass); $this->assertNull($result->contents[1]->owner->id); $this->assertNull($result->contents[1]->owner->displayName); $this->assertEquals(1, count($result->commonPrefixes)); $this->assertEquals('fun/movie/', $result->commonPrefixes[0]->prefix); // encodingType $str = ' examplebucket fun%2F fun%2F 1 %2F false fun%2Ftest-1.jpg url fun%2Ftest.jpg 2023-12-17T03:30:09.000Z "5B3C1A2E053D763E1B002CC607C5A0FE1****" Normal 344606 Standard 2023-12-17T03:30:19.000Z fun%2Fmovie%2F '; $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'test'], Utils::streamFor($str) ); $result = BucketBasic::toListObjects($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('examplebucket', $result->name); $this->assertEquals('fun/', $result->prefix); $this->assertEquals('fun/', $result->marker); $this->assertEquals(1, $result->maxKeys); $this->assertEquals('/', $result->delimiter); $this->assertEquals(false, $result->isTruncated); $this->assertEquals('url', $result->encodingType); $this->assertEquals('fun/test-1.jpg', $result->nextMarker); $this->assertEquals(1, count($result->contents)); $this->assertEquals('fun/test.jpg', $result->contents[0]->key); $this->assertEquals('', $result->contents[0]->owner->id); $this->assertEquals('', $result->contents[0]->owner->displayName); $this->assertEquals($datetimeUtc1, $result->contents[0]->transitionTime); $this->assertEquals(1, count($result->commonPrefixes)); $this->assertEquals('fun/movie/', $result->commonPrefixes[0]->prefix); // xml $str = ' '; $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'test'], Utils::streamFor($str) ); $datetimeUtc = new \DateTime(); $datetimeUtc->setTimestamp(1702783809); $datetimeUtc1 = new \DateTime(); $datetimeUtc1->setTimestamp(1702783819); $result = BucketBasic::toListObjects($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('', $result->name); $this->assertEquals('', $result->prefix); $this->assertEquals('', $result->marker); $this->assertEquals(0, $result->maxKeys); $this->assertEquals('', $result->delimiter); $this->assertEquals(false, $result->isTruncated); $this->assertEquals('', $result->encodingType); $this->assertEquals('', $result->nextMarker); $this->assertEquals(1, count($result->contents)); $this->assertEquals('', $result->contents[0]->key); $this->assertNull($result->contents[0]->lastModified); $this->assertEquals('', $result->contents[0]->etag); $this->assertEquals('', $result->contents[0]->type); $this->assertEquals(0, $result->contents[0]->size); $this->assertEquals('', $result->contents[0]->storageClass); $this->assertEquals('', $result->contents[0]->owner->id); $this->assertEquals('', $result->contents[0]->owner->displayName); $this->assertEquals(2, count($result->commonPrefixes)); $this->assertEquals('', $result->commonPrefixes[0]->prefix); $this->assertEquals('', $result->commonPrefixes[1]->prefix); } public function testFromListObjectsV2() { // miss required field try { $request = new Models\ListObjectsV2Request(); $input = BucketBasic::fromListObjectsV2($request); } catch (\InvalidArgumentException $e) { $this->assertStringContainsString("missing required field, bucket", (string)$e); } // bucket only $request = new Models\ListObjectsV2Request('bucket-123'); $input = BucketBasic::fromListObjectsV2($request); $this->assertEquals('bucket-123', $input->getBucket()); $this->assertEquals('application/octet-stream', $input->getHeaders()['content-type']); $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); // all settings $request = new Models\ListObjectsV2Request( 'bucket-123', 'deli-123', 'url', 'start-after-123', 'token-123', 123, 'prefix-123', 'requester', true, ); $input = BucketBasic::fromListObjectsV2($request); $this->assertEquals('bucket-123', $input->getBucket()); $this->assertEquals('application/octet-stream', $input->getHeaders()['content-type']); $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); $this->assertEquals('2', $input->getParameters()['list-type']); $this->assertEquals('deli-123', $input->getParameters()['delimiter']); $this->assertEquals('url', $input->getParameters()['encoding-type']); $this->assertEquals('start-after-123', $input->getParameters()['start-after']); $this->assertEquals('token-123', $input->getParameters()['continuation-token']); $this->assertEquals('123', $input->getParameters()['max-keys']); $this->assertEquals('prefix-123', $input->getParameters()['prefix']); $this->assertEquals('requester', $input->getHeaders()['x-oss-request-payer']); $this->assertEquals('true', $input->getParameters()['fetch-owner']); // extend header & parameters $request = new Models\ListObjectsV2Request( 'bucket-123', null, null, null, null, null, null, null, null, [ 'headers' => ['x-oss-test' => 'test-123'], 'parameters' => ['x-oss-param' => 'param-123'] ] ); $input = BucketBasic::fromListObjectsV2($request); $this->assertEquals('bucket-123', $input->getBucket()); $this->assertEquals('application/octet-stream', $input->getHeaders()['content-type']); $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); $this->assertEquals('test-123', $input->getHeaders()['x-oss-test']); $this->assertEquals('param-123', $input->getParameters()['x-oss-param']); } public function testToListObjectsV2() { // empty output try { $output = new OperationOutput(); $result = BucketBasic::toListObjectsV2($output); $this->assertTrue(false, 'should not here'); } catch (Exception\DeserializationExecption $e) { $this->assertStringContainsString('Not found tag ', $e); } //empty xml $str = ' '; $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'test'], Utils::streamFor($str) ); $result = BucketBasic::toListObjectsV2($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->name); $this->assertNull($result->prefix); $this->assertNull($result->startAfter); $this->assertNull($result->continuationToken); $this->assertNull($result->maxKeys); $this->assertNull($result->delimiter); $this->assertNull($result->isTruncated); $this->assertNull($result->encodingType); $this->assertNull($result->nextContinuationToken); $this->assertNull($result->keyCount); $this->assertNull($result->contents); $this->assertNull($result->commonPrefixes); // xml $str = ' examplebucket fun/ fu AgJiYw-- 2 / true CgJiYw-- fun/test.jpg 2023-12-17T03:30:09.000Z "5B3C1A2E053D763E1B002CC607C5A0FE1****" Normal 344606 Standard 0022012**** user_example ongoing-request="true" fun/test-1.jpg 2023-12-17T03:30:19.000Z "5B3C1A2E053D763E1B002CC607C5A0FE1****" Normal 344605 IA fun/movie/ 3 '; $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'test'], Utils::streamFor($str) ); $datetimeUtc = new \DateTime(); $datetimeUtc->setTimestamp(1702783809); $datetimeUtc1 = new \DateTime(); $datetimeUtc1->setTimestamp(1702783819); $result = BucketBasic::toListObjectsV2($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('examplebucket', $result->name); $this->assertEquals('fun/', $result->prefix); $this->assertEquals('fu', $result->startAfter); $this->assertEquals('AgJiYw--', $result->continuationToken); $this->assertEquals(2, $result->maxKeys); $this->assertEquals('/', $result->delimiter); $this->assertEquals(true, $result->isTruncated); $this->assertNull($result->encodingType); $this->assertEquals('CgJiYw--', $result->nextContinuationToken); $this->assertEquals(3, $result->keyCount); $this->assertEquals(2, count($result->contents)); $this->assertEquals('fun/test.jpg', $result->contents[0]->key); $this->assertEquals($datetimeUtc, $result->contents[0]->lastModified); $this->assertEquals('"5B3C1A2E053D763E1B002CC607C5A0FE1****"', $result->contents[0]->etag); $this->assertEquals('Normal', $result->contents[0]->type); $this->assertEquals(344606, $result->contents[0]->size); $this->assertEquals('Standard', $result->contents[0]->storageClass); $this->assertEquals('0022012****', $result->contents[0]->owner->id); $this->assertEquals('user_example', $result->contents[0]->owner->displayName); $this->assertEquals('ongoing-request="true"', $result->contents[0]->restoreInfo); $this->assertEquals('fun/test-1.jpg', $result->contents[1]->key); $this->assertEquals($datetimeUtc1, $result->contents[1]->lastModified); $this->assertEquals('"5B3C1A2E053D763E1B002CC607C5A0FE1****"', $result->contents[1]->etag); $this->assertEquals('Normal', $result->contents[1]->type); $this->assertEquals(344605, $result->contents[1]->size); $this->assertEquals('IA', $result->contents[1]->storageClass); $this->assertNull($result->contents[1]->owner->id); $this->assertNull($result->contents[1]->owner->displayName); $this->assertEquals(1, count($result->commonPrefixes)); $this->assertEquals('fun/movie/', $result->commonPrefixes[0]->prefix); // encodingType $str = ' examplebucket fun%2F fun%2F fun%2F 1 %2F false fun%2Ftest-1.jpg url fun%2Ftest.jpg 2023-12-17T03:30:09.000Z "5B3C1A2E053D763E1B002CC607C5A0FE1****" Normal 344606 Standard 2023-12-17T03:30:19.000Z fun%2Fmovie%2F '; $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'test'], Utils::streamFor($str) ); $result = BucketBasic::toListObjectsV2($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('examplebucket', $result->name); $this->assertEquals('fun/', $result->prefix); $this->assertEquals('fun/', $result->startAfter); $this->assertEquals('fun/', $result->continuationToken); $this->assertEquals(1, $result->maxKeys); $this->assertEquals('/', $result->delimiter); $this->assertEquals(false, $result->isTruncated); $this->assertEquals('url', $result->encodingType); $this->assertEquals('fun/test-1.jpg', $result->nextContinuationToken); $this->assertEquals(1, count($result->contents)); $this->assertEquals('fun/test.jpg', $result->contents[0]->key); $this->assertEquals('', $result->contents[0]->owner->id); $this->assertEquals('', $result->contents[0]->owner->displayName); $this->assertEquals($datetimeUtc1, $result->contents[0]->transitionTime); $this->assertEquals(1, count($result->commonPrefixes)); $this->assertEquals('fun/movie/', $result->commonPrefixes[0]->prefix); // xml $str = ' '; $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'test'], Utils::streamFor($str) ); $datetimeUtc = new \DateTime(); $datetimeUtc->setTimestamp(1702783809); $datetimeUtc1 = new \DateTime(); $datetimeUtc1->setTimestamp(1702783819); $result = BucketBasic::toListObjectsV2($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('', $result->name); $this->assertEquals('', $result->prefix); $this->assertEquals('', $result->startAfter); $this->assertEquals('', $result->continuationToken); $this->assertEquals(0, $result->maxKeys); $this->assertEquals('', $result->delimiter); $this->assertEquals(false, $result->isTruncated); $this->assertEquals('', $result->encodingType); $this->assertEquals('', $result->nextContinuationToken); $this->assertEquals(0, $result->keyCount); $this->assertEquals(1, count($result->contents)); $this->assertEquals('', $result->contents[0]->key); $this->assertNull($result->contents[0]->lastModified); $this->assertEquals('', $result->contents[0]->etag); $this->assertEquals('', $result->contents[0]->type); $this->assertEquals(0, $result->contents[0]->size); $this->assertEquals('', $result->contents[0]->storageClass); $this->assertEquals('', $result->contents[0]->owner->id); $this->assertEquals('', $result->contents[0]->owner->displayName); $this->assertEquals(2, count($result->commonPrefixes)); $this->assertEquals('', $result->commonPrefixes[0]->prefix); $this->assertEquals('', $result->commonPrefixes[1]->prefix); } public function testFromListObjectVersions() { // miss required field try { $request = new Models\ListObjectVersionsRequest(); $input = BucketBasic::fromListObjectVersions($request); } catch (\InvalidArgumentException $e) { $this->assertStringContainsString("missing required field, bucket", (string)$e); } // bucket only $request = new Models\ListObjectVersionsRequest('bucket-123'); $input = BucketBasic::fromListObjectVersions($request); $this->assertEquals('bucket-123', $input->getBucket()); $this->assertEquals('application/octet-stream', $input->getHeaders()['content-type']); $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); // all settings $request = new Models\ListObjectVersionsRequest( 'bucket-123', 'deli-123', 'url', 'key-marker-123', 'version-id-marker-123', 123, 'prefix-123', 'requester' ); $input = BucketBasic::fromListObjectVersions($request); $this->assertEquals('bucket-123', $input->getBucket()); $this->assertEquals('application/octet-stream', $input->getHeaders()['content-type']); $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); $this->assertEquals('', $input->getParameters()['versions']); $this->assertEquals('deli-123', $input->getParameters()['delimiter']); $this->assertEquals('url', $input->getParameters()['encoding-type']); $this->assertEquals('key-marker-123', $input->getParameters()['key-marker']); $this->assertEquals('version-id-marker-123', $input->getParameters()['version-id-marker']); $this->assertEquals('123', $input->getParameters()['max-keys']); $this->assertEquals('prefix-123', $input->getParameters()['prefix']); $this->assertEquals('requester', $input->getHeaders()['x-oss-request-payer']); // extend header & parameters $request = new Models\ListObjectVersionsRequest( 'bucket-123', null, null, null, null, null, null, null, [ 'headers' => ['x-oss-test' => 'test-123'], 'parameters' => ['x-oss-param' => 'param-123'] ] ); $input = BucketBasic::fromListObjectVersions($request); $this->assertEquals('bucket-123', $input->getBucket()); $this->assertEquals('application/octet-stream', $input->getHeaders()['content-type']); $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); $this->assertEquals('test-123', $input->getHeaders()['x-oss-test']); $this->assertEquals('param-123', $input->getParameters()['x-oss-param']); } public function testToListObjectVersions() { // empty output try { $output = new OperationOutput(); $result = BucketBasic::toListObjectVersions($output); $this->assertTrue(false, 'should not here'); } catch (Exception\DeserializationExecption $e) { $this->assertStringContainsString('Not found tag ', $e); } //empty xml $str = ' '; $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'test'], Utils::streamFor($str) ); $result = BucketBasic::toListObjectVersions($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->name); $this->assertNull($result->prefix); $this->assertNull($result->keyMarker); $this->assertNull($result->versionIdMarker); $this->assertNull($result->maxKeys); $this->assertNull($result->delimiter); $this->assertNull($result->isTruncated); $this->assertNull($result->encodingType); $this->assertNull($result->nextKeyMarker); $this->assertNull($result->nextVersionIdMarker); $this->assertNull($result->versions); $this->assertNull($result->deleteMarkers); $this->assertNull($result->commonPrefixes); // xml $str = ' examplebucket fun/ fu AgJiYw-- 2 / true fu123 AgJiYw--123 fun/test.jpg id-123 true 2023-12-17T03:30:09.000Z "5B3C1A2E053D763E1B002CC607C5A0FE1****" Normal 344606 Standard 0022012**** user_example ongoing-request="true" example CAEQMxiBgICAof2D0BYiIDJhMGE3N2M1YTI1NDQzOGY5NTkyNTI3MGYyMzJm**** false 2023-12-17T03:30:19.000Z 1234512528586**** 12345125285864390 fun/test-1.jpg 2023-12-17T03:30:19.000Z "5B3C1A2E053D763E1B002CC607C5A0FE1****" Normal 344605 IA fun/movie/ '; $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'test'], Utils::streamFor($str) ); $datetimeUtc = new \DateTime(); $datetimeUtc->setTimestamp(1702783809); $datetimeUtc1 = new \DateTime(); $datetimeUtc1->setTimestamp(1702783819); $result = BucketBasic::toListObjectVersions($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('examplebucket', $result->name); $this->assertEquals('fun/', $result->prefix); $this->assertEquals('fu', $result->keyMarker); $this->assertEquals('AgJiYw--', $result->versionIdMarker); $this->assertEquals(2, $result->maxKeys); $this->assertEquals('/', $result->delimiter); $this->assertEquals(true, $result->isTruncated); $this->assertNull($result->encodingType); $this->assertEquals('fu123', $result->nextKeyMarker); $this->assertEquals('AgJiYw--123', $result->nextVersionIdMarker); $this->assertEquals(2, count($result->versions)); $this->assertEquals('fun/test.jpg', $result->versions[0]->key); $this->assertEquals('id-123', $result->versions[0]->versionId); $this->assertEquals(true, $result->versions[0]->isLatest); $this->assertEquals($datetimeUtc, $result->versions[0]->lastModified); $this->assertEquals('"5B3C1A2E053D763E1B002CC607C5A0FE1****"', $result->versions[0]->etag); $this->assertEquals('Normal', $result->versions[0]->type); $this->assertEquals(344606, $result->versions[0]->size); $this->assertEquals('Standard', $result->versions[0]->storageClass); $this->assertEquals('0022012****', $result->versions[0]->owner->id); $this->assertEquals('user_example', $result->versions[0]->owner->displayName); $this->assertEquals('ongoing-request="true"', $result->versions[0]->restoreInfo); $this->assertEquals('fun/test-1.jpg', $result->versions[1]->key); $this->assertNull($result->versions[1]->versionId); $this->assertNull($result->versions[1]->isLatest); $this->assertEquals($datetimeUtc1, $result->versions[1]->lastModified); $this->assertEquals('"5B3C1A2E053D763E1B002CC607C5A0FE1****"', $result->versions[1]->etag); $this->assertEquals('Normal', $result->versions[1]->type); $this->assertEquals(344605, $result->versions[1]->size); $this->assertEquals('IA', $result->versions[1]->storageClass); $this->assertNull($result->versions[1]->owner->id); $this->assertNull($result->versions[1]->owner->displayName); $this->assertEquals(1, count($result->deleteMarkers)); $this->assertEquals('example', $result->deleteMarkers[0]->key); $this->assertEquals('CAEQMxiBgICAof2D0BYiIDJhMGE3N2M1YTI1NDQzOGY5NTkyNTI3MGYyMzJm****', $result->deleteMarkers[0]->versionId); $this->assertEquals(false, $result->deleteMarkers[0]->isLatest); $this->assertEquals($datetimeUtc1, $result->deleteMarkers[0]->lastModified); $this->assertEquals('1234512528586****', $result->deleteMarkers[0]->owner->id); $this->assertEquals('12345125285864390', $result->deleteMarkers[0]->owner->displayName); $this->assertEquals(1, count($result->commonPrefixes)); $this->assertEquals('fun/movie/', $result->commonPrefixes[0]->prefix); // encodingType $str = ' examplebucket fun%2F fun%2F AgJiYw-- 1 %2F false fun%2Ftest-1.jpg AgJiYw--123 url fun%2Ftest.jpg 2023-12-17T03:30:09.000Z "5B3C1A2E053D763E1B002CC607C5A0FE1****" Normal 344606 Standard 2023-12-17T03:30:19.000Z example%2F123 CAEQMxiBgICAof2D0BYiIDJhMGE3N2M1YTI1NDQzOGY5NTkyNTI3MGYyMzJm**** false 2023-12-17T03:30:19.000Z 1234512528586**** 12345125285864390 fun%2Fmovie%2F '; $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'test'], Utils::streamFor($str) ); $result = BucketBasic::toListObjectVersions($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('examplebucket', $result->name); $this->assertEquals('fun/', $result->prefix); $this->assertEquals('fun/', $result->keyMarker); $this->assertEquals('AgJiYw--', $result->versionIdMarker); $this->assertEquals(1, $result->maxKeys); $this->assertEquals('/', $result->delimiter); $this->assertEquals(false, $result->isTruncated); $this->assertEquals('url', $result->encodingType); $this->assertEquals('fun/test-1.jpg', $result->nextKeyMarker); $this->assertEquals('AgJiYw--123', $result->nextVersionIdMarker); $this->assertEquals(1, count($result->versions)); $this->assertEquals('fun/test.jpg', $result->versions[0]->key); $this->assertEquals('', $result->versions[0]->owner->id); $this->assertEquals('', $result->versions[0]->owner->displayName); $this->assertEquals(1, count($result->deleteMarkers)); $this->assertEquals('example/123', $result->deleteMarkers[0]->key); $this->assertEquals(1, count($result->commonPrefixes)); $this->assertEquals('fun/movie/', $result->commonPrefixes[0]->prefix); // xml $str = ' '; $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'test'], Utils::streamFor($str) ); $datetimeUtc = new \DateTime(); $datetimeUtc->setTimestamp(1702783809); $datetimeUtc1 = new \DateTime(); $datetimeUtc1->setTimestamp(1702783819); $result = BucketBasic::toListObjectVersions($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('', $result->name); $this->assertEquals('', $result->prefix); $this->assertEquals('', $result->keyMarker); $this->assertEquals('', $result->versionIdMarker); $this->assertEquals(0, $result->maxKeys); $this->assertEquals('', $result->delimiter); $this->assertEquals(false, $result->isTruncated); $this->assertEquals('', $result->encodingType); $this->assertEquals('', $result->nextKeyMarker); $this->assertEquals('', $result->nextVersionIdMarker); $this->assertEquals(1, count($result->versions)); $this->assertEquals('', $result->versions[0]->key); $this->assertEquals('', $result->versions[0]->versionId); $this->assertEquals(false, $result->versions[0]->isLatest); $this->assertNull($result->versions[0]->lastModified); $this->assertEquals('', $result->versions[0]->etag); $this->assertEquals('', $result->versions[0]->type); $this->assertEquals(0, $result->versions[0]->size); $this->assertEquals('', $result->versions[0]->storageClass); $this->assertEquals('', $result->versions[0]->owner->id); $this->assertEquals('', $result->versions[0]->owner->displayName); $this->assertEquals(2, count($result->deleteMarkers)); $this->assertEquals('', $result->deleteMarkers[0]->key); $this->assertEquals('', $result->deleteMarkers[0]->versionId); $this->assertEquals(false, $result->deleteMarkers[0]->isLatest); $this->assertNull($result->deleteMarkers[0]->lastModified); $this->assertEquals('', $result->deleteMarkers[0]->owner->id); $this->assertEquals('', $result->deleteMarkers[0]->owner->displayName); $this->assertEquals('', $result->deleteMarkers[1]->key); $this->assertEquals('', $result->deleteMarkers[1]->versionId); $this->assertEquals(false, $result->deleteMarkers[1]->isLatest); $this->assertEquals(2, count($result->commonPrefixes)); $this->assertEquals('', $result->commonPrefixes[0]->prefix); $this->assertEquals('', $result->commonPrefixes[1]->prefix); } public function testFromListBuckets() { // miss required field try { $request = new Models\ListBucketsRequest(); $input = BucketBasic::fromListBuckets($request); } catch (\InvalidArgumentException $e) { $this->assertTrue(false, 'should not here'); } $request = new Models\ListBucketsRequest('/', '', 10,'rg-aek27tc********'); $input = BucketBasic::fromListBuckets($request); $this->assertEquals('rg-aek27tc********', $input->getHeaders()['x-oss-resource-group-id']); $this->assertEquals('', $input->getParameters()['marker']); $this->assertEquals('/', $input->getParameters()['prefix']); $this->assertEquals('10', $input->getParameters()['max-keys']); $request = new Models\ListBucketsRequest('/', '', 10,'rg-aek27tc********','k','v'); $input = BucketBasic::fromListBuckets($request); $this->assertEquals('rg-aek27tc********', $input->getHeaders()['x-oss-resource-group-id']); $this->assertEquals('', $input->getParameters()['marker']); $this->assertEquals('/', $input->getParameters()['prefix']); $this->assertEquals('10', $input->getParameters()['max-keys']); $this->assertEquals('k', $input->getParameters()['tag-key']); $this->assertEquals('v', $input->getParameters()['tag-value']); $request = new Models\ListBucketsRequest('/', '', 10,'rg-aek27tc********',null,null,"\"k\":\"v\""); $input = BucketBasic::fromListBuckets($request); $this->assertEquals('rg-aek27tc********', $input->getHeaders()['x-oss-resource-group-id']); $this->assertEquals('', $input->getParameters()['marker']); $this->assertEquals('/', $input->getParameters()['prefix']); $this->assertEquals('10', $input->getParameters()['max-keys']); $this->assertEquals("\"k\":\"v\"", $input->getParameters()['tagging']); } public function testToListBuckets() { // empty output try { $output = new OperationOutput(); $result = BucketBasic::toListBuckets($output); $this->assertTrue(false, 'should not here'); } catch (DeserializationExecption $e) { $this->assertStringContainsString('Not found tag ', $e); } //empty xml $str = ' '; $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'test'], Utils::streamFor($str) ); $result = BucketBasic::toListBuckets($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->prefix); $this->assertNull($result->marker); $this->assertNull($result->maxKeys); $this->assertNull($result->isTruncated); $this->assertNull($result->nextMarker); $this->assertNull($result->owner); $this->assertNull($result->buckets); // xml $str = ' 51264 51264 2014-02-17T18:12:43.000Z oss-cn-shanghai.aliyuncs.com oss-cn-shanghai-internal.aliyuncs.com oss-cn-shanghai app-base-oss cn-shanghai Standard 2014-02-25T11:21:04.000Z oss-cn-hangzhou.aliyuncs.com oss-cn-hangzhou-internal.aliyuncs.com oss-cn-hangzhou mybucket cn-hangzhou IA '; $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'application/xml'], Utils::streamFor($str) ); $result = BucketBasic::toListBuckets($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('51264', $result->owner->displayName); $this->assertEquals('51264', $result->owner->id); $this->assertEquals(2, count($result->buckets)); $this->assertEquals(\DateTime::createFromFormat( 'Y-m-d\TH:i:s.000\Z', '2014-02-17T18:12:43.000Z', new \DateTimeZone('UTC') ), $result->buckets[0]->creationDate); $this->assertEquals('oss-cn-shanghai.aliyuncs.com', $result->buckets[0]->extranetEndpoint); $this->assertEquals('oss-cn-shanghai-internal.aliyuncs.com', $result->buckets[0]->intranetEndpoint); $this->assertEquals('app-base-oss', $result->buckets[0]->name); $this->assertEquals('cn-shanghai', $result->buckets[0]->region); $this->assertEquals(Models\StorageClassType::STANDARD, $result->buckets[0]->storageClass); $this->assertEquals('oss-cn-shanghai', $result->buckets[0]->location); $this->assertEquals(\DateTime::createFromFormat( 'Y-m-d\TH:i:s.000\Z', '2014-02-25T11:21:04.000Z', new \DateTimeZone('UTC') ), $result->buckets[1]->creationDate); $this->assertEquals('oss-cn-hangzhou.aliyuncs.com', $result->buckets[1]->extranetEndpoint); $this->assertEquals('oss-cn-hangzhou-internal.aliyuncs.com', $result->buckets[1]->intranetEndpoint); $this->assertEquals('mybucket', $result->buckets[1]->name); $this->assertEquals('cn-hangzhou', $result->buckets[1]->region); $this->assertEquals(Models\StorageClassType::IA, $result->buckets[1]->storageClass); $this->assertEquals('oss-cn-hangzhou', $result->buckets[1]->location); $str = ' my mybucket 10 true mybucket10 ut_test_put_bucket ut_test_put_bucket 2014-05-14T11:18:32.000Z oss-cn-hangzhou.aliyuncs.com oss-cn-hangzhou-internal.aliyuncs.com oss-cn-hangzhou mybucket01 cn-hangzhou Standard rg-aek27tc******** '; $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'application/xml'], Utils::streamFor($str) ); $result = BucketBasic::toListBuckets($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('ut_test_put_bucket', $result->owner->displayName); $this->assertEquals('ut_test_put_bucket', $result->owner->id); $this->assertEquals('my', $result->prefix); $this->assertEquals('mybucket', $result->marker); $this->assertEquals(10, $result->maxKeys); $this->assertTrue($result->isTruncated); $this->assertEquals('mybucket10', $result->nextMarker); $this->assertEquals(1, count($result->buckets)); $this->assertEquals(\DateTime::createFromFormat( 'Y-m-d\TH:i:s.000\Z', '2014-05-14T11:18:32.000Z', new \DateTimeZone('UTC') ), $result->buckets[0]->creationDate); $this->assertEquals('oss-cn-hangzhou.aliyuncs.com', $result->buckets[0]->extranetEndpoint); $this->assertEquals('oss-cn-hangzhou-internal.aliyuncs.com', $result->buckets[0]->intranetEndpoint); $this->assertEquals('mybucket01', $result->buckets[0]->name); $this->assertEquals('cn-hangzhou', $result->buckets[0]->region); $this->assertEquals(Models\StorageClassType::STANDARD, $result->buckets[0]->storageClass); $this->assertEquals('oss-cn-hangzhou', $result->buckets[0]->location); $this->assertEquals('rg-aek27tc********', $result->buckets[0]->resourceGroupId); } public function testFromDescribeRegions() { // miss required field try { $request = new Models\DescribeRegionsRequest(); $input = BucketBasic::fromDescribeRegions($request); $this->assertEquals('', $input->getParameters()['regions']); } catch (\InvalidArgumentException $e) { $this->assertTrue(false, 'should not here'); } $request = new Models\DescribeRegionsRequest("oss-cn-hangzhou"); $input = BucketBasic::fromDescribeRegions($request); $this->assertEquals('oss-cn-hangzhou', $input->getParameters()['regions']); } public function testToDescribeRegions() { // empty output try { $output = new OperationOutput(); $result = BucketBasic::toDescribeRegions($output); $this->assertTrue(false, 'should not here'); } catch (DeserializationExecption $e) { $this->assertStringContainsString('Not found tag ', $e); } //empty xml $str = ' '; $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'test'], Utils::streamFor($str) ); $result = BucketBasic::toDescribeRegions($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->regionInfos); // xml $str = ' oss-cn-hangzhou oss-cn-hangzhou.aliyuncs.com oss-cn-hangzhou-internal.aliyuncs.com oss-accelerate.aliyuncs.com oss-cn-shanghai oss-cn-shanghai.aliyuncs.com oss-cn-shanghai-internal.aliyuncs.com oss-accelerate.aliyuncs.com '; $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'application/xml'], Utils::streamFor($str) ); $result = BucketBasic::toDescribeRegions($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->regionInfos)); $this->assertEquals('oss-cn-hangzhou', $result->regionInfos[0]->region); $this->assertEquals('oss-cn-hangzhou.aliyuncs.com', $result->regionInfos[0]->internetEndpoint); $this->assertEquals('oss-cn-hangzhou-internal.aliyuncs.com', $result->regionInfos[0]->internalEndpoint); $this->assertEquals('oss-accelerate.aliyuncs.com', $result->regionInfos[0]->accelerateEndpoint); $this->assertEquals('oss-cn-shanghai', $result->regionInfos[1]->region); $this->assertEquals('oss-cn-shanghai.aliyuncs.com', $result->regionInfos[1]->internetEndpoint); $this->assertEquals('oss-cn-shanghai-internal.aliyuncs.com', $result->regionInfos[1]->internalEndpoint); $this->assertEquals('oss-accelerate.aliyuncs.com', $result->regionInfos[1]->accelerateEndpoint); $str = ' oss-cn-hangzhou oss-cn-hangzhou.aliyuncs.com oss-cn-hangzhou-internal.aliyuncs.com oss-accelerate.aliyuncs.com '; $output = new OperationOutput( 'OK', 200, ['x-oss-request-id' => '123', 'content-type' => 'application/xml'], Utils::streamFor($str) ); $result = BucketBasic::toDescribeRegions($output); $this->assertEquals('OK', $result->status); $this->assertEquals(200, $result->statusCode); $this->assertEquals('123', $result->requestId); $this->assertEquals(1, count($result->regionInfos)); $this->assertEquals('oss-cn-hangzhou', $result->regionInfos[0]->region); $this->assertEquals('oss-cn-hangzhou.aliyuncs.com', $result->regionInfos[0]->internetEndpoint); $this->assertEquals('oss-cn-hangzhou-internal.aliyuncs.com', $result->regionInfos[0]->internalEndpoint); $this->assertEquals('oss-accelerate.aliyuncs.com', $result->regionInfos[0]->accelerateEndpoint); } private function cleanXml($xml) { return str_replace("\n", "", str_replace("\r", "", $xml)); } }