From e787615ab40c8ed8452f3214a5686db44d100697 Mon Sep 17 00:00:00 2001 From: yangpeng <183851063@qq.com> Date: Tue, 3 Jan 2023 14:30:23 +0800 Subject: [PATCH] add bucket access monitor api and modify bucket lifecycle rule --- samples/Bucket.php | 2 + samples/BucketAccessMonitor.php | 62 +++ samples/BucketLifecycle.php | 356 +++++++++++++++++- samples/Object.php | 27 ++ src/OSS/Model/AccessMonitorConfig.php | 68 ++++ src/OSS/Model/BucketInfo.php | 20 + .../Model/LifecycleAbortMultipartUpload.php | 88 +++++ src/OSS/Model/LifecycleAction.php | 88 ----- src/OSS/Model/LifecycleConfig.php | 40 +- src/OSS/Model/LifecycleExpiration.php | 145 +++++++ .../LifecycleNoncurrentVersionExpiration.php | 59 +++ .../LifecycleNoncurrentVersionTransition.php | 140 +++++++ src/OSS/Model/LifecycleRule.php | 206 ++++++++-- src/OSS/Model/LifecycleTag.php | 93 +++++ src/OSS/Model/LifecycleTransition.php | 171 +++++++++ src/OSS/Model/RefererConfig.php | 2 +- src/OSS/OssClient.php | 68 +++- .../Result/GetBucketAccessMonitorResult.php | 23 ++ tests/OSS/Tests/AccessMonitorConfigTest.php | 57 +++ .../GetBucketAccessMonitorResultTest.php | 63 ++++ tests/OSS/Tests/GetLifecycleResultTest.php | 51 ++- tests/OSS/Tests/LifecycleConfigTest.php | 240 +++++++++--- .../OssClientBucketAccessMonitorTest.php | 106 ++++++ tests/OSS/Tests/OssClientBucketInfoTest.php | 1 + .../Tests/OssClientBucketLifecycleTest.php | 145 ++++++- tests/OSS/Tests/OssClientObjectTest.php | 18 + 26 files changed, 2132 insertions(+), 207 deletions(-) create mode 100644 samples/BucketAccessMonitor.php create mode 100644 src/OSS/Model/AccessMonitorConfig.php create mode 100644 src/OSS/Model/LifecycleAbortMultipartUpload.php delete mode 100644 src/OSS/Model/LifecycleAction.php create mode 100644 src/OSS/Model/LifecycleExpiration.php create mode 100644 src/OSS/Model/LifecycleNoncurrentVersionExpiration.php create mode 100644 src/OSS/Model/LifecycleNoncurrentVersionTransition.php create mode 100644 src/OSS/Model/LifecycleTag.php create mode 100644 src/OSS/Model/LifecycleTransition.php create mode 100644 src/OSS/Result/GetBucketAccessMonitorResult.php create mode 100644 tests/OSS/Tests/AccessMonitorConfigTest.php create mode 100644 tests/OSS/Tests/GetBucketAccessMonitorResultTest.php create mode 100644 tests/OSS/Tests/OssClientBucketAccessMonitorTest.php diff --git a/samples/Bucket.php b/samples/Bucket.php index a54b74e6..50a77e59 100644 --- a/samples/Bucket.php +++ b/samples/Bucket.php @@ -29,6 +29,7 @@ // Get the info of bucket $info = $ossClient->getBucketInfo($bucket); Common::println("bucket name:".$info->getName()."\n"); +Common::println("bucket access monitor:".$info->getAccessMonitor()."\n"); Common::println("bucket location:". $info->getLocation()."\n"); Common::println("bucket creation time:".$info->getCreateDate()."\n"); Common::println("bucket storage class:".$info->getStorageClass()."\n"); @@ -114,6 +115,7 @@ function getBucketInfo($ossClient, $bucket) try { $info = $ossClient->getBucketInfo($bucket); printf("bucket name:%s\n", $info->getName()); + printf("bucket access monitor:%s",$info->getAccessMonitor()."\n"); printf("bucket location:%s\n", $info->getLocation()); printf("bucket creation time:%s\n", $info->getCreateDate()); printf("bucket storage class:%s\n", $info->getStorageClass()); diff --git a/samples/BucketAccessMonitor.php b/samples/BucketAccessMonitor.php new file mode 100644 index 00000000..63adc4e7 --- /dev/null +++ b/samples/BucketAccessMonitor.php @@ -0,0 +1,62 @@ +putBucketAccessMonitor($bucket, $status); +printf('Put Bucket Access Monitor Success' . "\n"); + + +// get access monitor +$status = $ossClient->getBucketAccessMonitor($bucket); +printf('Get Bucket Access Monitor Status:%s'."\n",$status); + + +//******************************* For complete usage, see the following functions **************************************************** +putBucketAccessMonitor($ossClient,$bucket); +getBucketAccessMonitor($ossClient,$bucket); + +/** + * Put Bucket Access Monitor + * @param $ossClient OssClient + * @param string $bucket bucket_name string + */ +function putBucketAccessMonitor($ossClient, $bucket) +{ + try{ + $status = 'Enabled'; // set Enabled to enable access monitor; set Disabled to disable access monitor + $ossClient->putBucketAccessMonitor($bucket,$status); + printf('Put Bucket Access Monitor Success' . "\n"); + } catch(OssException $e) { + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); +} + +/** + * Get Bucket Access Monitor + * @param $ossClient OssClient + * @param string $bucket bucket_name + */ +function getBucketAccessMonitor($ossClient, $bucket) +{ + try{ + $status = $ossClient->getBucketAccessMonitor($bucket); + printf('Get Bucket Access Monitor Status:%s'."\n",$status); + } catch(OssException $e) { + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); +} diff --git a/samples/BucketLifecycle.php b/samples/BucketLifecycle.php index 04d2edd6..1c74e209 100644 --- a/samples/BucketLifecycle.php +++ b/samples/BucketLifecycle.php @@ -3,9 +3,14 @@ use OSS\OssClient; use OSS\Core\OssException; -use OSS\Model\LifecycleAction; -use OSS\Model\LifecycleConfig; use OSS\Model\LifecycleRule; +use OSS\Model\LifecycleConfig; +use OSS\Model\LifecycleExpiration; +use OSS\Model\LifecycleAbortMultipartUpload; +use OSS\Model\LifecycleTag; +use OSS\Model\LifecycleTransition; +use OSS\Model\LifecycleNoncurrentVersionTransition; + $bucket = Common::getBucketName(); $ossClient = Common::getOssClient(); @@ -15,10 +20,103 @@ // Set lifecycle configuration $lifecycleConfig = new LifecycleConfig(); -$actions = array(); -$actions[] = new LifecycleAction("Expiration", "Days", 3); -$lifecycleRule = new LifecycleRule("delete obsoleted files", "obsoleted/", "Enabled", $actions); -$lifecycleConfig->addRule($lifecycleRule); + +// rule 1: the lifecycle rule ID is' rule1 ', the prefix is' logs/', and the status is' Enabled ' +$rule1 = new LifecycleRule("rule1", "logs/", LifecycleRule::STATUS_ENANLED); +$lifecycleExpiration = new LifecycleExpiration(); +//set expiration time +$lifecycleExpiration->setDays(3); +$rule1->setExpiration($lifecycleExpiration); + +// The expired attributes that have not been uploaded will take effect one day after the object is last updated. +$lifecycleAbortMultipartUpload = new LifecycleAbortMultipartUpload(); +$lifecycleAbortMultipartUpload->setDays(1); +$rule1->setAbortMultipartUpload($lifecycleAbortMultipartUpload); + +$lifecycleConfig->addRule($rule1); + +// rule 2: set id,prefix,status +$rule2 = new LifecycleRule("rule2", "logs2/", LifecycleRule::STATUS_ENANLED); +// Convert the object storage type to AI within 30 days +$lifecycleTransition = new LifecycleTransition(); +$lifecycleTransition->setDays(30); +$lifecycleTransition->setStorageClass($ossClient::OSS_STORAGE_IA); +$rule2->setTransition($lifecycleTransition); +// Convert the object storage type to Archive within 60 days +$lifecycleTransition = new LifecycleTransition(); +$lifecycleTransition->setDays(60); +$lifecycleTransition->setStorageClass($ossClient::OSS_STORAGE_ARCHIVE); +$rule2->setTransition($lifecycleTransition); + +$lifecycleExpiration = new LifecycleExpiration(); +// The specified lifecycle rule takes effect 180 days after the object is last updated. +$lifecycleExpiration->setDays(180); +$rule2->setExpiration($lifecycleExpiration); +$lifecycleConfig->addRule($rule2); + +// rule 3: add expiration CreatedBeforeDate and AbortMultipartUpload CreatedBeforeDate +$rule3 = new LifecycleRule("rule3", "logs3/", LifecycleRule::STATUS_ENANLED); +$lifecycleExpiration = new LifecycleExpiration(); +// The last update time is earlier than 2017-01-01T00:00:00.000Z object to be overdue +$lifecycleExpiration->setCreatedBeforeDate("2017-01-01T00:00:00.000Z"); +$rule3->setExpiration($lifecycleExpiration); + +// The last update time is earlier than 2017-01-01T00:00:00.000Z Multipart to be overdue +$lifecycleAbortMultipartUpload = new LifecycleAbortMultipartUpload(); +$lifecycleAbortMultipartUpload->setCreatedBeforeDate("2017-01-01T00:00:00.000Z"); +$rule3->setAbortMultipartUpload($lifecycleAbortMultipartUpload); +$lifecycleConfig->addRule($rule3); + +// rule 4: add two tags +$rule4 = new LifecycleRule("rule4", "logs4/", LifecycleRule::STATUS_ENANLED); + +$tag = new LifecycleTag(); +$tag->setKey("key1"); +$tag->setValue("val1"); +$rule4->setTag($tag); + +$tag2 = new LifecycleTag(); +$tag2->setKey("key12"); +$tag2->setValue("val12"); +$rule4->setTag($tag2); +$lifecycleConfig->addRule($rule4); +$lifecycleTransition = new LifecycleTransition(); +$lifecycleTransition->setDays(30); +$lifecycleTransition->setStorageClass($ossClient::OSS_STORAGE_IA); +$rule4->setTransition($lifecycleTransition); + + +// rule 5: transition add IsAccessTime false +$rule5 = new LifecycleRule("rule5", "logs5/", LifecycleRule::STATUS_ENANLED); + +$lifecycleTransition = new LifecycleTransition(); +$lifecycleTransition->setDays(30); +$lifecycleTransition->setStorageClass($ossClient::OSS_STORAGE_IA); +$lifecycleTransition->setIsAccessTime(false); +$rule5->setTransition($lifecycleTransition); +$lifecycleConfig->addRule($rule5); + +// rule 6: set id,prefix,status transition add IsAccessTime,ReturnToStdWhenVisit +$rule6 = new LifecycleRule("rule6", "logs6/", LifecycleRule::STATUS_ENANLED); + +$lifecycleTransition = new LifecycleTransition(); +$lifecycleTransition->setDays(30); +$lifecycleTransition->setStorageClass($ossClient::OSS_STORAGE_IA); +$lifecycleTransition->setIsAccessTime(true); +$lifecycleTransition->setReturnToStdWhenVisit(false); +$rule6->setTransition($lifecycleTransition); +$lifecycleConfig->addRule($rule6); + +// rule 7: set id,prefix,status NoncurrentVersionExpiration addIsAccessTime,ReturnToStdWhenVisit +$rule7 = new LifecycleRule("rule7", "logs7/", LifecycleRule::STATUS_ENANLED); + +$nonTransition = new LifecycleNoncurrentVersionTransition(); +$nonTransition->setNoncurrentDays(30); +$nonTransition->setStorageClass($ossClient::OSS_STORAGE_IA); +$nonTransition->setIsAccessTime(true); +$nonTransition->setReturnToStdWhenVisit(true); +$rule7->setNoncurrentVersionTransition($nonTransition); +$lifecycleConfig->addRule($rule7); $ossClient->putBucketLifecycle($bucket, $lifecycleConfig); Common::println("bucket $bucket lifecycleConfig created:" . $lifecycleConfig->serializeToXml()); @@ -26,6 +124,77 @@ $lifecycleConfig = $ossClient->getBucketLifecycle($bucket); Common::println("bucket $bucket lifecycleConfig fetched:" . $lifecycleConfig->serializeToXml()); +// print lifecycle config +$rules = $lifecycleConfig->getRules(); +foreach ($rules as $rule){ + printf("=====================".$rule->getId()."====info================".PHP_EOL); + printf("Rule Id:".$rule->getId().PHP_EOL); + printf("Rule Status:".$rule->getStatus().PHP_EOL); + printf("Rule Prefix:".$rule->getPrefix().PHP_EOL); + + // print expiration + $expiration = $rule->getExpiration(); + if (isset($expiration)){ + if ($expiration->getDays()){ + printf("Rule Expiration Days:".$expiration->getDays().PHP_EOL); + } + if ($expiration->getDate()){ + printf("Rule Expiration Date:".$expiration->getDate().PHP_EOL); + } + if ($expiration->getCreatedBeforeDate()){ + printf("Rule Expiration Created Before Date:".$expiration->getCreatedBeforeDate().PHP_EOL); + } + if ($expiration->getExpiredObjectDeleteMarker()){ + printf("Rule Expiration Expired Object Delete Marker:".$expiration->getExpiredObjectDeleteMarker().PHP_EOL); + } + } + + // print tag + $tags = $rule->getTag(); + if (isset($tags)){ + foreach ($tags as $tag){ + printf("Rule Tag Key:".$tag->getKey().PHP_EOL); + printf("Rule Tag Value:".$tag->getValue().PHP_EOL); + } + } + // print transition + $transitions = $rule->getTransition(); + if (isset($transitions)){ + foreach ($transitions as $transition){ + printf("Rule Transition Days:".$transition->getDays().PHP_EOL); + printf("Rule Transition Created Before Date:".$transition->getCreatedBeforeDate().PHP_EOL); + printf("Rule Transition Storage Class:".$transition->getStorageClass().PHP_EOL); + printf("Rule Transition Is Access Time:".$transition->getIsAccessTime().PHP_EOL); + printf("Rule Transition Return To Std When Visit:".$transition->getReturnToStdWhenVisit().PHP_EOL); + } + } + + //print Abort Multipart Upload + $abortMultipartUpload = $rule->getAbortMultipartUpload(); + if (isset($abortMultipartUpload)){ + if ($abortMultipartUpload->getDays()){ + printf("Rule Abort Multipart Upload Days:".$abortMultipartUpload->getDays().PHP_EOL); + } + + if ($abortMultipartUpload->getCreatedBeforeDate()){ + printf("Rule Abort Multipart Upload Created Before Date:".$abortMultipartUpload->getCreatedBeforeDate().PHP_EOL); + } + + } + + //print Noncurrent Version Transition + $nonVersionTransitions = $rule->getNoncurrentVersionTransition(); + if (isset($nonVersionTransitions)){ + foreach ($nonVersionTransitions as $nonVersionTransition){ + printf("Rule Non Version Transition Non Current Days:".$nonVersionTransition->getNoncurrentDays().PHP_EOL); + printf("Rule Non Version Transition Storage Class:".$nonVersionTransition->getStorageClass().PHP_EOL); + printf("Rule Non Version Transition Is Access Time:".$nonVersionTransition->getIsAccessTime().PHP_EOL); + printf("Rule Non Version Transition Return To Std When Visit:".$nonVersionTransition->getReturnToStdWhenVisit().PHP_EOL); + } + } + +} + // Delete bucket lifecycle configuration $ossClient->deleteBucketLifecycle($bucket); Common::println("bucket $bucket lifecycleConfig deleted"); @@ -47,15 +216,102 @@ */ function putBucketLifecycle($ossClient, $bucket) { + // Set lifecycle configuration $lifecycleConfig = new LifecycleConfig(); - $actions = array(); - $actions[] = new LifecycleAction(OssClient::OSS_LIFECYCLE_EXPIRATION, OssClient::OSS_LIFECYCLE_TIMING_DAYS, 3); - $lifecycleRule = new LifecycleRule("delete obsoleted files", "obsoleted/", "Enabled", $actions); - $lifecycleConfig->addRule($lifecycleRule); - $actions = array(); - $actions[] = new LifecycleAction(OssClient::OSS_LIFECYCLE_EXPIRATION, OssClient::OSS_LIFECYCLE_TIMING_DATE, '2022-10-12T00:00:00.000Z'); - $lifecycleRule = new LifecycleRule("delete temporary files", "temporary/", "Enabled", $actions); - $lifecycleConfig->addRule($lifecycleRule); + + // rule 1: the lifecycle rule ID is' rule1 ', the prefix is' logs/', and the status is' Enabled ' + $rule1 = new LifecycleRule("rule1", "logs/", LifecycleRule::STATUS_ENANLED); + $lifecycleExpiration = new LifecycleExpiration(); + //set expiration time + $lifecycleExpiration->setDays(3); + $rule1->setExpiration($lifecycleExpiration); + + // The expired attributes that have not been uploaded will take effect one day after the object is last updated. + $lifecycleAbortMultipartUpload = new LifecycleAbortMultipartUpload(); + $lifecycleAbortMultipartUpload->setDays(1); + $rule1->setAbortMultipartUpload($lifecycleAbortMultipartUpload); + + $lifecycleConfig->addRule($rule1); + + // rule 2: the lifecycle rule ID is' rule2 ', the prefix is' logs2/', and the status is' Enabled ' + $rule2 = new LifecycleRule("rule2", "logs2/", LifecycleRule::STATUS_ENANLED); + // Convert the object storage type to AI within 30 days + $lifecycleTransition = new LifecycleTransition(); + $lifecycleTransition->setDays(30); + $lifecycleTransition->setStorageClass($ossClient::OSS_STORAGE_IA); + $rule2->setTransition($lifecycleTransition); + // Convert the object storage type to Archive within 60 days + $lifecycleTransition = new LifecycleTransition(); + $lifecycleTransition->setDays(60); + $lifecycleTransition->setStorageClass($ossClient::OSS_STORAGE_ARCHIVE); + $rule2->setTransition($lifecycleTransition); + + $lifecycleExpiration = new LifecycleExpiration(); + // The specified lifecycle rule takes effect 180 days after the object is last updated. + $lifecycleExpiration->setDays(180); + $rule2->setExpiration($lifecycleExpiration); + $lifecycleConfig->addRule($rule2); + + // rule 3 + $rule3 = new LifecycleRule("rule3", "logs3/", LifecycleRule::STATUS_ENANLED); + $lifecycleExpiration = new LifecycleExpiration(); + // The last update time is earlier than 2017-01-01T00:00:00.000Z object to be overdue + $lifecycleExpiration->setCreatedBeforeDate("2017-01-01T00:00:00.000Z"); + $rule3->setExpiration($lifecycleExpiration); + + // The last update time is earlier than 2017-01-01T00:00:00.000Z Multipart to be overdue + $lifecycleAbortMultipartUpload = new LifecycleAbortMultipartUpload(); + $lifecycleAbortMultipartUpload->setCreatedBeforeDate("2017-01-01T00:00:00.000Z"); + $rule3->setAbortMultipartUpload($lifecycleAbortMultipartUpload); + $lifecycleConfig->addRule($rule3); + + // rule 4: add two tags + $rule4 = new LifecycleRule("rule4", "logs4/", LifecycleRule::STATUS_ENANLED); + + $tag = new LifecycleTag(); + $tag->setKey("key1"); + $tag->setValue("val1"); + $rule4->setTag($tag); + $tag2 = new LifecycleTag(); + $tag2->setKey("key12"); + $tag2->setValue("val12"); + $rule4->setTag($tag2); + $lifecycleConfig->addRule($rule4); + $lifecycleTransition = new LifecycleTransition(); + $lifecycleTransition->setDays(30); + $lifecycleTransition->setStorageClass($ossClient::OSS_STORAGE_IA); + $rule4->setTransition($lifecycleTransition); + + // rule 5: + $rule5 = new LifecycleRule("rule5", "logs5/", LifecycleRule::STATUS_ENANLED); + + $lifecycleTransition = new LifecycleTransition(); + $lifecycleTransition->setDays(30); + $lifecycleTransition->setStorageClass($ossClient::OSS_STORAGE_IA); + $lifecycleTransition->setIsAccessTime(false); + $rule5->setTransition($lifecycleTransition); + $lifecycleConfig->addRule($rule5); + + // rule 6t + $rule6 = new LifecycleRule("rule6", "logs6/", LifecycleRule::STATUS_ENANLED); + + $lifecycleTransition = new LifecycleTransition(); + $lifecycleTransition->setDays(30); + $lifecycleTransition->setStorageClass($ossClient::OSS_STORAGE_IA); + $lifecycleTransition->setIsAccessTime(true); + $lifecycleTransition->setReturnToStdWhenVisit(false); + $rule6->setTransition($lifecycleTransition); + $lifecycleConfig->addRule($rule6); + + // rule 7 + $rule7 = new LifecycleRule("rule7", "logs7/", LifecycleRule::STATUS_ENANLED); + + $nonTransition = new LifecycleNoncurrentVersionTransition(); + $nonTransition->setNoncurrentDays(30); + $nonTransition->setStorageClass($ossClient::OSS_STORAGE_IA); + $nonTransition->setIsAccessTime(true); + $nonTransition->setReturnToStdWhenVisit(true); + $rule7->setNoncurrentVersionTransition($nonTransition); try { $ossClient->putBucketLifecycle($bucket, $lifecycleConfig); } catch (OssException $e) { @@ -75,7 +331,6 @@ function putBucketLifecycle($ossClient, $bucket) */ function getBucketLifecycle($ossClient, $bucket) { - $lifecycleConfig = null; try { $lifecycleConfig = $ossClient->getBucketLifecycle($bucket); } catch (OssException $e) { @@ -83,8 +338,79 @@ function getBucketLifecycle($ossClient, $bucket) printf($e->getMessage() . "\n"); return; } + print(__FUNCTION__ . ": OK" . "\n"); print($lifecycleConfig->serializeToXml() . "\n"); + // print lifecycle config + $rules = $lifecycleConfig->getRules(); + foreach ($rules as $rule){ + printf("=====================".$rule->getId()."====info================".PHP_EOL); + printf("Rule Id:".$rule->getId().PHP_EOL); + printf("Rule Status:".$rule->getStatus().PHP_EOL); + printf("Rule Prefix:".$rule->getPrefix().PHP_EOL); + + // print expiration + $expiration = $rule->getExpiration(); + if (isset($expiration)){ + if ($expiration->getDays()){ + printf("Rule Expiration Days:".$expiration->getDays().PHP_EOL); + } + if ($expiration->getDate()){ + printf("Rule Expiration Date:".$expiration->getDate().PHP_EOL); + } + if ($expiration->getCreatedBeforeDate()){ + printf("Rule Expiration Created Before Date:".$expiration->getCreatedBeforeDate().PHP_EOL); + } + if ($expiration->getExpiredObjectDeleteMarker()){ + printf("Rule Expiration Expired Object Delete Marker:".$expiration->getExpiredObjectDeleteMarker().PHP_EOL); + } + } + + // print tag + $tags = $rule->getTag(); + if (isset($tags)){ + foreach ($tags as $tag){ + printf("Rule Tag Key:".$tag->getKey().PHP_EOL); + printf("Rule Tag Value:".$tag->getValue().PHP_EOL); + } + } + // print transition + $transitions = $rule->getTransition(); + if (isset($transitions)){ + foreach ($transitions as $transition){ + printf("Rule Transition Days:".$transition->getDays().PHP_EOL); + printf("Rule Transition Created Before Date:".$transition->getCreatedBeforeDate().PHP_EOL); + printf("Rule Transition Storage Class:".$transition->getStorageClass().PHP_EOL); + printf("Rule Transition Is Access Time:".$transition->getIsAccessTime().PHP_EOL); + printf("Rule Transition Return To Std When Visit:".$transition->getReturnToStdWhenVisit().PHP_EOL); + } + } + + //print Abort Multipart Upload + $abortMultipartUpload = $rule->getAbortMultipartUpload(); + if (isset($abortMultipartUpload)){ + if ($abortMultipartUpload->getDays()){ + printf("Rule Abort Multipart Upload Days:".$abortMultipartUpload->getDays().PHP_EOL); + } + + if ($abortMultipartUpload->getCreatedBeforeDate()){ + printf("Rule Abort Multipart Upload Created Before Date:".$abortMultipartUpload->getCreatedBeforeDate().PHP_EOL); + } + + } + + //print Noncurrent Version Transition + $nonVersionTransitions = $rule->getNoncurrentVersionTransition(); + if (isset($nonVersionTransitions)){ + foreach ($nonVersionTransitions as $nonVersionTransition){ + printf("Rule Non Version Transition Non Current Days:".$nonVersionTransition->getNoncurrentDays().PHP_EOL); + printf("Rule Non Version Transition Storage Class:".$nonVersionTransition->getStorageClass().PHP_EOL); + printf("Rule Non Version Transition Is Access Time:".$nonVersionTransition->getIsAccessTime().PHP_EOL); + printf("Rule Non Version Transition Return To Std When Visit:".$nonVersionTransition->getReturnToStdWhenVisit().PHP_EOL); + } + } + + } } /** diff --git a/samples/Object.php b/samples/Object.php index bf6e86b0..27e7341b 100644 --- a/samples/Object.php +++ b/samples/Object.php @@ -31,6 +31,11 @@ $content = $ossClient->getObject($bucket, "b.file"); Common::println("b.file is fetched, the content is: " . $content); +// Get an oss object meta +$objectMeta = $ossClient->getSimplifiedObjectMeta($bucket, "b.file"); +Common::println("b.file last access time: " . $objectMeta['x-oss-last-access-time']); + + // Add a symlink to an object $content = $ossClient->putSymlink($bucket, "test-symlink", "b.file"); Common::println("test-symlink is created"); @@ -127,6 +132,7 @@ copyObject($ossClient, $bucket); modifyMetaForObject($ossClient, $bucket); getObjectMeta($ossClient, $bucket); +getSimplifiedObjectMeta($ossClient, $bucket); deleteObject($ossClient, $bucket); deleteObjects($ossClient, $bucket); doesObjectExist($ossClient, $bucket); @@ -550,6 +556,27 @@ function getObjectMeta($ossClient, $bucket) } } +/** + * Get object simple meta, that is, getSimplifiedObjectMeta + * + * @param OssClient $ossClient OssClient instance + * @param string $bucket bucket name + * @return null + */ +function getSimplifiedObjectMeta($ossClient, $bucket) +{ + $object = "oss-php-sdk-test/upload-test-object-name.txt"; + try { + $objectMeta = $ossClient->getSimplifiedObjectMeta($bucket, $object); + printf("last-access-time:%s",$objectMeta['x-oss-last-access-time']); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); +} + /** * Delete an object * diff --git a/src/OSS/Model/AccessMonitorConfig.php b/src/OSS/Model/AccessMonitorConfig.php new file mode 100644 index 00000000..4e50b98c --- /dev/null +++ b/src/OSS/Model/AccessMonitorConfig.php @@ -0,0 +1,68 @@ +Status)) { + $this->status = strval($xml->Status); + } + } + + /** + * Serialize the object into xml string. + * + * @return string + */ + public function serializeToXml() + { + $xml = new \SimpleXMLElement(''); + if (isset($this->status)) { + $xml->addChild('Status',$this->status); + } + return $xml->asXML(); + } + + public function __toString() + { + return $this->serializeToXml(); + } + + + /** + * @return string + */ + public function getStatus() + { + return $this->status; + } + + /** + * @param string $status + */ + public function setStatus($status) + { + $this->status = $status; + } + /** + * @var string + */ + private $status; +} + + diff --git a/src/OSS/Model/BucketInfo.php b/src/OSS/Model/BucketInfo.php index e211eed6..71be28e0 100644 --- a/src/OSS/Model/BucketInfo.php +++ b/src/OSS/Model/BucketInfo.php @@ -45,6 +45,16 @@ public function getName() return $this->name; } + /** + * Get access monitor + * + * @return string + */ + public function getAccessMonitor() + { + return $this->accessMonitor; + } + /** * Get bucket creation time. * @@ -111,6 +121,9 @@ public function parseFromXmlNode($xml) if (isset($xml->Name)) { $this->name = strval($xml->Name); } + if (isset($xml->AccessMonitor)) { + $this->accessMonitor = strval($xml->AccessMonitor); + } if (isset($xml->CreationDate)) { $this->createDate = strval($xml->CreationDate); } @@ -144,6 +157,13 @@ public function parseFromXmlNode($xml) */ private $name; + /** + * access monitor + * + * @var string + */ + private $accessMonitor; + /** * bucket creation time * diff --git a/src/OSS/Model/LifecycleAbortMultipartUpload.php b/src/OSS/Model/LifecycleAbortMultipartUpload.php new file mode 100644 index 00000000..4de2f783 --- /dev/null +++ b/src/OSS/Model/LifecycleAbortMultipartUpload.php @@ -0,0 +1,88 @@ +days = $days; + $this->createdBeforeDate = $createdBeforeDate; + } + /** + * Get Days + * + * @return int + */ + public function getDays() + { + return $this->days; + } + + /** + * @param $days int + */ + public function setDays($days) + { + $this->days = $days; + } + + /** + * Get Created Before Date + * + * @return string + */ + public function getCreatedBeforeDate() + { + return $this->createdBeforeDate; + } + + /** + * Set Created Before Date + * @param $createdBeforeDate string + */ + public function setCreatedBeforeDate($createdBeforeDate) + { + $this->createdBeforeDate = $createdBeforeDate; + } + + /** + * @param \SimpleXMLElement $xmlRule + */ + public function appendToXml(&$xmlRule) + { + if(isset($this->days) || isset($this->createdBeforeDate)){ + $xmlAbortMultipartUpload = $xmlRule->addChild("AbortMultipartUpload"); + } + + if (isset($this->days)){ + $xmlAbortMultipartUpload->addChild('Days', $this->days); + } + + if (isset($this->createdBeforeDate)){ + $xmlAbortMultipartUpload->addChild('CreatedBeforeDate', $this->createdBeforeDate); + } + } +} \ No newline at end of file diff --git a/src/OSS/Model/LifecycleAction.php b/src/OSS/Model/LifecycleAction.php deleted file mode 100644 index a0e21269..00000000 --- a/src/OSS/Model/LifecycleAction.php +++ /dev/null @@ -1,88 +0,0 @@ -action = $action; - $this->timeSpec = $timeSpec; - $this->timeValue = $timeValue; - } - - /** - * @return LifecycleAction - */ - public function getAction() - { - return $this->action; - } - - /** - * @param string $action - */ - public function setAction($action) - { - $this->action = $action; - } - - /** - * @return string - */ - public function getTimeSpec() - { - return $this->timeSpec; - } - - /** - * @param string $timeSpec - */ - public function setTimeSpec($timeSpec) - { - $this->timeSpec = $timeSpec; - } - - /** - * @return string - */ - public function getTimeValue() - { - return $this->timeValue; - } - - /** - * @param string $timeValue - */ - public function setTimeValue($timeValue) - { - $this->timeValue = $timeValue; - } - - /** - * Use appendToXml to insert actions into xml. - * - * @param \SimpleXMLElement $xmlRule - */ - public function appendToXml(&$xmlRule) - { - $xmlAction = $xmlRule->addChild($this->action); - $xmlAction->addChild($this->timeSpec, $this->timeValue); - } - - private $action; - private $timeSpec; - private $timeValue; - -} \ No newline at end of file diff --git a/src/OSS/Model/LifecycleConfig.php b/src/OSS/Model/LifecycleConfig.php index f2d2dc33..ed161238 100644 --- a/src/OSS/Model/LifecycleConfig.php +++ b/src/OSS/Model/LifecycleConfig.php @@ -4,9 +4,8 @@ use OSS\Core\OssException; - /** - * Class BucketLifecycleConfig + * Class LifecycleConfig * @package OSS\Model * @link http://help.aliyun.com/document_detail/oss/api-reference/bucket/PutBucketLifecycle.html */ @@ -29,21 +28,34 @@ public function parseFromXml($strXml) $id = strval($rule->ID); $prefix = strval($rule->Prefix); $status = strval($rule->Status); - $actions = array(); + $ruleTmp = new LifecycleRule($id, $prefix, $status); foreach ($rule as $key => $value) { - if ($key === 'ID' || $key === 'Prefix' || $key === 'Status') continue; - $action = $key; - $timeSpec = null; - $timeValue = null; - foreach ($value as $timeSpecKey => $timeValueValue) { - $timeSpec = $timeSpecKey; - $timeValue = strval($timeValueValue); - } - $actions[] = new LifecycleAction($action, $timeSpec, $timeValue); + if ($key === 'ID' || $key === 'Prefix' || $key === 'Status' || $key == "AtimeBase") continue; + $this->addNode($key, $value, $ruleTmp); + } + $this->rules[] = $ruleTmp; + } + } + + + /** + * @param $key string + * @param $value array + * @param $rule LifecycleRule + */ + private function addNode($key,$value,$rule){ + $class = "OSS\\Model\\Lifecycle".$key; + if (class_exists($class)){ + $lifecycleNode = new $class(); + foreach ($value as $k=> $val){ + $func = 'set'.$k; + $lifecycleNode->$func($val); } - $this->rules[] = new LifecycleRule($id, $prefix, $status, $actions); + $funcTwo = 'set'.$key; + $rule->$funcTwo($lifecycleNode); + }else{ + throw new OssException('Error: Could not find class ' . $class . '!'); } - return; } diff --git a/src/OSS/Model/LifecycleExpiration.php b/src/OSS/Model/LifecycleExpiration.php new file mode 100644 index 00000000..62b812de --- /dev/null +++ b/src/OSS/Model/LifecycleExpiration.php @@ -0,0 +1,145 @@ +days = $days; + $this->date = $date; + $this->createdBeforeDate = $createdBeforeDate; + $this->expiredObjectDeleteMarker = $expiredObjectDeleteMarker; + } + + /** + * Get Days + * + * @return int + */ + public function getDays() + { + return $this->days; + } + + /** + * @param $days int + */ + public function setDays($days) + { + $this->days = $days; + } + + /** + * Get date + * @return string + */ + public function getDate() + { + return $this->date; + } + + /** + * Set date + * @param $date string + */ + public function setDate($date) + { + $this->date = $date; + } + + /** + * Get Created Before Date + * + * @return string + */ + public function getCreatedBeforeDate() + { + return $this->createdBeforeDate; + } + + /** + * Set Created Before Date + * @param $createdBeforeDate string + */ + public function setCreatedBeforeDate($createdBeforeDate) + { + $this->createdBeforeDate = $createdBeforeDate; + } + + /** + * Get Expired Object DeleteMarker + * @return bool + */ + public function getExpiredObjectDeleteMarker() + { + return $this->expiredObjectDeleteMarker; + } + + /** + * Set Expired Object DeleteMarker + * @param $expiredObjectDeleteMarker bool + */ + public function setExpiredObjectDeleteMarker($expiredObjectDeleteMarker) + { + $this->expiredObjectDeleteMarker = $expiredObjectDeleteMarker; + } + + /** + * @param \SimpleXMLElement $xmlRule + */ + public function appendToXml(&$xmlRule) + { + if(isset($this->days) || isset($this->date) || isset($this->createdBeforeDate) || isset($this->expiredObjectDeleteMarker)){ + $xmlExpiration = $xmlRule->addChild("Expiration"); + } + + if (isset($this->days)){ + $xmlExpiration->addChild('Days', $this->days); + } + + if (isset($this->date)){ + $xmlExpiration->addChild('Date', $this->date); + } + + if (isset($this->createdBeforeDate)){ + $xmlExpiration->addChild('CreatedBeforeDate', $this->createdBeforeDate); + } + + if (isset($this->expiredObjectDeleteMarker)){ + $xmlExpiration->addChild('ExpiredObjectDeleteMarker', is_bool($this->expiredObjectDeleteMarker) ? json_encode($this->expiredObjectDeleteMarker):$this->expiredObjectDeleteMarker); + } + } +} \ No newline at end of file diff --git a/src/OSS/Model/LifecycleNoncurrentVersionExpiration.php b/src/OSS/Model/LifecycleNoncurrentVersionExpiration.php new file mode 100644 index 00000000..e78b1012 --- /dev/null +++ b/src/OSS/Model/LifecycleNoncurrentVersionExpiration.php @@ -0,0 +1,59 @@ +noncurrentDays = $noncurrentDays; + } + /** + * Get Noncurrent Days + * + * @return int + */ + public function getNoncurrentDays() + { + return $this->noncurrentDays; + } + + /** + * Set Noncurrent Days + * @param $days int + */ + public function setNoncurrentDays($noncurrentDays) + { + $this->noncurrentDays = $noncurrentDays; + } + + /** + * @param \SimpleXMLElement $xmlRule + */ + public function appendToXml(&$xmlRule) + { + + if (isset($this->noncurrentDays)){ + $xmlNoncurrentVersionExpiration = $xmlRule->addChild("NoncurrentVersionExpiration"); + $xmlNoncurrentVersionExpiration->addChild('NoncurrentDays', $this->noncurrentDays); + } + } + +} \ No newline at end of file diff --git a/src/OSS/Model/LifecycleNoncurrentVersionTransition.php b/src/OSS/Model/LifecycleNoncurrentVersionTransition.php new file mode 100644 index 00000000..57b1d0c1 --- /dev/null +++ b/src/OSS/Model/LifecycleNoncurrentVersionTransition.php @@ -0,0 +1,140 @@ +noncurrentDays = $noncurrentDays; + $this->storageClass = $storageClass; + $this->isAccessTime = $isAccessTime; + $this->returnToStdWhenVisit = $returnToStdWhenVisit; + } + /** + * Get Days + * + * @return int + */ + public function getNoncurrentDays() + { + return $this->noncurrentDays; + } + + /** + * @param $days int + */ + public function setNoncurrentDays($nonCurrentDays) + { + $this->noncurrentDays = $nonCurrentDays; + } + + /** + * Get storageClass + * @return string + */ + public function getStorageClass(){ + return $this->storageClass; + } + + /** + * Set storageClass + * @param $storageClass string + */ + public function setStorageClass($storageClass){ + $this->storageClass = $storageClass; + } + + /** + * Get isAccessTime + * @return boolean + */ + public function getIsAccessTime(){ + return $this->isAccessTime; + } + + /** + * Set isAccessTime + * @param $isAccessTime boolean + */ + public function setIsAccessTime($isAccessTime){ + $this->isAccessTime = $isAccessTime; + } + + /** + * Get Return To Std When Visit + * @return boolean + */ + public function getReturnToStdWhenVisit(){ + return $this->returnToStdWhenVisit; + } + + /** + * Set Return To Std When Visit + * @param $isAccessTime boolean + */ + public function setReturnToStdWhenVisit($returnToStdWhenVisit){ + $this->returnToStdWhenVisit = $returnToStdWhenVisit; + } + + + /** + * @param \SimpleXMLElement $xmlRule + */ + public function appendToXml(&$xmlRule) + { + if(isset($this->days) || isset($this->storageClass) || isset($this->isAccessTime) || isset($this->returnToStdWhenVisit) ){ + $xmlNonTransition = $xmlRule->addChild("NoncurrentVersionTransition"); + } + + if (isset($this->noncurrentDays)){ + $xmlNonTransition->addChild('NoncurrentDays', $this->noncurrentDays); + } + + if (isset($this->storageClass)){ + $xmlNonTransition->addChild('StorageClass', $this->storageClass); + } + + if (isset($this->isAccessTime)){ + $xmlNonTransition->addChild('IsAccessTime',is_bool($this->isAccessTime) ? json_encode($this->isAccessTime):$this->isAccessTime); + } + + if (isset($this->returnToStdWhenVisit)){ + $xmlNonTransition->addChild('ReturnToStdWhenVisit', is_bool($this->returnToStdWhenVisit) ? json_encode($this->returnToStdWhenVisit):$this->returnToStdWhenVisit); + } + + } + +} \ No newline at end of file diff --git a/src/OSS/Model/LifecycleRule.php b/src/OSS/Model/LifecycleRule.php index 73c6cc35..99a2ce89 100644 --- a/src/OSS/Model/LifecycleRule.php +++ b/src/OSS/Model/LifecycleRule.php @@ -11,6 +11,67 @@ */ class LifecycleRule { + + /** + * @var string + */ + private $id; + + /** + * @var string + */ + private $prefix; + + /** + * @var string + */ + private $status; + + /** + * @var LifecycleExpiration + */ + private $expiration; + /** + * @var LifecycleAbortMultipartUpload + */ + private $abortMultipartUpload; + + /** + * @var LifecycleTag[] + */ + private $tag = array(); + /** + * @var LifecycleTransition[] + */ + private $transition = array(); + + /** + * @var LifecycleNoncurrentVersionTransition[] + */ + private $nonVersionTransition = array(); + + /** + * @var LifecycleNoncurrentVersionExpiration + */ + private $noncurrentVersionExpiration; + + const STATUS_ENANLED = "Enabled"; + const STATUS_DISABLED = "Disabled"; + + /** + * LifecycleRule constructor. + * + * @param string $id rule Id + * @param string $prefix File prefix + * @param string $status Rule status + */ + public function __construct($id, $prefix, $status) + { + $this->id = $id; + $this->prefix = $prefix; + $this->status = $status; + } + /** * Get Id * @@ -70,39 +131,104 @@ public function setStatus($status) } /** - * - * @return LifecycleAction[] + * Get Lifecycle Expiration + * @return LifecycleExpiration */ - public function getActions() - { - return $this->actions; + public function getExpiration(){ + return $this->expiration; } /** - * @param LifecycleAction[] $actions + * Set Lifecycle Expiration + * @param $expiration LifecycleExpiration */ - public function setActions($actions) - { - $this->actions = $actions; + public function setExpiration($expiration){ + $this->expiration = $expiration; } + /** + * Get Lifecycle Abort Multipart Upload + * @return LifecycleAbortMultipartUpload + */ + public function getAbortMultipartUpload(){ + return $this->abortMultipartUpload; + } /** - * LifecycleRule constructor. - * - * @param string $id rule Id - * @param string $prefix File prefix - * @param string $status Rule status, which has the following valid values: [self::LIFECYCLE_STATUS_ENABLED, self::LIFECYCLE_STATUS_DISABLED] - * @param LifecycleAction[] $actions + * Set Lifecycle Abort Multipart Upload + * @param $abortMultipartUpload LifecycleAbortMultipartUpload */ - public function __construct($id, $prefix, $status, $actions) - { - $this->id = $id; - $this->prefix = $prefix; - $this->status = $status; - $this->actions = $actions; + public function setAbortMultipartUpload($abortMultipartUpload){ + $this->abortMultipartUpload = $abortMultipartUpload; + } + + /** + * Get Lifecycle Tag + * @return LifecycleTag[] + */ + public function getTag(){ + return $this->tag; } + /** + * Set Lifecycle Tag + * @param $tag LifecycleTag + */ + public function setTag($tag){ + $this->tag[] = $tag; + } + + /** + * Get Lifecycle Transition + * @return LifecycleTransition[] + */ + public function getTransition(){ + return $this->transition; + } + + /** + * Set Lifecycle Transition + * @param $transition LifecycleTransition + */ + public function setTransition($transition){ + $this->transition[] = $transition; + } + + + /** + * Get Lifecycle Non Current Version Transition + * @return LifecycleNoncurrentVersionTransition[] + */ + public function getNoncurrentVersionTransition(){ + return $this->nonVersionTransition; + } + + /** + * Set Lifecycle Non Current Version Transition + * @param $transition LifecycleNoncurrentVersionTransition + */ + public function setNoncurrentVersionTransition($nonVersionTransition){ + $this->nonVersionTransition[] = $nonVersionTransition; + } + + /** + * Get Lifecycle Noncurrent Version Expiration + * @return LifecycleNoncurrentVersionExpiration + */ + public function getNoncurrentVersionExpiration(){ + return $this->noncurrentVersionExpiration; + } + + /** + * Set Lifecycle Noncurrent Version Expiration + * @param $noncurrentVersionExpiration LifecycleNoncurrentVersionExpiration + */ + public function setNoncurrentVersionExpiration($noncurrentVersionExpiration){ + $this->noncurrentVersionExpiration = $noncurrentVersionExpiration; + } + + + /** * @param \SimpleXMLElement $xmlRule */ @@ -111,16 +237,36 @@ public function appendToXml(&$xmlRule) $xmlRule->addChild('ID', $this->id); $xmlRule->addChild('Prefix', $this->prefix); $xmlRule->addChild('Status', $this->status); - foreach ($this->actions as $action) { - $action->appendToXml($xmlRule); + + if (isset($this->expiration)){ + $this->expiration->appendToXml($xmlRule); + + } + if (isset($this->abortMultipartUpload)){ + $this->abortMultipartUpload->appendToXml($xmlRule); } - } - private $id; - private $prefix; - private $status; - private $actions = array(); + if (isset($this->tag)){ + foreach ($this->tag as $tag){ + $tag->appendToXml($xmlRule); + } + } - const LIFECYCLE_STATUS_ENABLED = 'Enabled'; - const LIFECYCLE_STATUS_DISABLED = 'Disabled'; + if (isset($this->transition)){ + foreach ($this->transition as $transition){ + $transition->appendToXml($xmlRule); + } + } + + if (isset($this->nonVersionTransition)){ + foreach ($this->nonVersionTransition as $nonVersionTransition){ + $nonVersionTransition->appendToXml($xmlRule); + } + } + + if (isset($this->noncurrentVersionExpiration)){ + $this->noncurrentVersionExpiration->appendToXml($xmlRule); + + } + } } \ No newline at end of file diff --git a/src/OSS/Model/LifecycleTag.php b/src/OSS/Model/LifecycleTag.php new file mode 100644 index 00000000..479bbc38 --- /dev/null +++ b/src/OSS/Model/LifecycleTag.php @@ -0,0 +1,93 @@ +key = $key; + $this->value = $value; + } + + /** + * Get Key + * + * @return string + */ + public function getKey() + { + return $this->key; + } + + /** + * Set key + * @param $key string + */ + public function setKey($key) + { + $this->key = $key; + } + + /** + * Get value + * + * @return string + */ + public function getValue() + { + return $this->value; + } + + /** + * Set value + * @param $value string + */ + public function setValue($value) + { + $this->value = $value; + } + + /** + * @param \SimpleXMLElement $xmlRule + */ + public function appendToXml(&$xmlRule) + { + if(isset($this->key) || isset($this->value)){ + $xmlTag = $xmlRule->addChild("Tag"); + } + + if (isset($this->key)){ + $xmlTag->addChild('Key', $this->key); + } + + if (isset($this->value)){ + $xmlTag->addChild('Value', $this->value); + } + + + } +} \ No newline at end of file diff --git a/src/OSS/Model/LifecycleTransition.php b/src/OSS/Model/LifecycleTransition.php new file mode 100644 index 00000000..53d4acbe --- /dev/null +++ b/src/OSS/Model/LifecycleTransition.php @@ -0,0 +1,171 @@ +days = $days; + $this->createdBeforeDate = $createdBeforeDate; + $this->storageClass = $storageClass; + $this->isAccessTime = $isAccessTime; + $this->returnToStdWhenVisit = $returnToStdWhenVisit; + } + + /** + * Get Days + * + * @return int + */ + public function getDays() + { + return $this->days; + } + + /** + * @param $days int + */ + public function setDays($days) + { + $this->days = $days; + } + + /** + * Get Created Before Date + * + * @return string + */ + public function getCreatedBeforeDate() + { + return $this->createdBeforeDate; + } + + /** + * Set Created Before Date + * @param $createdBeforeDate string + */ + public function setCreatedBeforeDate($createdBeforeDate) + { + $this->createdBeforeDate = $createdBeforeDate; + } + + /** + * Get storageClass + * @return string + */ + public function getStorageClass(){ + return $this->storageClass; + } + + /** + * Set storageClass + * @param $storageClass string + */ + public function setStorageClass($storageClass){ + $this->storageClass = $storageClass; + } + + /** + * Get isAccessTime + * @return bool + */ + public function getIsAccessTime(){ + return $this->isAccessTime; + } + + /** + * Set isAccessTime + * @param $isAccessTime bool + */ + public function setIsAccessTime($isAccessTime){ + $this->isAccessTime = $isAccessTime; + } + + /** + * Get Return To Std When Visit + * @return bool + */ + public function getReturnToStdWhenVisit(){ + return $this->returnToStdWhenVisit; + } + + /** + * Set Return To Std When Visit + * @param $returnToStdWhenVisit bool + */ + public function setReturnToStdWhenVisit($returnToStdWhenVisit){ + $this->returnToStdWhenVisit = $returnToStdWhenVisit; + } + + + /** + * @param \SimpleXMLElement $xmlRule + */ + public function appendToXml(&$xmlRule) + { + if(isset($this->days) || isset($this->createdBeforeDate) || isset($this->storageClass) || isset($this->isAccessTime) || isset($this->returnToStdWhenVisit) ){ + $xmlTransition = $xmlRule->addChild("Transition"); + } + + if (isset($this->days)){ + $xmlTransition->addChild('Days', $this->days); + } + + if (isset($this->createdBeforeDate)){ + $xmlTransition->addChild('CreatedBeforeDate', $this->createdBeforeDate); + } + + if (isset($this->storageClass)){ + $xmlTransition->addChild('StorageClass', $this->storageClass); + } + + if (isset($this->isAccessTime)){ + $xmlTransition->addChild('IsAccessTime', is_bool($this->isAccessTime) ? json_encode($this->isAccessTime):$this->isAccessTime); + } + + if (isset($this->returnToStdWhenVisit)){ + $xmlTransition->addChild('ReturnToStdWhenVisit',is_bool($this->returnToStdWhenVisit) ? json_encode($this->returnToStdWhenVisit):$this->returnToStdWhenVisit); + } + } +} \ No newline at end of file diff --git a/src/OSS/Model/RefererConfig.php b/src/OSS/Model/RefererConfig.php index 08301439..50c3778d 100644 --- a/src/OSS/Model/RefererConfig.php +++ b/src/OSS/Model/RefererConfig.php @@ -20,7 +20,7 @@ public function parseFromXml($strXml) if (!isset($xml->AllowEmptyReferer)) return; if (!isset($xml->RefererList)) return; $this->allowEmptyReferer = - (strval($xml->AllowEmptyReferer) === 'TRUE' || strval($xml->AllowEmptyReferer) === 'true') ? true : false; + (strval($xml->AllowEmptyReferer) === '' || strval($xml->AllowEmptyReferer) === 'true') ? true : false; foreach ($xml->RefererList->Referer as $key => $refer) { $this->refererList[] = strval($refer); diff --git a/src/OSS/OssClient.php b/src/OSS/OssClient.php index c9533448..c4dd4d2a 100644 --- a/src/OSS/OssClient.php +++ b/src/OSS/OssClient.php @@ -9,6 +9,8 @@ use OSS\Http\RequestCore; use OSS\Http\RequestCore_Exception; use OSS\Http\ResponseCore; +use OSS\Model\AccessMonitorConfig; +use OSS\Model\BucketInfo; use OSS\Model\CorsConfig; use OSS\Model\CnameConfig; use OSS\Model\LoggingConfig; @@ -19,6 +21,7 @@ use OSS\Model\StorageCapacityConfig; use OSS\Result\AclResult; use OSS\Result\BodyResult; +use OSS\Result\GetBucketAccessMonitorResult; use OSS\Result\GetCorsResult; use OSS\Result\GetLifecycleResult; use OSS\Result\GetLocationResult; @@ -1633,6 +1636,50 @@ public function getBucketTransferAcceleration($bucket,$options = NULL) return $result->getData(); } + /** + * Put Bucket Access Monitor + * @param string $bucket bucket name + * @param string $status Enabled|Disabled + * @param null $options + * @return null + * @throws OssException + */ + public function putBucketAccessMonitor($bucket,$status,$options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_PUT; + $options[self::OSS_OBJECT] = '/'; + $options[self::OSS_SUB_RESOURCE] = 'accessmonitor'; + $options[self::OSS_CONTENT_TYPE] = 'application/xml'; + $config = new AccessMonitorConfig(); + $config->setStatus($status); + $options[self::OSS_CONTENT] = $config->serializeToXml(); + $response = $this->auth($options); + $result = new HeaderResult($response); + return $result->getData(); + } + + /** + * Get Bucket AccessMonitor + * @param string $bucket + * @param array|null $options + * @return GetBucketAccessMonitorResult + * @throws OssException + */ + public function getBucketAccessMonitor($bucket,$options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_GET; + $options[self::OSS_OBJECT] = '/'; + $options[self::OSS_SUB_RESOURCE] = 'accessmonitor'; + $options[self::OSS_CONTENT_TYPE] = 'application/xml'; + $response = $this->auth($options); + $result = new GetBucketAccessMonitorResult($response); + return $result->getData(); + } + /** * Lists the bucket's object list (in ObjectListInfo) * @@ -3412,8 +3459,27 @@ private function generateSignableResource($options) $signableResource .= '/' . str_replace(array('%2F', '%25'), array('/', '%'), rawurlencode($options[self::OSS_OBJECT])); } if (isset($options[self::OSS_SUB_RESOURCE])) { - $signableResource .= '?' . $options[self::OSS_SUB_RESOURCE]; + $signableResource = $this->fliterResource($signableResource,$options[self::OSS_SUB_RESOURCE]); + + } + return $signableResource; + } + + /** + * Filter some resource + * @param $signableResource + * @param $resource + * @return mixed|string + */ + private function fliterResource($signableResource,$resource){ + $filterResource = array( + 'accessmonitor' + ); + + if (!in_array($resource,$filterResource)){ + $signableResource .= '?' .$resource; } + return $signableResource; } diff --git a/src/OSS/Result/GetBucketAccessMonitorResult.php b/src/OSS/Result/GetBucketAccessMonitorResult.php new file mode 100644 index 00000000..569bf342 --- /dev/null +++ b/src/OSS/Result/GetBucketAccessMonitorResult.php @@ -0,0 +1,23 @@ +rawResponse->body; + $config = new AccessMonitorConfig(); + $config->parseFromXml($content); + return $config->getStatus(); + } +} diff --git a/tests/OSS/Tests/AccessMonitorConfigTest.php b/tests/OSS/Tests/AccessMonitorConfigTest.php new file mode 100644 index 00000000..9e383625 --- /dev/null +++ b/tests/OSS/Tests/AccessMonitorConfigTest.php @@ -0,0 +1,57 @@ + + +Enabled + +BBBB; + private $validXml1 = << + +Disabled + +BBBB; + + private $invalidXml1 = << + + +BBBB; + + public function testParseValidXml() + { + $accessConfig = new AccessMonitorConfig(); + $accessConfig->parseFromXml($this->validXml); + $this->assertEquals($this->cleanXml($this->validXml), $this->cleanXml(strval($accessConfig))); + $this->assertEquals("Enabled",$accessConfig->getStatus()); + } + + public function testValidXml1() + { + $accessConfig = new AccessMonitorConfig(); + $accessConfig->parseFromXml($this->validXml1); + $this->assertEquals($this->cleanXml($this->validXml1), $this->cleanXml(strval($accessConfig))); + $this->assertEquals("Disabled",$accessConfig->getStatus()); + } + + public function testInvalidXml1() + { + $accessConfig = new AccessMonitorConfig(); + $accessConfig->parseFromXml($this->invalidXml1); + $this->assertEquals(null,$accessConfig->getStatus()); + } + + private function cleanXml($xml) + { + return str_replace("\n", "", str_replace("\r", "", $xml)); + } +} diff --git a/tests/OSS/Tests/GetBucketAccessMonitorResultTest.php b/tests/OSS/Tests/GetBucketAccessMonitorResultTest.php new file mode 100644 index 00000000..4fc76b6b --- /dev/null +++ b/tests/OSS/Tests/GetBucketAccessMonitorResultTest.php @@ -0,0 +1,63 @@ + + +Enabled + +BBBB; + private $validXml1 = << + +Disabled + +BBBB; + + private $invalidXml2 = << + + +BBBB; + + public function testParseValidXml() + { + $response = new ResponseCore(array(), $this->validXml, 200); + $result = new GetBucketAccessMonitorResult($response); + $this->assertTrue($result->isOK()); + $this->assertNotNull($result->getData()); + $this->assertNotNull($result->getRawResponse()); + $status = $result->getData(); + $this->assertEquals("Enabled", $status); + } + + public function testParseValidXml1() + { + $response = new ResponseCore(array(), $this->validXml1, 200); + $result = new GetBucketAccessMonitorResult($response); + $this->assertTrue($result->isOK()); + $this->assertNotNull($result->getData()); + $this->assertNotNull($result->getRawResponse()); + $status = $result->getData(); + $this->assertEquals("Disabled", $status); + } + + public function testParseInvalidXml2() + { + $response = new ResponseCore(array(), $this->invalidXml2, 200); + $result = new GetBucketTransferAccelerationResult($response); + $this->assertTrue($result->isOK()); + $this->assertNotNull($result->getData()); + $this->assertNotNull($result->getRawResponse()); + $this->assertNotNull($result->getRawResponse()->body); + $status= $result->getData(); + $this->assertEquals(false, $status); + } +} diff --git a/tests/OSS/Tests/GetLifecycleResultTest.php b/tests/OSS/Tests/GetLifecycleResultTest.php index e6d9a725..d943a1fc 100644 --- a/tests/OSS/Tests/GetLifecycleResultTest.php +++ b/tests/OSS/Tests/GetLifecycleResultTest.php @@ -24,10 +24,35 @@ class GetLifecycleResultTest extends \PHPUnit\Framework\TestCase temporary/ Enabled 2022-10-12T00:00:00.000Z -2022-10-12T00:00:00.000Z BBBB; + private $validXml1 = << +rule1logs/Enabled31rule2logs2/Enabled18030IA60Archiverule3logs3/Enabled2017-01-01T00:00:00.000Z2017-01-01T00:00:00.000Zrule4logs4/Enabledkey1val1key12val1230IArule5logs5/Enabled30IAfalserule6logs6/Enabled30IAtruefalserule7logs7/Enabled30IAtruetrue + +BBB; + + private $inValidXml = << + + +delete obsoleted files +obsoleted/ +Enabled +3 + + +delete temporary files +temporary/ +Enabled +2022-10-12T00:00:00.000Z +2022-10-12T00:00:00.000Z + + +AAA; + + public function testParseValidXml() { @@ -40,6 +65,29 @@ public function testParseValidXml() $this->assertEquals($this->cleanXml($this->validXml), $this->cleanXml($lifecycleConfig->serializeToXml())); } + public function testInValidXml() + { + $response = new ResponseCore(array(), $this->inValidXml, 200); + try { + $result = new GetLifecycleResult($response); + $this->assertFalse(true); + } catch (OssException $e) { + printf($e->getMessage()); + $this->assertTrue(true); + } + } + + public function testParseValidXmlOne() + { + $response = new ResponseCore(array(), $this->validXml1, 200); + $result = new GetLifecycleResult($response); + $this->assertTrue($result->isOK()); + $this->assertNotNull($result->getData()); + $this->assertNotNull($result->getRawResponse()); + $lifecycleConfig = $result->getData(); + $this->assertEquals($this->cleanXml($this->validXml1), $this->cleanXml($lifecycleConfig->serializeToXml())); + } + private function cleanXml($xml) { return str_replace("\n", "", str_replace("\r", "", $xml)); @@ -52,6 +100,7 @@ public function testInvalidResponse() $result = new GetLifecycleResult($response); $this->assertTrue(false); } catch (OssException $e) { + printf($e->getMessage()); $this->assertTrue(true); } } diff --git a/tests/OSS/Tests/LifecycleConfigTest.php b/tests/OSS/Tests/LifecycleConfigTest.php index 063e4364..a1598c7a 100644 --- a/tests/OSS/Tests/LifecycleConfigTest.php +++ b/tests/OSS/Tests/LifecycleConfigTest.php @@ -3,31 +3,24 @@ namespace OSS\Tests; use OSS\Core\OssException; -use OSS\Model\LifecycleAction; use OSS\Model\LifecycleConfig; +use OSS\Model\LifecycleNoncurrentVersionExpiration; use OSS\Model\LifecycleRule; +use OSS\OssClient; +use OSS\Model\LifecycleExpiration; +use OSS\Model\LifecycleAbortMultipartUpload; +use OSS\Model\LifecycleTag; +use OSS\Model\LifecycleTransition; +use OSS\Model\LifecycleNoncurrentVersionTransition; class LifecycleConfigTest extends \PHPUnit\Framework\TestCase { - private $validLifecycle = << - - -delete obsoleted files -obsoleted/ -Enabled -3 - - -delete temporary files -temporary/ -Enabled -2022-10-12T00:00:00.000Z -2022-10-12T00:00:00.000Z - - -BBBB; +rule1logs/Enabled31rule2logs2/Enabled18030IA60Archiverule3logs3/Enabled2017-01-01T00:00:00.000Z2017-01-01T00:00:00.000Zrule4logs4/Enabledkey1val1key12val1230IArule5logs5/Enabled30IAfalserule6logs6/Enabled30IAtruefalserule7logs7/Enabled30IAtruetrue + +BBB; private $validLifecycle2 = << @@ -47,23 +40,91 @@ class LifecycleConfigTest extends \PHPUnit\Framework\TestCase BBBB; public function testConstructValidConfig() - { - $lifecycleConfig = new LifecycleConfig(); - $actions = array(); - $actions[] = new LifecycleAction("Expiration", "Days", 3); - $lifecycleRule = new LifecycleRule("delete obsoleted files", "obsoleted/", "Enabled", $actions); - $lifecycleConfig->addRule($lifecycleRule); - $actions = array(); - $actions[] = new LifecycleAction("Expiration", "Date", '2022-10-12T00:00:00.000Z'); - $actions[] = new LifecycleAction("Expiration2", "Date", '2022-10-12T00:00:00.000Z'); - $lifecycleRule = new LifecycleRule("delete temporary files", "temporary/", "Enabled", $actions); - $lifecycleConfig->addRule($lifecycleRule); - try { - $lifecycleConfig->addRule(null); - $this->assertFalse(true); - } catch (OssException $e) { - $this->assertEquals('lifecycleRule is null', $e->getMessage()); - } + {$lifecycleConfig = new LifecycleConfig(); + + $rule1 = new LifecycleRule("rule1", "logs/", LifecycleRule::STATUS_ENANLED); + $lifecycleExpiration = new LifecycleExpiration(); + $lifecycleExpiration->setDays(3); + $rule1->setExpiration($lifecycleExpiration); + + $lifecycleAbortMultipartUpload = new LifecycleAbortMultipartUpload(); + $lifecycleAbortMultipartUpload->setDays(1); + $rule1->setAbortMultipartUpload($lifecycleAbortMultipartUpload); + + $lifecycleConfig->addRule($rule1); + + $rule2 = new LifecycleRule("rule2", "logs2/", LifecycleRule::STATUS_ENANLED); + $lifecycleTransition = new LifecycleTransition(); + $lifecycleTransition->setDays(30); + $lifecycleTransition->setStorageClass(OssClient::OSS_STORAGE_IA); + $rule2->setTransition($lifecycleTransition); + // 60 天 转换Object的存储类型为 Archive + $lifecycleTransition = new LifecycleTransition(); + $lifecycleTransition->setDays(60); + $lifecycleTransition->setStorageClass(OssClient::OSS_STORAGE_ARCHIVE); + $rule2->setTransition($lifecycleTransition); + + $lifecycleExpiration = new LifecycleExpiration(); + $lifecycleExpiration->setDays(180); + $rule2->setExpiration($lifecycleExpiration); + $lifecycleConfig->addRule($rule2); + + $rule3 = new LifecycleRule("rule3", "logs3/", LifecycleRule::STATUS_ENANLED); + $lifecycleExpiration = new LifecycleExpiration(); + $lifecycleExpiration->setCreatedBeforeDate("2017-01-01T00:00:00.000Z"); + $rule3->setExpiration($lifecycleExpiration); + + $lifecycleAbortMultipartUpload = new LifecycleAbortMultipartUpload(); + $lifecycleAbortMultipartUpload->setCreatedBeforeDate("2017-01-01T00:00:00.000Z"); + $rule3->setAbortMultipartUpload($lifecycleAbortMultipartUpload); + $lifecycleConfig->addRule($rule3); + + $rule4 = new LifecycleRule("rule4", "logs4/", LifecycleRule::STATUS_ENANLED); + + $tag = new LifecycleTag(); + $tag->setKey("key1"); + $tag->setValue("val1"); + $rule4->setTag($tag); + + $tag2 = new LifecycleTag(); + $tag2->setKey("key12"); + $tag2->setValue("val12"); + $rule4->setTag($tag2); + $lifecycleConfig->addRule($rule4); + $lifecycleTransition = new LifecycleTransition(); + $lifecycleTransition->setDays(30); + $lifecycleTransition->setStorageClass(OssClient::OSS_STORAGE_IA); + $rule4->setTransition($lifecycleTransition); + + $rule5 = new LifecycleRule("rule5", "logs5/", LifecycleRule::STATUS_ENANLED); + + $lifecycleTransition = new LifecycleTransition(); + $lifecycleTransition->setDays(30); + $lifecycleTransition->setStorageClass(OssClient::OSS_STORAGE_IA); + $lifecycleTransition->setIsAccessTime(false); + $rule5->setTransition($lifecycleTransition); + $lifecycleConfig->addRule($rule5); + + $rule6 = new LifecycleRule("rule6", "logs6/", LifecycleRule::STATUS_ENANLED); + + $lifecycleTransition = new LifecycleTransition(); + $lifecycleTransition->setDays(30); + $lifecycleTransition->setStorageClass(OssClient::OSS_STORAGE_IA); + $lifecycleTransition->setIsAccessTime(true); + $lifecycleTransition->setReturnToStdWhenVisit(false); + $rule6->setTransition($lifecycleTransition); + $lifecycleConfig->addRule($rule6); + + $rule7 = new LifecycleRule("rule7", "logs7/", LifecycleRule::STATUS_ENANLED); + + $nonTransition = new LifecycleNoncurrentVersionTransition(); + $nonTransition->setNoncurrentDays(30); + $nonTransition->setStorageClass(OssClient::OSS_STORAGE_IA); + $nonTransition->setIsAccessTime(true); + $nonTransition->setReturnToStdWhenVisit(true); + $rule7->setNoncurrentVersionTransition($nonTransition); + $lifecycleConfig->addRule($rule7); + $this->assertEquals($this->cleanXml(strval($lifecycleConfig)), $this->cleanXml($this->validLifecycle)); } @@ -72,9 +133,9 @@ public function testParseValidXml() $lifecycleConfig = new LifecycleConfig(); $lifecycleConfig->parseFromXml($this->validLifecycle); $this->assertEquals($this->cleanXml($lifecycleConfig->serializeToXml()), $this->cleanXml($this->validLifecycle)); - $this->assertEquals(2, count($lifecycleConfig->getRules())); + $this->assertEquals(7, count($lifecycleConfig->getRules())); $rules = $lifecycleConfig->getRules(); - $this->assertEquals('delete temporary files', $rules[1]->getId()); + $this->assertEquals('rule2', $rules[1]->getId()); } public function testParseValidXml2() @@ -97,11 +158,10 @@ public function testParseNullXml() public function testLifecycleRule() { - $lifecycleRule = new LifecycleRule("x", "x", "x", array('x')); + $lifecycleRule = new LifecycleRule("x", "x", "x"); $lifecycleRule->setId("id"); $lifecycleRule->setPrefix("prefix"); $lifecycleRule->setStatus("Enabled"); - $lifecycleRule->setActions(array()); $this->assertEquals('id', $lifecycleRule->getId()); $this->assertEquals('prefix', $lifecycleRule->getPrefix()); @@ -109,18 +169,98 @@ public function testLifecycleRule() $this->assertEmpty($lifecycleRule->getActions()); } - public function testLifecycleAction() + public function testLifecycleTag() + { + $tag = new LifecycleTag('key1', 'val1'); + $this->assertEquals($tag->getKey(), 'key1'); + $this->assertEquals($tag->getValue(), 'val1'); + + $tag->setKey('v1'); + $tag->setValue('v2'); + $this->assertEquals($tag->getKey(), 'v1'); + $this->assertEquals($tag->getValue(), 'v2'); + } + + public function testLifecycleTransition() + { + $transition= new LifecycleTransition(5, '2017-01-01T00:00:00.000Z',"IA",true,false); + $this->assertEquals($transition->getDays(), 5); + $this->assertEquals($transition->getCreatedBeforeDate(), '2017-01-01T00:00:00.000Z'); + $this->assertEquals($transition->getStorageClass(), 'IA'); + $this->assertEquals($transition->getIsAccessTime(), true); + $this->assertEquals($transition->getReturnToStdWhenVisit(), false); + + $transition->setDays(10); + $transition->setCreatedBeforeDate("2022-01-01T00:00:00.000Z"); + $transition->setStorageClass(OssClient::OSS_STORAGE_ARCHIVE); + $transition->setIsAccessTime(false); + $transition->setReturnToStdWhenVisit(false); + + $this->assertEquals($transition->getDays(), 10); + $this->assertEquals($transition->getCreatedBeforeDate(), '2022-01-01T00:00:00.000Z'); + $this->assertEquals($transition->getStorageClass(), OssClient::OSS_STORAGE_ARCHIVE); + $this->assertEquals($transition->getIsAccessTime(), false); + $this->assertEquals($transition->getReturnToStdWhenVisit(), false); + } + + public function testLifecycleNonTransition() + { + $transition= new LifecycleNoncurrentVersionTransition(5, "IA",true,false); + $this->assertEquals($transition->getNoncurrentDays(), 5); + $this->assertEquals($transition->getStorageClass(), 'IA'); + $this->assertEquals($transition->getIsAccessTime(), true); + $this->assertEquals($transition->getReturnToStdWhenVisit(), false); + + $transition->setNoncurrentDays(10); + $transition->setStorageClass(OssClient::OSS_STORAGE_ARCHIVE); + $transition->setIsAccessTime(false); + $transition->setReturnToStdWhenVisit(false); + + $this->assertEquals($transition->getNoncurrentDays(), 10); + $this->assertEquals($transition->getStorageClass(), OssClient::OSS_STORAGE_ARCHIVE); + $this->assertEquals($transition->getIsAccessTime(), false); + $this->assertEquals($transition->getReturnToStdWhenVisit(), false); + } + + public function testLifecycleAbortMultipartUpload() + { + $abortMultipartUpload= new LifecycleAbortMultipartUpload(10, '2022-01-01T00:00:00.000Z'); + $this->assertEquals($abortMultipartUpload->getDays(), 10); + $this->assertEquals($abortMultipartUpload->getCreatedBeforeDate(), '2022-01-01T00:00:00.000Z'); + + $abortMultipartUpload->setDays(1); + $abortMultipartUpload->setCreatedBeforeDate('2021-01-01T00:00:00.000Z'); + $this->assertEquals($abortMultipartUpload->getDays(), 1); + $this->assertEquals($abortMultipartUpload->getCreatedBeforeDate(), '2021-01-01T00:00:00.000Z'); + } + + + public function testLifecycleExpiration() + { + $expiration= new LifecycleExpiration(10, '2022-01-01T00:00:00.000Z',"2022-02-01T00:00:00.000Z",false); + $this->assertEquals($expiration->getDays(), 10); + $this->assertEquals($expiration->getDate(), "2022-01-01T00:00:00.000Z"); + $this->assertEquals($expiration->getCreatedBeforeDate(), '2022-02-01T00:00:00.000Z'); + $this->assertEquals($expiration->getExpiredObjectDeleteMarker(), false); + + $expiration->setDays(1); + $expiration->setCreatedBeforeDate('2021-01-01T00:00:00.000Z'); + $expiration->setDate("2021-01-02T00:00:00.000Z"); + $expiration->setExpiredObjectDeleteMarker(true); + + $this->assertEquals($expiration->getDays(), 1); + $this->assertEquals($expiration->getDate(), "2021-01-02T00:00:00.000Z"); + $this->assertEquals($expiration->getCreatedBeforeDate(), '2021-01-01T00:00:00.000Z'); + $this->assertEquals($expiration->getExpiredObjectDeleteMarker(), true); + } + + + public function testLifecycleNonExpiration() { - $action = new LifecycleAction('x', 'x', 'x'); - $this->assertEquals($action->getAction(), 'x'); - $this->assertEquals($action->getTimeSpec(), 'x'); - $this->assertEquals($action->getTimeValue(), 'x'); - $action->setAction('y'); - $action->setTimeSpec('y'); - $action->setTimeValue('y'); - $this->assertEquals($action->getAction(), 'y'); - $this->assertEquals($action->getTimeSpec(), 'y'); - $this->assertEquals($action->getTimeValue(), 'y'); + $expiration= new LifecycleNoncurrentVersionExpiration(10, '2022-01-01T00:00:00.000Z',"2022-02-01T00:00:00.000Z",false); + $this->assertEquals($expiration->getNoncurrentDays(), 10); + $expiration->setNoncurrentDays(1); + $this->assertEquals($expiration->getNoncurrentDays(), 1); } private function cleanXml($xml) diff --git a/tests/OSS/Tests/OssClientBucketAccessMonitorTest.php b/tests/OSS/Tests/OssClientBucketAccessMonitorTest.php new file mode 100644 index 00000000..a6b3d63b --- /dev/null +++ b/tests/OSS/Tests/OssClientBucketAccessMonitorTest.php @@ -0,0 +1,106 @@ +ossClient->getBucketAccessMonitor($this->bucket); + $this->assertEquals("Disabled", $status); + } catch (OssException $e) { + $this->assertTrue(false); + } + + try { + $this->ossClient->putBucketAccessMonitor($this->bucket, "Enabled"); + Common::waitMetaSync(); + $status = $this->ossClient->getBucketAccessMonitor($this->bucket); + $this->assertEquals("Enabled", $status); + } catch (OssException $e) { + $this->assertTrue(false); + } + + try { + $this->ossClient->putBucketAccessMonitor($this->bucket, "Disabled"); + Common::waitMetaSync(); + $status = $this->ossClient->getBucketAccessMonitor($this->bucket); + $this->assertEquals("Disabled", $status); + } catch (OssException $e) { + $this->assertTrue(false); + } + } + + + public function testBucketAccessMonitorWithLifeRule(){ + try { + Common::waitMetaSync(); + $status = $this->ossClient->getBucketAccessMonitor($this->bucket); + $this->assertEquals("Disabled", $status); + } catch (OssException $e) { + $this->assertTrue(false); + } + + try { + $this->ossClient->putBucketAccessMonitor($this->bucket, "Enabled"); + Common::waitMetaSync(); + $status = $this->ossClient->getBucketAccessMonitor($this->bucket); + $this->assertEquals("Enabled", $status); + } catch (OssException $e) { + $this->assertTrue(false); + } + + + $lifecycleConfig = new LifecycleConfig(); + + $rule7 = new LifecycleRule("rule7", "logs7/", LifecycleRule::STATUS_ENANLED); + + $nonTransition = new LifecycleNoncurrentVersionTransition(); + $nonTransition->setNoncurrentDays(30); + $nonTransition->setStorageClass(OssClient::OSS_STORAGE_IA); + $nonTransition->setIsAccessTime(true); + $nonTransition->setReturnToStdWhenVisit(true); + $rule7->setNoncurrentVersionTransition($nonTransition); + $lifecycleConfig->addRule($rule7); + + try { + $this->ossClient->putBucketLifecycle($this->bucket, $lifecycleConfig); + } catch (OssException $e) { + print_r($e->getMessage()); + $this->assertTrue(false); + } + + try { + $this->ossClient->putBucketAccessMonitor($this->bucket, "Disabled"); + } catch (OssException $e) { + $this->assertTrue(true); + } + + try { + $this->ossClient->deleteBucketLifecycle($this->bucket); + } catch (OssException $e) { + $this->assertTrue(false); + } + + try { + $this->ossClient->putBucketAccessMonitor($this->bucket, "Disabled"); + Common::waitMetaSync(); + $status = $this->ossClient->getBucketAccessMonitor($this->bucket); + $this->assertEquals("Disabled", $status); + } catch (OssException $e) { + $this->assertTrue(false); + } + } +} diff --git a/tests/OSS/Tests/OssClientBucketInfoTest.php b/tests/OSS/Tests/OssClientBucketInfoTest.php index 759e536c..7a677ee7 100644 --- a/tests/OSS/Tests/OssClientBucketInfoTest.php +++ b/tests/OSS/Tests/OssClientBucketInfoTest.php @@ -11,6 +11,7 @@ public function testBucketInfo() { try { $info = $this->ossClient->getBucketInfo($this->bucket); + $this->assertEquals("Disabled",$info->getAccessMonitor()); $this->assertEquals($this->bucket, $info->getName()); $this->assertEquals("Standard", $info->getStorageClass()); } catch (OssException $e) { diff --git a/tests/OSS/Tests/OssClientBucketLifecycleTest.php b/tests/OSS/Tests/OssClientBucketLifecycleTest.php index 46da1f06..6f5b9cd7 100644 --- a/tests/OSS/Tests/OssClientBucketLifecycleTest.php +++ b/tests/OSS/Tests/OssClientBucketLifecycleTest.php @@ -3,25 +3,32 @@ namespace OSS\Tests; use OSS\Core\OssException; +use OSS\Model\LifecycleAbortMultipartUpload; use OSS\Model\LifecycleConfig; +use OSS\Model\LifecycleExpiration; +use OSS\Model\LifecycleNoncurrentVersionTransition; use OSS\Model\LifecycleRule; use OSS\Model\LifecycleAction; +use OSS\Model\LifecycleTag; +use OSS\Model\LifecycleTransition; +use OSS\OssClient; require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestOssClientBase.php'; class OssClientBucketLifecycleTest extends TestOssClientBase { - public function testBucket() + public function testSimpleLifeRule() { $lifecycleConfig = new LifecycleConfig(); - $actions = array(); - $actions[] = new LifecycleAction("Expiration", "Days", 3); - $lifecycleRule = new LifecycleRule("delete obsoleted files", "obsoleted/", "Enabled", $actions); + $lifecycleRule = new LifecycleRule("delete obsoleted files", "obsoleted/", "Enabled"); + $expiration = new LifecycleExpiration(3); + $lifecycleRule->setExpiration($expiration); $lifecycleConfig->addRule($lifecycleRule); - $actions = array(); - $actions[] = new LifecycleAction("Expiration", "Date", '2022-10-12T00:00:00.000Z'); - $lifecycleRule = new LifecycleRule("delete temporary files", "temporary/", "Enabled", $actions); + + $lifecycleRule = new LifecycleRule("delete temporary files", "temporary/", "Enabled"); + $expiration = new LifecycleExpiration(null,"2022-10-12T00:00:00.000Z"); + $lifecycleRule->setExpiration($expiration); $lifecycleConfig->addRule($lifecycleRule); try { @@ -54,4 +61,128 @@ public function testBucket() } } + + + public function testManyLifeRule() + { + $lifecycleConfig = new LifecycleConfig(); + + $rule1 = new LifecycleRule("rule1", "logs/", LifecycleRule::STATUS_ENANLED); + $lifecycleExpiration = new LifecycleExpiration(); + $lifecycleExpiration->setDays(3); + $rule1->setExpiration($lifecycleExpiration); + + $lifecycleAbortMultipartUpload = new LifecycleAbortMultipartUpload(); + $lifecycleAbortMultipartUpload->setDays(1); + $rule1->setAbortMultipartUpload($lifecycleAbortMultipartUpload); + + $lifecycleConfig->addRule($rule1); + + $rule2 = new LifecycleRule("rule2", "logs2/", LifecycleRule::STATUS_ENANLED); + $lifecycleTransition = new LifecycleTransition(); + $lifecycleTransition->setDays(30); + $lifecycleTransition->setStorageClass(OssClient::OSS_STORAGE_IA); + $rule2->setTransition($lifecycleTransition); + // 60 天 转换Object的存储类型为 Archive + $lifecycleTransition = new LifecycleTransition(); + $lifecycleTransition->setDays(60); + $lifecycleTransition->setStorageClass(OssClient::OSS_STORAGE_ARCHIVE); + $rule2->setTransition($lifecycleTransition); + + $lifecycleExpiration = new LifecycleExpiration(); + $lifecycleExpiration->setDays(180); + $rule2->setExpiration($lifecycleExpiration); + $lifecycleConfig->addRule($rule2); + + $rule3 = new LifecycleRule("rule3", "logs3/", LifecycleRule::STATUS_ENANLED); + $lifecycleExpiration = new LifecycleExpiration(); + $lifecycleExpiration->setCreatedBeforeDate("2017-01-01T00:00:00.000Z"); + $rule3->setExpiration($lifecycleExpiration); + + $lifecycleAbortMultipartUpload = new LifecycleAbortMultipartUpload(); + $lifecycleAbortMultipartUpload->setCreatedBeforeDate("2017-01-01T00:00:00.000Z"); + $rule3->setAbortMultipartUpload($lifecycleAbortMultipartUpload); + $lifecycleConfig->addRule($rule3); + + $rule4 = new LifecycleRule("rule4", "logs4/", LifecycleRule::STATUS_ENANLED); + + $tag = new LifecycleTag(); + $tag->setKey("key1"); + $tag->setValue("val1"); + $rule4->setTag($tag); + + $tag2 = new LifecycleTag(); + $tag2->setKey("key12"); + $tag2->setValue("val12"); + $rule4->setTag($tag2); + $lifecycleConfig->addRule($rule4); + $lifecycleTransition = new LifecycleTransition(); + $lifecycleTransition->setDays(30); + $lifecycleTransition->setStorageClass(OssClient::OSS_STORAGE_IA); + $rule4->setTransition($lifecycleTransition); + + try { + $this->ossClient->putBucketLifecycle($this->bucket, $lifecycleConfig); + } catch (OssException $e) { + print_r($e->getMessage()); + $this->assertTrue(false); + } + + try { + Common::waitMetaSync(); + $lifecycleConfig2 = $this->ossClient->getBucketLifecycle($this->bucket); + $this->assertEquals($lifecycleConfig->serializeToXml(), $lifecycleConfig2->serializeToXml()); + } catch (OssException $e) { + $this->assertTrue(false); + } + + try { + Common::waitMetaSync(); + $this->ossClient->deleteBucketLifecycle($this->bucket); + } catch (OssException $e) { + $this->assertTrue(false); + } + + try { + Common::waitMetaSync(); + $lifecycleConfig3 = $this->ossClient->getBucketLifecycle($this->bucket); + $this->assertNotEquals($lifecycleConfig->serializeToXml(), $lifecycleConfig3->serializeToXml()); + } catch (OssException $e) { + $this->assertTrue(false); + } + + } + + public function testLifeRuleWithAccessTime() + { + $lifecycleConfig = new LifecycleConfig(); + + $rule6 = new LifecycleRule("rule6", "logs6/", LifecycleRule::STATUS_ENANLED); + + $lifecycleTransition = new LifecycleTransition(); + $lifecycleTransition->setDays(30); + $lifecycleTransition->setStorageClass(OssClient::OSS_STORAGE_IA); + $lifecycleTransition->setIsAccessTime(true); + $lifecycleTransition->setReturnToStdWhenVisit(false); + $rule6->setTransition($lifecycleTransition); + $lifecycleConfig->addRule($rule6); + + $rule7 = new LifecycleRule("rule7", "logs7/", LifecycleRule::STATUS_ENANLED); + + $nonTransition = new LifecycleNoncurrentVersionTransition(); + $nonTransition->setNoncurrentDays(30); + $nonTransition->setStorageClass(OssClient::OSS_STORAGE_IA); + $nonTransition->setIsAccessTime(true); + $nonTransition->setReturnToStdWhenVisit(true); + $rule7->setNoncurrentVersionTransition($nonTransition); + $lifecycleConfig->addRule($rule7); + + try { + $this->ossClient->putBucketLifecycle($this->bucket, $lifecycleConfig); + } catch (OssException $e) { + print_r($e->getMessage()); + $this->assertTrue(true); + } + + } } diff --git a/tests/OSS/Tests/OssClientObjectTest.php b/tests/OSS/Tests/OssClientObjectTest.php index bb610188..3c9058f4 100644 --- a/tests/OSS/Tests/OssClientObjectTest.php +++ b/tests/OSS/Tests/OssClientObjectTest.php @@ -620,6 +620,24 @@ public function testGetSimplifiedObjectMeta() } } + public function testGetSimplifiedObjectMetaWithAccessTime() + { + $object = "oss-php-sdk-test/upload-test-object-name.txt"; + + try { + $this->ossClient->putBucketAccessMonitor($this->bucket, "Enabled"); + } catch (OssException $e) { + $this->assertTrue(false); + } + + try { + $objectMeta = $this->ossClient->getSimplifiedObjectMeta($this->bucket, $object); + $this->assertEquals(true, array_key_exists(strtolower('x-oss-last-access-time'), $objectMeta)); + } catch (OssException $e) { + $this->assertFalse(false); + } + } + public function testUploadStream() { $object = "oss-php-sdk-test/put-from-stream.txt";