diff --git a/sample/CreateBucketDataRedundancyTransition.php b/sample/CreateBucketDataRedundancyTransition.php new file mode 100644 index 0000000..e5a51ba --- /dev/null +++ b/sample/CreateBucketDataRedundancyTransition.php @@ -0,0 +1,47 @@ + ['help' => 'The region in which the bucket is located.', 'required' => True], + "endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], + "bucket" => ['help' => 'The name of the bucket', 'required' => True], +]; +$longopts = \array_map(function ($key) { + return "$key:"; +}, array_keys($optsdesc)); +$options = getopt("", $longopts); +foreach ($optsdesc as $key => $value) { + if ($value['required'] === True && empty($options[$key])) { + $help = $value['help']; + echo "Error: the following arguments are required: --$key, $help"; + exit(1); + } +} + +$region = $options["region"]; +$bucket = $options["bucket"]; + +// Loading credentials values from the environment variables +$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider(); + +// Using the SDK's default configuration +$cfg = Oss\Config::loadDefault(); +$cfg->setCredentialsProvider($credentialsProvider); +$cfg->setRegion($region); +if (isset($options["endpoint"])) { + $cfg->setEndpoint($options["endpoint"]); +} + +$client = new Oss\Client($cfg); +$request = new Oss\Models\CreateBucketDataRedundancyTransitionRequest($bucket, 'ZRS'); +$result = $client->createBucketDataRedundancyTransition($request); + +printf( + 'status code:' . $result->statusCode . PHP_EOL . + 'request id:' . $result->requestId . PHP_EOL . + 'task id:' . $result->bucketDataRedundancyTransition->taskId +); \ No newline at end of file diff --git a/sample/DeleteBucketDataRedundancyTransition.php b/sample/DeleteBucketDataRedundancyTransition.php new file mode 100644 index 0000000..c26cad7 --- /dev/null +++ b/sample/DeleteBucketDataRedundancyTransition.php @@ -0,0 +1,47 @@ + ['help' => 'The region in which the bucket is located.', 'required' => True], + "endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], + "bucket" => ['help' => 'The name of the bucket', 'required' => True], + "task-id" => ['help' => 'The Id of the redundancy change task.', 'required' => True], +]; +$longopts = \array_map(function ($key) { + return "$key:"; +}, array_keys($optsdesc)); +$options = getopt("", $longopts); +foreach ($optsdesc as $key => $value) { + if ($value['required'] === True && empty($options[$key])) { + $help = $value['help']; + echo "Error: the following arguments are required: --$key, $help"; + exit(1); + } +} + +$region = $options["region"]; +$bucket = $options["bucket"]; +$taskId = $options["task-id"]; +// Loading credentials values from the environment variables +$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider(); + +// Using the SDK's default configuration +$cfg = Oss\Config::loadDefault(); +$cfg->setCredentialsProvider($credentialsProvider); +$cfg->setRegion($region); +if (isset($options["endpoint"])) { + $cfg->setEndpoint($options["endpoint"]); +} + +$client = new Oss\Client($cfg); +$request = new Oss\Models\DeleteBucketDataRedundancyTransitionRequest($bucket, $taskId); +$result = $client->deleteBucketDataRedundancyTransition($request); + +printf( + 'status code:' . $result->statusCode . PHP_EOL . + 'request id:' . $result->requestId +); \ No newline at end of file diff --git a/sample/GetBucketDataRedundancyTransition.php b/sample/GetBucketDataRedundancyTransition.php new file mode 100644 index 0000000..5282fbc --- /dev/null +++ b/sample/GetBucketDataRedundancyTransition.php @@ -0,0 +1,48 @@ + ['help' => 'The region in which the bucket is located.', 'required' => True], + "endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], + "bucket" => ['help' => 'The name of the bucket', 'required' => True], + "task-id" => ['help' => 'The Id of the redundancy change task.', 'required' => True], +]; +$longopts = \array_map(function ($key) { + return "$key:"; +}, array_keys($optsdesc)); +$options = getopt("", $longopts); +foreach ($optsdesc as $key => $value) { + if ($value['required'] === True && empty($options[$key])) { + $help = $value['help']; + echo "Error: the following arguments are required: --$key, $help"; + exit(1); + } +} + +$region = $options["region"]; +$bucket = $options["bucket"]; +$taskId = $options["task-id"]; +// Loading credentials values from the environment variables +$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider(); + +// Using the SDK's default configuration +$cfg = Oss\Config::loadDefault(); +$cfg->setCredentialsProvider($credentialsProvider); +$cfg->setRegion($region); +if (isset($options["endpoint"])) { + $cfg->setEndpoint($options["endpoint"]); +} + +$client = new Oss\Client($cfg); +$request = new Oss\Models\GetBucketDataRedundancyTransitionRequest($bucket, $taskId); +$result = $client->getBucketDataRedundancyTransition($request); + +printf( + 'status code:' . $result->statusCode . PHP_EOL . + 'request id:' . $result->requestId . PHP_EOL . + 'bucket data redundancy transition:' . var_export($result->bucketDataRedundancyTransition, true) +); \ No newline at end of file diff --git a/sample/ListBucketDataRedundancyTransition.php b/sample/ListBucketDataRedundancyTransition.php new file mode 100644 index 0000000..cdc6f80 --- /dev/null +++ b/sample/ListBucketDataRedundancyTransition.php @@ -0,0 +1,46 @@ + ['help' => 'The region in which the bucket is located.', 'required' => True], + "endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], + "bucket" => ['help' => 'The name of the bucket', 'required' => True], +]; +$longopts = \array_map(function ($key) { + return "$key:"; +}, array_keys($optsdesc)); +$options = getopt("", $longopts); +foreach ($optsdesc as $key => $value) { + if ($value['required'] === True && empty($options[$key])) { + $help = $value['help']; + echo "Error: the following arguments are required: --$key, $help"; + exit(1); + } +} + +$region = $options["region"]; +$bucket = $options["bucket"]; +// Loading credentials values from the environment variables +$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider(); + +// Using the SDK's default configuration +$cfg = Oss\Config::loadDefault(); +$cfg->setCredentialsProvider($credentialsProvider); +$cfg->setRegion($region); +if (isset($options["endpoint"])) { + $cfg->setEndpoint($options["endpoint"]); +} + +$client = new Oss\Client($cfg); +$request = new Oss\Models\ListBucketDataRedundancyTransitionRequest($bucket); +$result = $client->listBucketDataRedundancyTransition($request); + +printf( + 'status code:' . $result->statusCode . PHP_EOL . + 'request id:' . $result->requestId . PHP_EOL . + 'bucket data redundancy transitions:' . var_export($result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions, true) +); \ No newline at end of file diff --git a/sample/ListUserDataRedundancyTransition.php b/sample/ListUserDataRedundancyTransition.php new file mode 100644 index 0000000..3568c2a --- /dev/null +++ b/sample/ListUserDataRedundancyTransition.php @@ -0,0 +1,44 @@ + ['help' => 'The region in which the bucket is located.', 'required' => True], + "endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], +]; +$longopts = \array_map(function ($key) { + return "$key:"; +}, array_keys($optsdesc)); +$options = getopt("", $longopts); +foreach ($optsdesc as $key => $value) { + if ($value['required'] === True && empty($options[$key])) { + $help = $value['help']; + echo "Error: the following arguments are required: --$key, $help"; + exit(1); + } +} + +$region = $options["region"]; +// Loading credentials values from the environment variables +$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider(); + +// Using the SDK's default configuration +$cfg = Oss\Config::loadDefault(); +$cfg->setCredentialsProvider($credentialsProvider); +$cfg->setRegion($region); +if (isset($options["endpoint"])) { + $cfg->setEndpoint($options["endpoint"]); +} + +$client = new Oss\Client($cfg); +$request = new Oss\Models\ListUserDataRedundancyTransitionRequest(); +$result = $client->listUserDataRedundancyTransition($request); + +printf( + 'status code:' . $result->statusCode . PHP_EOL . + 'request id:' . $result->requestId . PHP_EOL . + 'bucket data redundancy transitions:' . var_export($result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions, true) +); \ No newline at end of file diff --git a/src/Client.php b/src/Client.php index f6da7c9..8a341e5 100644 --- a/src/Client.php +++ b/src/Client.php @@ -212,6 +212,16 @@ * @method \GuzzleHttp\Promise\Promise putBucketPublicAccessBlockAsync(Models\PutBucketPublicAccessBlockRequest $request, array $args = []) Enables or disables Block Public Access for a bucket. * @method Models\DeleteBucketPublicAccessBlockResult deleteBucketPublicAccessBlock(Models\DeleteBucketPublicAccessBlockRequest $request, array $args = []) Deletes the Block Public Access configurations of a bucket. * @method \GuzzleHttp\Promise\Promise deleteBucketPublicAccessBlockAsync(Models\DeleteBucketPublicAccessBlockRequest $request, array $args = []) Deletes the Block Public Access configurations of a bucket. + * @method Models\ListBucketDataRedundancyTransitionResult listBucketDataRedundancyTransition(Models\ListBucketDataRedundancyTransitionRequest $request, array $args = []) Lists all redundancy type conversion tasks of a bucket. + * @method \GuzzleHttp\Promise\Promise listBucketDataRedundancyTransitionAsync(Models\ListBucketDataRedundancyTransitionRequest $request, array $args = []) Lists all redundancy type conversion tasks of a bucket. + * @method Models\ListUserDataRedundancyTransitionResult listUserDataRedundancyTransition(Models\ListUserDataRedundancyTransitionRequest $request, array $args = []) Lists all redundancy type conversion tasks. + * @method \GuzzleHttp\Promise\Promise listUserDataRedundancyTransitionAsync(Models\ListUserDataRedundancyTransitionRequest $request, array $args = []) Lists all redundancy type conversion tasks. + * @method Models\GetBucketDataRedundancyTransitionResult getBucketDataRedundancyTransition(Models\GetBucketDataRedundancyTransitionRequest $request, array $args = []) Queries the redundancy type conversion tasks of a bucket. + * @method \GuzzleHttp\Promise\Promise getBucketDataRedundancyTransitionAsync(Models\GetBucketDataRedundancyTransitionRequest $request, array $args = []) Queries the redundancy type conversion tasks of a bucket. + * @method Models\CreateBucketDataRedundancyTransitionResult createBucketDataRedundancyTransition(Models\CreateBucketDataRedundancyTransitionRequest $request, array $args = []) Creates a redundancy type conversion task for a bucket. + * @method \GuzzleHttp\Promise\Promise createBucketDataRedundancyTransitionAsync(Models\CreateBucketDataRedundancyTransitionRequest $request, array $args = []) Creates a redundancy type conversion task for a bucket. + * @method Models\DeleteBucketDataRedundancyTransitionResult deleteBucketDataRedundancyTransition(Models\DeleteBucketDataRedundancyTransitionRequest $request, array $args = []) Deletes a redundancy type conversion task of a bucket. + * @method \GuzzleHttp\Promise\Promise deleteBucketDataRedundancyTransitionAsync(Models\DeleteBucketDataRedundancyTransitionRequest $request, array $args = []) Deletes a redundancy type conversion task of a bucket. * @method Models\GetBucketHttpsConfigResult getBucketHttpsConfig(Models\GetBucketHttpsConfigRequest $request, array $args = []) Queries the Transport Layer Security (TLS) version configurations of a bucket. * @method \GuzzleHttp\Promise\Promise getBucketHttpsConfigAsync(Models\GetBucketHttpsConfigRequest $request, array $args = []) Queries the Transport Layer Security (TLS) version configurations of a bucket. * @method Models\PutBucketHttpsConfigResult putBucketHttpsConfig(Models\PutBucketHttpsConfigRequest $request, array $args = []) Enables or disables Transport Layer Security (TLS) version management for a bucket. diff --git a/src/Models/BucketDataRedundancyTransition.php b/src/Models/BucketDataRedundancyTransition.php new file mode 100644 index 0000000..58423d0 --- /dev/null +++ b/src/Models/BucketDataRedundancyTransition.php @@ -0,0 +1,106 @@ +processPercentage = $processPercentage; + $this->estimatedRemainingTime = $estimatedRemainingTime; + $this->bucket = $bucket; + $this->status = $status; + $this->taskId = $taskId; + $this->createTime = $createTime; + $this->startTime = $startTime; + $this->endTime = $endTime; + } +} \ No newline at end of file diff --git a/src/Models/CreateBucketDataRedundancyTransitionRequest.php b/src/Models/CreateBucketDataRedundancyTransitionRequest.php new file mode 100644 index 0000000..f2fa1b7 --- /dev/null +++ b/src/Models/CreateBucketDataRedundancyTransitionRequest.php @@ -0,0 +1,49 @@ +bucket = $bucket; + $this->targetRedundancyType = $targetRedundancyType; + parent::__construct($options); + } +} \ No newline at end of file diff --git a/src/Models/CreateBucketDataRedundancyTransitionResult.php b/src/Models/CreateBucketDataRedundancyTransitionResult.php new file mode 100644 index 0000000..2dccbc6 --- /dev/null +++ b/src/Models/CreateBucketDataRedundancyTransitionResult.php @@ -0,0 +1,33 @@ +bucketDataRedundancyTransition = $bucketDataRedundancyTransition; + } +} diff --git a/src/Models/DeleteBucketDataRedundancyTransitionRequest.php b/src/Models/DeleteBucketDataRedundancyTransitionRequest.php new file mode 100644 index 0000000..6347e82 --- /dev/null +++ b/src/Models/DeleteBucketDataRedundancyTransitionRequest.php @@ -0,0 +1,49 @@ +bucket = $bucket; + $this->redundancyTransitionTaskid = $redundancyTransitionTaskid; + parent::__construct($options); + } +} \ No newline at end of file diff --git a/src/Models/DeleteBucketDataRedundancyTransitionResult.php b/src/Models/DeleteBucketDataRedundancyTransitionResult.php new file mode 100644 index 0000000..026d436 --- /dev/null +++ b/src/Models/DeleteBucketDataRedundancyTransitionResult.php @@ -0,0 +1,15 @@ +bucket = $bucket; + $this->redundancyTransitionTaskid = $redundancyTransitionTaskid; + parent::__construct($options); + } +} \ No newline at end of file diff --git a/src/Models/GetBucketDataRedundancyTransitionResult.php b/src/Models/GetBucketDataRedundancyTransitionResult.php new file mode 100644 index 0000000..2b7ffea --- /dev/null +++ b/src/Models/GetBucketDataRedundancyTransitionResult.php @@ -0,0 +1,33 @@ +bucketDataRedundancyTransition = $bucketDataRedundancyTransition; + } +} diff --git a/src/Models/ListBucketDataRedundancyTransition.php b/src/Models/ListBucketDataRedundancyTransition.php new file mode 100644 index 0000000..e5991be --- /dev/null +++ b/src/Models/ListBucketDataRedundancyTransition.php @@ -0,0 +1,34 @@ +|null + */ + #[XmlElement(rename: 'BucketDataRedundancyTransition', type: BucketDataRedundancyTransition::class)] + public ?array $bucketDataRedundancyTransitions; + + /** + * ListBucketDataRedundancyTransition constructor. + * @param array|null $bucketDataRedundancyTransitions + */ + public function __construct( + ?array $bucketDataRedundancyTransitions = null + ) + { + $this->bucketDataRedundancyTransitions = $bucketDataRedundancyTransitions; + } +} \ No newline at end of file diff --git a/src/Models/ListBucketDataRedundancyTransitionRequest.php b/src/Models/ListBucketDataRedundancyTransitionRequest.php new file mode 100644 index 0000000..cd7fe21 --- /dev/null +++ b/src/Models/ListBucketDataRedundancyTransitionRequest.php @@ -0,0 +1,37 @@ +bucket = $bucket; + parent::__construct($options); + } +} \ No newline at end of file diff --git a/src/Models/ListBucketDataRedundancyTransitionResult.php b/src/Models/ListBucketDataRedundancyTransitionResult.php new file mode 100644 index 0000000..d0767e9 --- /dev/null +++ b/src/Models/ListBucketDataRedundancyTransitionResult.php @@ -0,0 +1,33 @@ +listBucketDataRedundancyTransition = $listBucketDataRedundancyTransition; + } +} diff --git a/src/Models/ListUserDataRedundancyTransitionRequest.php b/src/Models/ListUserDataRedundancyTransitionRequest.php new file mode 100644 index 0000000..1850b4f --- /dev/null +++ b/src/Models/ListUserDataRedundancyTransitionRequest.php @@ -0,0 +1,45 @@ +continuationToken = $continuationToken; + $this->maxKeys = $maxKeys; + parent::__construct($options); + } +} \ No newline at end of file diff --git a/src/Models/ListUserDataRedundancyTransitionResult.php b/src/Models/ListUserDataRedundancyTransitionResult.php new file mode 100644 index 0000000..b94c16e --- /dev/null +++ b/src/Models/ListUserDataRedundancyTransitionResult.php @@ -0,0 +1,32 @@ +listBucketDataRedundancyTransition = $listBucketDataRedundancyTransition; + } +} diff --git a/src/Transform/BucketRedundancyTransition.php b/src/Transform/BucketRedundancyTransition.php new file mode 100644 index 0000000..f85a86d --- /dev/null +++ b/src/Transform/BucketRedundancyTransition.php @@ -0,0 +1,194 @@ + 'application/xml'] + ); + $input->setParameter('redundancyTransition', ''); + $input->setBucket($request->bucket ?? ''); + $input->setOpMetadata('sub-resource', ['redundancyTransition',]); + + $customSerializer = [ + [Functions::class, 'addContentMd5'] + ]; + Serializer::serializeInput($request, $input, $customSerializer); + return $input; + } + + /** + * @param OperationOutput $output + * @return Models\ListBucketDataRedundancyTransitionResult + */ + public static function toListBucketDataRedundancyTransition(OperationOutput $output): Models\ListBucketDataRedundancyTransitionResult + { + $result = new Models\ListBucketDataRedundancyTransitionResult(); + $customDeserializer = [ + [Deserializer::class, 'deserializeOutputBody'], + ]; + Deserializer::deserializeOutput($result, $output, $customDeserializer); + return $result; + } + + /** + * @param Models\GetBucketDataRedundancyTransitionRequest $request + * @return OperationInput + */ + public static function fromGetBucketDataRedundancyTransition(Models\GetBucketDataRedundancyTransitionRequest $request): OperationInput + { + $input = new OperationInput( + 'GetBucketDataRedundancyTransition', + 'GET', + ['Content-Type' => 'application/xml'] + ); + $input->setParameter('redundancyTransition', ''); + $input->setBucket($request->bucket ?? ''); + $input->setOpMetadata('sub-resource', ['redundancyTransition',]); + + $customSerializer = [ + [Functions::class, 'addContentMd5'] + ]; + Serializer::serializeInput($request, $input, $customSerializer); + return $input; + } + + /** + * @param OperationOutput $output + * @return Models\GetBucketDataRedundancyTransitionResult + */ + public static function toGetBucketDataRedundancyTransition(OperationOutput $output): Models\GetBucketDataRedundancyTransitionResult + { + $result = new Models\GetBucketDataRedundancyTransitionResult(); + $customDeserializer = [ + [Deserializer::class, 'deserializeOutputBody'], + ]; + Deserializer::deserializeOutput($result, $output, $customDeserializer); + return $result; + } + + /** + * @param Models\CreateBucketDataRedundancyTransitionRequest $request + * @return OperationInput + */ + public static function fromCreateBucketDataRedundancyTransition(Models\CreateBucketDataRedundancyTransitionRequest $request): OperationInput + { + $input = new OperationInput( + 'CreateBucketDataRedundancyTransition', + 'POST', + ['Content-Type' => 'application/xml'] + ); + $input->setParameter('redundancyTransition', ''); + $input->setBucket($request->bucket ?? ''); + $input->setOpMetadata('sub-resource', ['redundancyTransition',]); + + $customSerializer = [ + [Functions::class, 'addContentMd5'] + ]; + Serializer::serializeInput($request, $input, $customSerializer); + return $input; + } + + /** + * @param OperationOutput $output + * @return Models\CreateBucketDataRedundancyTransitionResult + */ + public static function toCreateBucketDataRedundancyTransition(OperationOutput $output): Models\CreateBucketDataRedundancyTransitionResult + { + $result = new Models\CreateBucketDataRedundancyTransitionResult(); + $customDeserializer = [ + [Deserializer::class, 'deserializeOutputBody'], + ]; + Deserializer::deserializeOutput($result, $output, $customDeserializer); + return $result; + } + + /** + * @param Models\DeleteBucketDataRedundancyTransitionRequest $request + * @return OperationInput + */ + public static function fromDeleteBucketDataRedundancyTransition(Models\DeleteBucketDataRedundancyTransitionRequest $request): OperationInput + { + $input = new OperationInput( + 'DeleteBucketDataRedundancyTransition', + 'DELETE', + ['Content-Type' => 'application/xml'] + ); + $input->setParameter('redundancyTransition', ''); + $input->setBucket($request->bucket ?? ''); + $input->setOpMetadata('sub-resource', ['redundancyTransition',]); + + $customSerializer = [ + [Functions::class, 'addContentMd5'] + ]; + Serializer::serializeInput($request, $input, $customSerializer); + return $input; + } + + /** + * @param OperationOutput $output + * @return Models\DeleteBucketDataRedundancyTransitionResult + */ + public static function toDeleteBucketDataRedundancyTransition(OperationOutput $output): Models\DeleteBucketDataRedundancyTransitionResult + { + $result = new Models\DeleteBucketDataRedundancyTransitionResult(); + Deserializer::deserializeOutput($result, $output); + return $result; + } + + /** + * @param Models\ListUserDataRedundancyTransitionRequest $request + * @return OperationInput + */ + public static function fromListUserDataRedundancyTransition(Models\ListUserDataRedundancyTransitionRequest $request): OperationInput + { + $input = new OperationInput( + 'ListUserDataRedundancyTransition', + 'GET', + ['Content-Type' => 'application/xml'] + ); + $input->setParameter('redundancyTransition', ''); + $input->setOpMetadata('sub-resource', ['redundancyTransition',]); + + $customSerializer = [ + [Functions::class, 'addContentMd5'] + ]; + Serializer::serializeInput($request, $input, $customSerializer); + return $input; + } + + /** + * @param OperationOutput $output + * @return Models\ListUserDataRedundancyTransitionResult + */ + public static function toListUserDataRedundancyTransition(OperationOutput $output): Models\ListUserDataRedundancyTransitionResult + { + $result = new Models\ListUserDataRedundancyTransitionResult(); + $customDeserializer = [ + [Deserializer::class, 'deserializeOutputBody'], + ]; + Deserializer::deserializeOutput($result, $output, $customDeserializer); + return $result; + } +} diff --git a/src/Transform/Functions.php b/src/Transform/Functions.php index 8147fd5..09393e1 100644 --- a/src/Transform/Functions.php +++ b/src/Transform/Functions.php @@ -137,6 +137,12 @@ final class Functions 'GetBucketPublicAccessBlock' => 'BucketPublicAccessBlock', 'PutBucketPublicAccessBlock' => 'BucketPublicAccessBlock', 'DeleteBucketPublicAccessBlock' => 'BucketPublicAccessBlock', + // bucket redundancy transition + 'ListBucketDataRedundancyTransition' => 'BucketRedundancyTransition', + 'ListUserDataRedundancyTransition' => 'BucketRedundancyTransition', + 'GetBucketDataRedundancyTransition' => 'BucketRedundancyTransition', + 'CreateBucketDataRedundancyTransition' => 'BucketRedundancyTransition', + 'DeleteBucketDataRedundancyTransition' => 'BucketRedundancyTransition', // bucket https config 'GetBucketHttpsConfig' => 'BucketHttpsConfig', 'PutBucketHttpsConfig' => 'BucketHttpsConfig', diff --git a/tests/IntegrationTests/ClientBucketDataRedundancyTransitionTest.php b/tests/IntegrationTests/ClientBucketDataRedundancyTransitionTest.php new file mode 100644 index 0000000..84dd2d2 --- /dev/null +++ b/tests/IntegrationTests/ClientBucketDataRedundancyTransitionTest.php @@ -0,0 +1,147 @@ +getDefaultClient(); + $bucketName = self::$bucketName; + + // CreateBucketDataRedundancyTransition + $createResult = $client->createBucketDataRedundancyTransition(new Oss\Models\CreateBucketDataRedundancyTransitionRequest( + $bucketName, + targetRedundancyType: 'ZRS' + )); + $this->assertEquals(200, $createResult->statusCode); + $this->assertEquals('OK', $createResult->status); + $this->assertEquals(True, count($createResult->headers) > 0); + $this->assertEquals(24, strlen($createResult->requestId)); + + // GetBucketDataRedundancyTransition + $getResult = $client->getBucketDataRedundancyTransition(new Oss\Models\GetBucketDataRedundancyTransitionRequest( + $bucketName, + redundancyTransitionTaskid: $createResult->bucketDataRedundancyTransition->taskId + )); + $this->assertEquals(200, $getResult->statusCode); + $this->assertEquals('OK', $getResult->status); + $this->assertEquals(True, count($getResult->headers) > 0); + $this->assertEquals(24, strlen($getResult->requestId)); + + // ListBucketDataRedundancyTransition + $listResult = $client->listBucketDataRedundancyTransition(new Oss\Models\ListBucketDataRedundancyTransitionRequest( + $bucketName, + )); + $this->assertEquals(200, $listResult->statusCode); + $this->assertEquals('OK', $listResult->status); + $this->assertEquals(True, count($listResult->headers) > 0); + $this->assertEquals(24, strlen($listResult->requestId)); + + // ListUserDataRedundancyTransition + $listResult = $client->listUserDataRedundancyTransition(new Oss\Models\ListUserDataRedundancyTransitionRequest()); + $this->assertEquals(200, $listResult->statusCode); + $this->assertEquals('OK', $listResult->status); + $this->assertEquals(True, count($listResult->headers) > 0); + $this->assertEquals(24, strlen($listResult->requestId)); + + // DeleteBucketDataRedundancyTransition + $delResult = $client->deleteBucketDataRedundancyTransition(new Oss\Models\DeleteBucketDataRedundancyTransitionRequest( + $bucketName, $createResult->bucketDataRedundancyTransition->taskId + )); + $this->assertEquals(204, $delResult->statusCode); + $this->assertEquals('No Content', $delResult->status); + $this->assertEquals(True, count($delResult->headers) > 0); + $this->assertEquals(24, strlen($delResult->requestId)); + } + + public function testBucketDataRedundancyTransitionFail() + { + $client = $this->getDefaultClient(); + $bucketName = self::$bucketName . "-not-exist"; + + try { + $createResult = $client->createBucketDataRedundancyTransition(new Oss\Models\CreateBucketDataRedundancyTransitionRequest( + $bucketName, + targetRedundancyType: 'ZRS' + )); + $this->assertTrue(false, "should not here"); + } catch (Oss\Exception\OperationException $e) { + $this->assertStringContainsString('Operation error CreateBucketDataRedundancyTransition', $e); + $se = $e->getPrevious(); + $this->assertInstanceOf(Oss\Exception\ServiceException::class, $se); + if ($se instanceof Oss\Exception\ServiceException) { + $this->assertEquals('NoSuchBucket', $se->getErrorCode()); + $this->assertEquals(404, $se->getStatusCode()); + $this->assertEquals(24, strlen($se->getRequestId())); + } + } + + try { + $getResult = $client->getBucketDataRedundancyTransition(new Oss\Models\GetBucketDataRedundancyTransitionRequest( + $bucketName, '123' + )); + $this->assertTrue(false, "should not here"); + } catch (Oss\Exception\OperationException $e) { + $this->assertStringContainsString('Operation error GetBucketDataRedundancyTransition', $e); + $se = $e->getPrevious(); + $this->assertInstanceOf(Oss\Exception\ServiceException::class, $se); + if ($se instanceof Oss\Exception\ServiceException) { + $this->assertEquals('NoSuchBucket', $se->getErrorCode()); + $this->assertEquals(404, $se->getStatusCode()); + $this->assertEquals(24, strlen($se->getRequestId())); + } + } + + try { + $delResult = $client->deleteBucketDataRedundancyTransition(new Oss\Models\DeleteBucketDataRedundancyTransitionRequest( + $bucketName, '123' + )); + $this->assertTrue(false, "should not here"); + } catch (Oss\Exception\OperationException $e) { + $this->assertStringContainsString('Operation error DeleteBucketDataRedundancyTransition', $e); + $se = $e->getPrevious(); + $this->assertInstanceOf(Oss\Exception\ServiceException::class, $se); + if ($se instanceof Oss\Exception\ServiceException) { + $this->assertEquals('NoSuchBucket', $se->getErrorCode()); + $this->assertEquals(404, $se->getStatusCode()); + $this->assertEquals(24, strlen($se->getRequestId())); + } + } + + try { + $listResult = $client->listBucketDataRedundancyTransition(new Oss\Models\ListBucketDataRedundancyTransitionRequest( + $bucketName, + )); + $this->assertTrue(false, "should not here"); + } catch (Oss\Exception\OperationException $e) { + $this->assertStringContainsString('Operation error ListBucketDataRedundancyTransition', $e); + $se = $e->getPrevious(); + $this->assertInstanceOf(Oss\Exception\ServiceException::class, $se); + if ($se instanceof Oss\Exception\ServiceException) { + $this->assertEquals('NoSuchBucket', $se->getErrorCode()); + $this->assertEquals(404, $se->getStatusCode()); + $this->assertEquals(24, strlen($se->getRequestId())); + } + } + + try { + $client = $this->getInvalidAkClient(); + $listResult = $client->listUserDataRedundancyTransition(new Oss\Models\ListUserDataRedundancyTransitionRequest()); + $this->assertTrue(false, "should not here"); + } catch (Oss\Exception\OperationException $e) { + $this->assertStringContainsString('Operation error ListUserDataRedundancyTransition', $e); + $se = $e->getPrevious(); + $this->assertInstanceOf(Oss\Exception\ServiceException::class, $se); + if ($se instanceof Oss\Exception\ServiceException) { + $this->assertEquals('InvalidAccessKeyId', $se->getErrorCode()); + $this->assertEquals(403, $se->getStatusCode()); + $this->assertEquals(24, strlen($se->getRequestId())); + } + } + } +} \ No newline at end of file diff --git a/tests/UnitTests/Transform/BucketRedundancyTransitionTest.php b/tests/UnitTests/Transform/BucketRedundancyTransitionTest.php new file mode 100644 index 0000000..0839acc --- /dev/null +++ b/tests/UnitTests/Transform/BucketRedundancyTransitionTest.php @@ -0,0 +1,467 @@ +assertTrue(false, "should not here"); + } catch (\InvalidArgumentException $e) { + $this->assertStringContainsString("missing required field, bucket", (string)$e); + } + + try { + $request = new Models\CreateBucketDataRedundancyTransitionRequest('bucket-123'); + $input = BucketRedundancyTransition::fromCreateBucketDataRedundancyTransition($request); + $this->assertTrue(false, "should not here"); + } catch (\InvalidArgumentException $e) { + $this->assertStringContainsString("missing required field, targetRedundancyType", (string)$e); + } + + $request = new Models\CreateBucketDataRedundancyTransitionRequest('bucket-123', Models\DataRedundancyType::ZRS); + $input = BucketRedundancyTransition::fromCreateBucketDataRedundancyTransition($request); + $this->assertEquals('bucket-123', $input->getBucket()); + $this->assertEquals(Models\DataRedundancyType::ZRS, $input->getParameters()['x-oss-target-redundancy-type']); + } + + public function testToCreateBucketDataRedundancyTransition() + { + // empty output + $output = new OperationOutput(); + $result = BucketRedundancyTransition::toCreateBucketDataRedundancyTransition($output); + $this->assertEquals('', $result->status); + $this->assertEquals(0, $result->statusCode); + $this->assertEquals('', $result->requestId); + $this->assertEquals(0, count($result->headers)); + + $body = << + + 4be5beb0f74f490186311b268bf6**** + +BBB; + + $output = new OperationOutput( + 'OK', + 200, + ['x-oss-request-id' => '123', 'content-type' => 'application/xml'], + body: Utils::streamFor($body) + ); + $result = BucketRedundancyTransition::toCreateBucketDataRedundancyTransition($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('application/xml', $result->headers['content-type']); + $this->assertEquals('4be5beb0f74f490186311b268bf6****', $result->bucketDataRedundancyTransition->taskId); + } + + public function testFromGetBucketDataRedundancyTransition() + { + // miss required field + try { + $request = new Models\GetBucketDataRedundancyTransitionRequest(); + $input = BucketRedundancyTransition::fromGetBucketDataRedundancyTransition($request); + $this->assertTrue(false, "should not here"); + } catch (\InvalidArgumentException $e) { + $this->assertStringContainsString("missing required field, bucket", (string)$e); + } + + try { + $request = new Models\GetBucketDataRedundancyTransitionRequest('bucket-123'); + $input = BucketRedundancyTransition::fromGetBucketDataRedundancyTransition($request); + $this->assertTrue(false, "should not here"); + } catch (\InvalidArgumentException $e) { + $this->assertStringContainsString("missing required field, redundancyTransitionTaskid", (string)$e); + } + + $request = new Models\GetBucketDataRedundancyTransitionRequest('bucket-123', 'task-123'); + $input = BucketRedundancyTransition::fromGetBucketDataRedundancyTransition($request); + $this->assertEquals('bucket-123', $input->getBucket()); + $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); + $this->assertEquals('task-123', $input->getParameters()['x-oss-redundancy-transition-taskid']); + } + + public function testToGetBucketDataRedundancyTransition() + { + // empty output + $output = new OperationOutput(); + $result = BucketRedundancyTransition::toGetBucketDataRedundancyTransition($output); + $this->assertEquals('', $result->status); + $this->assertEquals(0, $result->statusCode); + $this->assertEquals('', $result->requestId); + $this->assertEquals(0, count($result->headers)); + + $body = ' + + examplebucket + 4be5beb0f74f490186311b268bf6**** + Queueing + 2023-11-17T09:11:58.000Z +'; + $output = new OperationOutput( + 'OK', + 200, + ['x-oss-request-id' => '123', 'content-type' => 'application/xml'], + Utils::streamFor($body) + ); + $result = BucketRedundancyTransition::toGetBucketDataRedundancyTransition($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('application/xml', $result->headers['content-type']); + $this->assertEquals('examplebucket', $result->bucketDataRedundancyTransition->bucket); + $this->assertEquals('4be5beb0f74f490186311b268bf6****', $result->bucketDataRedundancyTransition->taskId); + $this->assertEquals('Queueing', $result->bucketDataRedundancyTransition->status); + $this->assertEquals('2023-11-17T09:11:58.000Z', $result->bucketDataRedundancyTransition->createTime); + + $body = ' + + examplebucket + 909c6c818dd041d1a44e0fdc66aa**** + Processing + 2023-11-17T09:14:39.000Z + 2023-11-17T09:14:39.000Z + 0 + 100 +'; + $output = new OperationOutput( + 'OK', + 200, + ['x-oss-request-id' => '123', 'content-type' => 'application/xml'], + Utils::streamFor($body) + ); + $result = BucketRedundancyTransition::toGetBucketDataRedundancyTransition($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('application/xml', $result->headers['content-type']); + $this->assertEquals('examplebucket', $result->bucketDataRedundancyTransition->bucket); + $this->assertEquals('909c6c818dd041d1a44e0fdc66aa****', $result->bucketDataRedundancyTransition->taskId); + $this->assertEquals('Processing', $result->bucketDataRedundancyTransition->status); + $this->assertEquals('2023-11-17T09:14:39.000Z', $result->bucketDataRedundancyTransition->createTime); + $this->assertEquals('2023-11-17T09:14:39.000Z', $result->bucketDataRedundancyTransition->startTime); + $this->assertEquals(0, $result->bucketDataRedundancyTransition->processPercentage); + $this->assertEquals(100, $result->bucketDataRedundancyTransition->estimatedRemainingTime); + + $body = ' + + examplebucket + 909c6c818dd041d1a44e0fdc66aa**** + Finished + 2023-11-17T09:14:39.000Z + 2023-11-17T09:14:39.000Z + 100 + 0 + 2023-11-18T09:14:39.000Z +'; + $output = new OperationOutput( + 'OK', + 200, + ['x-oss-request-id' => '123', 'content-type' => 'application/xml'], + Utils::streamFor($body) + ); + $result = BucketRedundancyTransition::toGetBucketDataRedundancyTransition($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('application/xml', $result->headers['content-type']); + $this->assertEquals('examplebucket', $result->bucketDataRedundancyTransition->bucket); + $this->assertEquals('909c6c818dd041d1a44e0fdc66aa****', $result->bucketDataRedundancyTransition->taskId); + $this->assertEquals('Finished', $result->bucketDataRedundancyTransition->status); + $this->assertEquals('2023-11-17T09:14:39.000Z', $result->bucketDataRedundancyTransition->createTime); + $this->assertEquals('2023-11-17T09:14:39.000Z', $result->bucketDataRedundancyTransition->startTime); + $this->assertEquals(100, $result->bucketDataRedundancyTransition->processPercentage); + $this->assertEquals(0, $result->bucketDataRedundancyTransition->estimatedRemainingTime); + $this->assertEquals('2023-11-18T09:14:39.000Z', $result->bucketDataRedundancyTransition->endTime); + } + + public function testFromDeleteBucketDataRedundancyTransition() + { + // miss required field + try { + $request = new Models\DeleteBucketDataRedundancyTransitionRequest(); + $input = BucketRedundancyTransition::fromDeleteBucketDataRedundancyTransition($request); + $this->assertTrue(false, "should not here"); + } catch (\InvalidArgumentException $e) { + $this->assertStringContainsString("missing required field, bucket", (string)$e); + } + + try { + $request = new Models\DeleteBucketDataRedundancyTransitionRequest('bucket-123'); + $input = BucketRedundancyTransition::fromDeleteBucketDataRedundancyTransition($request); + $this->assertTrue(false, "should not here"); + } catch (\InvalidArgumentException $e) { + $this->assertStringContainsString("missing required field, redundancyTransitionTaskid", (string)$e); + } + + $request = new Models\DeleteBucketDataRedundancyTransitionRequest('bucket-123', 'task-123'); + $input = BucketRedundancyTransition::fromDeleteBucketDataRedundancyTransition($request); + $this->assertEquals('bucket-123', $input->getBucket()); + $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); + $this->assertEquals('task-123', $input->getParameters()['x-oss-redundancy-transition-taskid']); + } + + public function testToDeleteBucketDataRedundancyTransition() + { + // empty output + $output = new OperationOutput(); + $result = BucketRedundancyTransition::toDeleteBucketDataRedundancyTransition($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'] + ); + $result = BucketRedundancyTransition::toDeleteBucketDataRedundancyTransition($output); + $this->assertEquals('No Content', $result->status); + $this->assertEquals(204, $result->statusCode); + $this->assertEquals('123', $result->requestId); + $this->assertEquals(1, count($result->headers)); + $this->assertEquals('123', $result->headers['x-oss-request-id']); + } + + public function testFromListBucketDataRedundancyTransition() + { + // miss required field + try { + $request = new Models\ListBucketDataRedundancyTransitionRequest(); + $input = BucketRedundancyTransition::fromListBucketDataRedundancyTransition($request); + $this->assertTrue(false, "should not here"); + } catch (\InvalidArgumentException $e) { + $this->assertStringContainsString("missing required field, bucket", (string)$e); + } + + $request = new Models\ListBucketDataRedundancyTransitionRequest('bucket-123'); + $input = BucketRedundancyTransition::fromListBucketDataRedundancyTransition($request); + $this->assertEquals('bucket-123', $input->getBucket()); + $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); + } + + public function testToListBucketDataRedundancyTransition() + { + // empty output + $output = new OperationOutput(); + $result = BucketRedundancyTransition::toListBucketDataRedundancyTransition($output); + $this->assertEquals('', $result->status); + $this->assertEquals(0, $result->statusCode); + $this->assertEquals('', $result->requestId); + $this->assertEquals(0, count($result->headers)); + + $body = ' + + + examplebucket + 4be5beb0f74f490186311b268bf6**** + Queueing + 2023-11-17T09:11:58.000Z + +'; + $output = new OperationOutput( + 'OK', + 200, + ['x-oss-request-id' => '123', 'content-type' => 'application/xml'], + Utils::streamFor($body) + ); + $result = BucketRedundancyTransition::toListBucketDataRedundancyTransition($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('application/xml', $result->headers['content-type']); + $this->assertEquals('examplebucket', $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[0]->bucket); + $this->assertEquals('4be5beb0f74f490186311b268bf6****', $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[0]->taskId); + $this->assertEquals('Queueing', $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[0]->status); + $this->assertEquals('2023-11-17T09:11:58.000Z', $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[0]->createTime); + + $body = ' + + + examplebucket + 909c6c818dd041d1a44e0fdc66aa**** + Processing + 2023-11-17T09:14:39.000Z + 2023-11-17T09:14:39.000Z + 0 + 100 + +'; + $output = new OperationOutput( + 'OK', + 200, + ['x-oss-request-id' => '123', 'content-type' => 'application/xml'], + Utils::streamFor($body) + ); + $result = BucketRedundancyTransition::toListBucketDataRedundancyTransition($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('application/xml', $result->headers['content-type']); + $this->assertEquals('examplebucket', $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[0]->bucket); + $this->assertEquals('909c6c818dd041d1a44e0fdc66aa****', $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[0]->taskId); + $this->assertEquals('Processing', $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[0]->status); + $this->assertEquals('2023-11-17T09:14:39.000Z', $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[0]->createTime); + $this->assertEquals('2023-11-17T09:14:39.000Z', $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[0]->startTime); + $this->assertEquals(0, $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[0]->processPercentage); + $this->assertEquals(100, $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[0]->estimatedRemainingTime); + + $body = ' + + + examplebucket + 909c6c818dd041d1a44e0fdc66aa**** + Finished + 2023-11-17T09:14:39.000Z + 2023-11-17T09:14:39.000Z + 100 + 0 + 2023-11-18T09:14:39.000Z + +'; + $output = new OperationOutput( + 'OK', + 200, + ['x-oss-request-id' => '123', 'content-type' => 'application/xml'], + Utils::streamFor($body) + ); + $result = BucketRedundancyTransition::toListBucketDataRedundancyTransition($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('application/xml', $result->headers['content-type']); + $this->assertEquals('examplebucket', $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[0]->bucket); + $this->assertEquals('909c6c818dd041d1a44e0fdc66aa****', $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[0]->taskId); + $this->assertEquals('Finished', $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[0]->status); + $this->assertEquals('2023-11-17T09:14:39.000Z', $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[0]->createTime); + $this->assertEquals('2023-11-17T09:14:39.000Z', $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[0]->startTime); + $this->assertEquals(100, $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[0]->processPercentage); + $this->assertEquals(0, $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[0]->estimatedRemainingTime); + $this->assertEquals('2023-11-18T09:14:39.000Z', $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[0]->endTime); + } + + public function testFromListUserDataRedundancyTransition() + { + $request = new Models\ListUserDataRedundancyTransitionRequest(); + $input = BucketRedundancyTransition::fromListUserDataRedundancyTransition($request); + $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); + + $request = new Models\ListUserDataRedundancyTransitionRequest('token'); + $input = BucketRedundancyTransition::fromListUserDataRedundancyTransition($request); + $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); + $this->assertEquals('token', $input->getParameters()['continuation-token']); + + $request = new Models\ListUserDataRedundancyTransitionRequest('token', '100'); + $input = BucketRedundancyTransition::fromListUserDataRedundancyTransition($request); + $this->assertEquals('1B2M2Y8AsgTpgAmY7PhCfg==', $input->getHeaders()['content-md5']); + $this->assertEquals('token', $input->getParameters()['continuation-token']); + $this->assertEquals(100, $input->getParameters()['max-keys']); + } + + public function testToListUserDataRedundancyTransition() + { + // empty output + $output = new OperationOutput(); + $result = BucketRedundancyTransition::toListBucketDataRedundancyTransition($output); + $this->assertEquals('', $result->status); + $this->assertEquals(0, $result->statusCode); + $this->assertEquals('', $result->requestId); + $this->assertEquals(0, count($result->headers)); + + $body = ' + + + examplebucket + 4be5beb0f74f490186311b268bf6**** + Queueing + 2023-11-17T09:11:58.000Z + + + examplebucket1 + 909c6c818dd041d1a44e0fdc66aa**** + Processing + 2023-11-17T09:14:39.000Z + 2023-11-17T09:14:39.000Z + 0 + 100 + + + examplebucket2 + 909c6c818dd041d1a44e0fdc66aa**** + Finished + 2023-11-17T09:14:39.000Z + 2023-11-17T09:14:39.000Z + 100 + 0 + 2023-11-18T09:14:39.000Z + +false + +'; + $output = new OperationOutput( + 'OK', + 200, + ['x-oss-request-id' => '123', 'content-type' => 'application/xml'], + Utils::streamFor($body) + ); + $result = BucketRedundancyTransition::toListBucketDataRedundancyTransition($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('application/xml', $result->headers['content-type']); + $this->assertEquals(3, count($result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions)); + $this->assertEquals('examplebucket', $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[0]->bucket); + $this->assertEquals('4be5beb0f74f490186311b268bf6****', $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[0]->taskId); + $this->assertEquals('Queueing', $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[0]->status); + $this->assertEquals('2023-11-17T09:11:58.000Z', $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[0]->createTime); + + $this->assertEquals('examplebucket1', $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[1]->bucket); + $this->assertEquals('909c6c818dd041d1a44e0fdc66aa****', $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[1]->taskId); + $this->assertEquals('Processing', $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[1]->status); + $this->assertEquals('2023-11-17T09:14:39.000Z', $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[1]->createTime); + $this->assertEquals('2023-11-17T09:14:39.000Z', $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[1]->startTime); + $this->assertEquals(0, $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[1]->processPercentage); + $this->assertEquals(100, $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[1]->estimatedRemainingTime); + + $this->assertEquals('examplebucket2', $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[2]->bucket); + $this->assertEquals('909c6c818dd041d1a44e0fdc66aa****', $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[2]->taskId); + $this->assertEquals('Finished', $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[2]->status); + $this->assertEquals('2023-11-17T09:14:39.000Z', $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[2]->createTime); + $this->assertEquals('2023-11-17T09:14:39.000Z', $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[2]->startTime); + $this->assertEquals(100, $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[2]->processPercentage); + $this->assertEquals(0, $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[2]->estimatedRemainingTime); + $this->assertEquals('2023-11-18T09:14:39.000Z', $result->listBucketDataRedundancyTransition->bucketDataRedundancyTransitions[2]->endTime); + } + + private function cleanXml($xml): array|string + { + return str_replace("\n", "", str_replace("\r", "", $xml)); + } +}