diff --git a/samples/Bucket.php b/samples/Bucket.php index a54b74e..50a77e5 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 0000000..76010f1 --- /dev/null +++ b/samples/BucketAccessMonitor.php @@ -0,0 +1,61 @@ +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); + +/** + * putBucketAccessMonitor + * @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->putBucketTransferAcceleration($bucket,$status); + printf('Put Bucket Access Monitor Success' . "\n"); + } catch(OssException $e) { + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); +} + +/** + * @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 04d2edd..d8bb636 100644 --- a/samples/BucketLifecycle.php +++ b/samples/BucketLifecycle.php @@ -3,9 +3,15 @@ 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; +use OSS\Model\LifecycleNot; +use OSS\Model\LifecycleFilter; $bucket = Common::getBucketName(); $ossClient = Common::getOssClient(); @@ -15,17 +21,224 @@ // 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->addTransition($lifecycleTransition); +// Convert the object storage type to Archive within 60 days +$lifecycleTransition = new LifecycleTransition(); +$lifecycleTransition->setDays(60); +$lifecycleTransition->setStorageClass($ossClient::OSS_STORAGE_ARCHIVE); +$rule2->addTransition($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->addTag($tag); + +$tag2 = new LifecycleTag(); +$tag2->setKey("key12"); +$tag2->setValue("val12"); +$rule4->addTag($tag2); +$lifecycleConfig->addRule($rule4); +$lifecycleTransition = new LifecycleTransition(); +$lifecycleTransition->setDays(30); +$lifecycleTransition->setStorageClass($ossClient::OSS_STORAGE_IA); +$rule4->addTransition($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->addTransition($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->addTransition($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->addNoncurrentVersionTransition($nonTransition); +$lifecycleConfig->addRule($rule7); $ossClient->putBucketLifecycle($bucket, $lifecycleConfig); Common::println("bucket $bucket lifecycleConfig created:" . $lifecycleConfig->serializeToXml()); +// Set Lifecycle Rule With Filter +$lifecycleConfig = new LifecycleConfig(); +$rule = new LifecycleRule("rule-filter", "logs", LifecycleRule::STATUS_ENANLED); +$lifecycleTransition = new LifecycleTransition(); +$lifecycleTransition->setDays(30); +$lifecycleTransition->setStorageClass(OssClient::OSS_STORAGE_IA); +$expiration = new LifecycleExpiration(100,null); + +$rule->addTransition($lifecycleTransition); +$rule->setExpiration($expiration); +$not = new LifecycleNot(); +$tag = new LifecycleTag(); +$tag->setKey("key1"); +$tag->setValue("val1"); +$not->setTag($tag); +$not->setPrefix("logs1/"); +$filter = new LifecycleFilter(); +$filter->addNot($not); +$rule->setFilter($filter); +$lifecycleConfig->addRule($rule); +$ossClient->putBucketLifecycle($bucket, $lifecycleConfig); +Common::println("bucket $bucket lifecycleConfig created:" . $lifecycleConfig->serializeToXml()); + + // Get lifecycle configuration $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); + printf("Rule Transition Allow Small File:".$transition->getAllowSmallFile().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); + printf("Rule Non Version Transition Allow Small File:".$nonVersionTransition->getAllowSmallFile().PHP_EOL); + } + } + + $filter = $rule->getFilter(); + if (isset($filter)){ + foreach ($filter->getNot() as $not){ + if ($not->getPrefix()) { + printf("Rule Filter Not Prefix:".$not->getTag()->getKey().PHP_EOL); + } + + if ($not->getTag()->getKey()) { + printf("Rule Filter Not Tag Key:".$not->getTag()->getKey().PHP_EOL); + } + + if ($not->getTag()->getValue()) { + printf("Rule Filter Not Tag Value:".$not->getTag()->getValue().PHP_EOL); + } + } + } + +} + // Delete bucket lifecycle configuration $ossClient->deleteBucketLifecycle($bucket); Common::println("bucket $bucket lifecycleConfig deleted"); @@ -47,15 +260,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->addTransition($lifecycleTransition); + // Convert the object storage type to Archive within 60 days + $lifecycleTransition = new LifecycleTransition(); + $lifecycleTransition->setDays(60); + $lifecycleTransition->setStorageClass($ossClient::OSS_STORAGE_ARCHIVE); + $rule2->addTransition($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->addTag($tag); + $tag2 = new LifecycleTag(); + $tag2->setKey("key12"); + $tag2->setValue("val12"); + $rule4->addTag($tag2); + $lifecycleConfig->addRule($rule4); + $lifecycleTransition = new LifecycleTransition(); + $lifecycleTransition->setDays(30); + $lifecycleTransition->setStorageClass($ossClient::OSS_STORAGE_IA); + $rule4->addTransition($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->addTransition($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->addTransition($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->addNoncurrentVersionTransition($nonTransition); try { $ossClient->putBucketLifecycle($bucket, $lifecycleConfig); } catch (OssException $e) { @@ -75,7 +375,6 @@ function putBucketLifecycle($ossClient, $bucket) */ function getBucketLifecycle($ossClient, $bucket) { - $lifecycleConfig = null; try { $lifecycleConfig = $ossClient->getBucketLifecycle($bucket); } catch (OssException $e) { @@ -83,8 +382,98 @@ 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); + printf("Rule Transition Allow Small File:".$transition->getAllowSmallFile().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); + printf("Rule Non Version Transition Allow Small File:".$nonVersionTransition->getAllowSmallFile().PHP_EOL); + } + } + + $filter = $rule->getFilter(); + if (isset($filter)){ + foreach ($filter->getNot() as $not){ + if ($not->getPrefix()) { + printf("Rule Filter Not Prefix:".$not->getTag()->getKey().PHP_EOL); + } + + if ($not->getTag()->getKey()) { + printf("Rule Filter Not Tag Key:".$not->getTag()->getKey().PHP_EOL); + } + + if ($not->getTag()->getValue()) { + printf("Rule Filter Not Tag Value:".$not->getTag()->getValue().PHP_EOL); + } + } + } + + } } /** diff --git a/samples/Object.php b/samples/Object.php index bf6e86b..27e7341 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 0000000..4e50b98 --- /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 e211eed..71be28e 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 0000000..1e342e8 --- /dev/null +++ b/src/OSS/Model/LifecycleAbortMultipartUpload.php @@ -0,0 +1,86 @@ +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/LifecycleConfig.php b/src/OSS/Model/LifecycleConfig.php index f2d2dc3..e2ecf51 100644 --- a/src/OSS/Model/LifecycleConfig.php +++ b/src/OSS/Model/LifecycleConfig.php @@ -4,11 +4,9 @@ use OSS\Core\OssException; - /** - * Class BucketLifecycleConfig + * Class LifecycleConfig * @package OSS\Model - * @link http://help.aliyun.com/document_detail/oss/api-reference/bucket/PutBucketLifecycle.html */ class LifecycleConfig implements XmlConfig { @@ -16,7 +14,6 @@ class LifecycleConfig implements XmlConfig * Parse the xml into this object. * * @param string $strXml - * @throws OssException * @return null */ public function parseFromXml($strXml) @@ -24,28 +21,22 @@ public function parseFromXml($strXml) $this->rules = array(); $xml = simplexml_load_string($strXml); if (!isset($xml->Rule)) return; - $this->rules = array(); - foreach ($xml->Rule as $rule) { - $id = strval($rule->ID); - $prefix = strval($rule->Prefix); - $status = strval($rule->Status); - $actions = array(); - 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); + $this->parseRule($xml->Rule); + } + + /** + * @param $xmlRules + */ + private function parseRule($xmlRules){ + if ($xmlRules){ + foreach ($xmlRules as $rule){ + $lifecycleRule = new LifecycleRule(); + $lifecycleRule->parseFromXml($rule); + $this->rules[] = $lifecycleRule; } - $this->rules[] = new LifecycleRule($id, $prefix, $status, $actions); } - return; - } + } /** * Serialize the object to xml diff --git a/src/OSS/Model/LifecycleExpiration.php b/src/OSS/Model/LifecycleExpiration.php new file mode 100644 index 0000000..a04be86 --- /dev/null +++ b/src/OSS/Model/LifecycleExpiration.php @@ -0,0 +1,144 @@ +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/LifecycleFilter.php b/src/OSS/Model/LifecycleFilter.php new file mode 100644 index 0000000..e8cc824 --- /dev/null +++ b/src/OSS/Model/LifecycleFilter.php @@ -0,0 +1,124 @@ +not = $not; + $this->objectSizeGreaterThan = $objectSizeGreaterThan; + $this->objectSizeLessThan = $objectSizeLessThan; + } + + /** + * Get Filter Not + * + * @return LifecycleNot[] + */ + public function getNot() + { + return $this->not; + } + + /** + * Get Object Size Greater Than + * + * @return int|null + */ + public function getObjectSizeGreaterThan() + { + return $this->objectSizeGreaterThan; + } + + /** + * Get Object Size Less Than + * + * @return int|null + */ + public function getObjectSizeLessThan() + { + return $this->objectSizeLessThan; + } + + /** + * Set Filter Not + * @param LifecycleNot $not + */ + public function addNot($not) + { + $this->not[] = $not; + + } + + /** + * set Object Size Greater Than + * + * @param $objectSizeGreaterThan int + */ + public function setObjectSizeGreaterThan($objectSizeGreaterThan) + { + $this->objectSizeGreaterThan = $objectSizeGreaterThan; + } + + /** + * set Object Size Less Than + * + * @param $objectSizeLessThan int + */ + public function setObjectSizeLessThan($objectSizeLessThan) + { + $this->objectSizeLessThan = $objectSizeLessThan; + } + + + /** + * @param \SimpleXMLElement $xmlRule + */ + public function appendToXml(&$xmlRule) + { + if(isset($this->not) || isset($this->objectSizeGreaterThan) || isset($this->objectSizeLessThan)){ + $xmlFilter = $xmlRule->addChild("Filter"); + if (isset($this->not)){ + foreach ($this->not as $not){ + $not->appendToXml($xmlFilter); + } + } + + if (isset($this->objectSizeGreaterThan)){ + $xmlFilter->addChild("ObjectSizeGreaterThan",$this->objectSizeGreaterThan); + } + + if (isset($this->objectSizeLessThan)){ + $xmlFilter->addChild("ObjectSizeLessThan",$this->objectSizeLessThan); + } + } + + + } +} \ 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 0000000..8ac4d32 --- /dev/null +++ b/src/OSS/Model/LifecycleNoncurrentVersionExpiration.php @@ -0,0 +1,58 @@ +nonCurrentDays = $nonCurrentDays; + } + /** + * Get Non Current Days + * + * @return int + */ + public function getNonCurrentDays() + { + return $this->nonCurrentDays; + } + + /** + * Set Non Current Days + * @param $nonCurrentDays 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 0000000..348c110 --- /dev/null +++ b/src/OSS/Model/LifecycleNoncurrentVersionTransition.php @@ -0,0 +1,166 @@ +nonCurrentDays = $nonCurrentDays; + $this->storageClass = $storageClass; + $this->isAccessTime = $isAccessTime; + $this->returnToStdWhenVisit = $returnToStdWhenVisit; + $this->allowSmallFile = $allowSmallFile; + } + /** + * Get Days + * + * @return int + */ + public function getNonCurrentDays() + { + return $this->nonCurrentDays; + } + + /** + * @param $nonCurrentDays 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 $returnToStdWhenVisit bool + */ + public function setReturnToStdWhenVisit($returnToStdWhenVisit){ + $this->returnToStdWhenVisit = $returnToStdWhenVisit; + } + + /** + * Get Allow Small File + * @return bool + */ + public function getAllowSmallFile(){ + return $this->allowSmallFile; + } + + /** + * Set Allow Small File + * @param $allowSmallFile bool + */ + public function setAllowSmallFile($allowSmallFile){ + $this->allowSmallFile = $allowSmallFile; + } + + + /** + * @param \SimpleXMLElement $xmlRule + */ + public function appendToXml(&$xmlRule) + { + if(isset($this->nonCurrentDays) || isset($this->storageClass) || isset($this->isAccessTime) || isset($this->returnToStdWhenVisit) || isset($this->allowSmallFile)){ + $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); + } + + if (isset($this->allowSmallFile)){ + $xmlNonTransition->addChild('AllowSmallFile',is_bool($this->allowSmallFile) ? json_encode($this->allowSmallFile):$this->allowSmallFile); + } + + } + +} \ No newline at end of file diff --git a/src/OSS/Model/LifecycleNot.php b/src/OSS/Model/LifecycleNot.php new file mode 100644 index 0000000..39790ba --- /dev/null +++ b/src/OSS/Model/LifecycleNot.php @@ -0,0 +1,81 @@ +prefix = $prefix; + $this->tag = $tag; + } + + /** + * @return string + */ + public function getPrefix() + { + return $this->prefix; + } + + /** + * @param string $prefix + */ + public function setPrefix($prefix) + { + $this->prefix = $prefix; + } + + /** + * Get Tag + * + * @return LifecycleTag + */ + public function getTag() + { + return $this->tag; + } + + /** + * Set Tag + * @param $tag LifecycleTag + */ + public function setTag($tag) + { + $this->tag = $tag; + } + + /** + * @param \SimpleXMLElement $xmlRule + */ + public function appendToXml(&$xmlRule) + { + $xmlNot = $xmlRule->addChild("Not"); + $xmlNot->addChild('Prefix', $this->prefix); + if (isset($this->tag)){ + $this->tag->appendToXml($xmlNot); + } + } +} \ No newline at end of file diff --git a/src/OSS/Model/LifecycleRule.php b/src/OSS/Model/LifecycleRule.php index 73c6cc3..d23489b 100644 --- a/src/OSS/Model/LifecycleRule.php +++ b/src/OSS/Model/LifecycleRule.php @@ -11,6 +11,61 @@ */ 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; + /** + * @var LifecycleTransition[] + */ + private $transition; + + /** + * @var LifecycleNoncurrentVersionTransition[] + */ + private $nonVersionTransition; + + /** + * @var LifecycleFilter + */ + private $filter; + + /** + * @var LifecycleNoncurrentVersionExpiration + */ + private $nonCurrentVersionExpiration; + + const STATUS_ENANLED = "Enabled"; + const STATUS_DISABLED = "Disabled"; + /** + * @var LifecycleAction[] + */ + private $actions; + /** * Get Id * @@ -86,6 +141,118 @@ public function setActions($actions) $this->actions = $actions; } + /** + * Get Lifecycle Expiration + * @return LifecycleExpiration + */ + public function getExpiration(){ + return $this->expiration; + } + + /** + * Set Lifecycle Expiration + * @param $expiration LifecycleExpiration + */ + public function setExpiration($expiration){ + $this->expiration = $expiration; + } + + /** + * Get Lifecycle Abort Multipart Upload + * @return LifecycleAbortMultipartUpload + */ + public function getAbortMultipartUpload(){ + return $this->abortMultipartUpload; + } + + /** + * Set Lifecycle Abort Multipart Upload + * @param $abortMultipartUpload LifecycleAbortMultipartUpload + */ + 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 addTag($tag){ + $this->tag[] = $tag; + } + + /** + * Get Lifecycle Transition + * @return LifecycleTransition[] + */ + public function getTransition(){ + return $this->transition; + } + + /** + * Set Lifecycle Transition + * @param $transition LifecycleTransition + */ + public function addTransition($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 $nonVersionTransition LifecycleNonCurrentVersionTransition + */ + public function addNonCurrentVersionTransition($nonVersionTransition){ + $this->nonVersionTransition[] = $nonVersionTransition; + } + + /** + * Get Lifecycle Noncurrent Version Expiration + * @return LifecycleNoncurrentVersionExpiration + */ + public function getNonCurrentVersionExpiration(){ + return $this->nonCurrentVersionExpiration; + } + + /** + * Set Lifecycle Non Current Version Expiration + * @param $nonCurrentVersionExpiration LifecycleNoncurrentVersionExpiration + */ + public function setNonCurrentVersionExpiration($nonCurrentVersionExpiration){ + $this->nonCurrentVersionExpiration = $nonCurrentVersionExpiration; + } + + /** + * Get Lifecycle Filter + * @return LifecycleFilter + */ + public function getFilter(){ + return $this->filter; + } + + /** + * Set Lifecycle Filter + * @param $filter LifecycleFilter + */ + public function setFilter($filter){ + $this->filter = $filter; + } /** * LifecycleRule constructor. @@ -95,7 +262,7 @@ public function setActions($actions) * @param string $status Rule status, which has the following valid values: [self::LIFECYCLE_STATUS_ENABLED, self::LIFECYCLE_STATUS_DISABLED] * @param LifecycleAction[] $actions */ - public function __construct($id, $prefix, $status, $actions) + public function __construct($id=null, $prefix=null, $status=null, $actions=null) { $this->id = $id; $this->prefix = $prefix; @@ -111,16 +278,272 @@ 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->actions)){ + foreach ($this->actions as $action) { + $action->appendToXml($xmlRule); + } + } + + if (isset($this->expiration)){ + $this->expiration->appendToXml($xmlRule); + + } + if (isset($this->abortMultipartUpload)){ + $this->abortMultipartUpload->appendToXml($xmlRule); + } + + if (isset($this->tag)){ + foreach ($this->tag as $tag){ + $tag->appendToXml($xmlRule); + } + } + + 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); + } + + if (isset($this->filter)){ + $this->filter->appendToXml($xmlRule); + } + } - private $id; - private $prefix; - private $status; - private $actions = array(); - const LIFECYCLE_STATUS_ENABLED = 'Enabled'; - const LIFECYCLE_STATUS_DISABLED = 'Disabled'; + /** + * @param $xml \SimpleXMLElement + */ + public function parseFromXml($xml) + { + if (isset($xml->ID)){ + $this->id = strval($xml->ID); + } + if (isset($xml->Prefix)){ + $this->prefix = strval($xml->Prefix); + } + if (isset($xml->Status)){ + $this->status = strval($xml->Status); + } + if (isset($xml->Expiration)){ + $this->parseExpiration($xml->Expiration); + } + if (isset($xml->Transition)){ + foreach ($xml->Transition as $transition){ + $this->parseTransition($transition); + } + } + if (isset($xml->AbortMultipartUpload)){ + $this->parseAbortMultipartUpload($xml->AbortMultipartUpload); + } + if (isset($xml->Tag)){ + foreach ($xml->Tag as $tag){ + $this->parseTag($tag); + } + + } + if (isset($xml->NoncurrentVersionExpiration)){ + $this->parseNonCurrentVersionExpiration($xml->NoncurrentVersionExpiration); + } + if (isset($xml->NoncurrentVersionTransition)){ + foreach ($xml->NoncurrentVersionTransition as $transition){ + $this->parseNonCurrentVersionTransition($transition); + } + } + if (isset($xml->Filter)){ + $this->parseFilter($xml->Filter); + } + } + + /** + * @param $xml \SimpleXMLElement + */ + public function parseExpiration($xml) + { + if (!isset($xml->Days) && !isset($xml->Date) && !isset($xml->CreatedBeforeDate) && !isset($xml->ExpiredObjectDeleteMarker)) return; + + if (isset($xml->Days)){ + $days = strval($xml->Days); + } + if (isset($xml->Date)){ + $date = strval($xml->Date); + } + if (isset($xml->CreatedBeforeDate)){ + $createdBeforeDate = strval($xml->CreatedBeforeDate); + } + if (isset($xml->ExpiredObjectDeleteMarker)){ + $expiredObjectDeleteMarker = strval($xml->ExpiredObjectDeleteMarker); + } + + $lifecycleExpiration = new LifecycleExpiration($days, $date, $createdBeforeDate, $expiredObjectDeleteMarker); + $this->setExpiration($lifecycleExpiration); + } + + /** + * @param $xml \SimpleXMLElement + */ + public function parseNonCurrentVersionExpiration($xml) + { + if (!isset($xml->NoncurrentDays)) return; + + if (isset($xml->NoncurrentDays)){ + $days = strval($xml->NoncurrentDays); + } + $expiration = new LifecycleNonCurrentVersionExpiration($days); + $this->setNonCurrentVersionExpiration($expiration); + } + + /** + * @param $xml \SimpleXMLElement + */ + private function parseTransition($xml) + { + if (!isset($xml->Days) && !isset($xml->CreatedBeforeDate) && !isset($xml->StorageClass) && !isset($xml->IsAccessTime) && !isset($xml->ReturnToStdWhenVisit) && !isset($xml->AllowSmallFile)) return; + + if (isset($xml->Days)){ + $days = strval($xml->Days); + } + if (isset($xml->CreatedBeforeDate)){ + $createdBeforeDate = strval($xml->CreatedBeforeDate); + } + if (isset($xml->StorageClass)){ + $storageClass = strval($xml->StorageClass); + } + if (isset($xml->IsAccessTime)){ + $isAccessTime = strval($xml->IsAccessTime); + } + if (isset($xml->ReturnToStdWhenVisit)){ + $returnToStdWhenVisit = strval($xml->ReturnToStdWhenVisit); + } + if (isset($xml->AllowSmallFile)){ + $allowSmallFile = strval($xml->AllowSmallFile); + } + + $lifecycleTransition = new LifecycleTransition($days,$createdBeforeDate,$storageClass,$isAccessTime,$returnToStdWhenVisit,$allowSmallFile); + $this->addTransition($lifecycleTransition); + } + + /** + * @param $xml \SimpleXMLElement + */ + private function parseNonCurrentVersionTransition($xml) + { + if (!isset($xml->NoncurrentDays) && !isset($xml->StorageClass) && !isset($xml->IsAccessTime) && !isset($xml->ReturnToStdWhenVisit) && !isset($xml->AllowSmallFile)) return; + + if (isset($xml->NoncurrentDays)){ + $days = strval($xml->NoncurrentDays); + } + if (isset($xml->StorageClass)){ + $storageClass = strval($xml->StorageClass); + } + if (isset($xml->IsAccessTime)){ + $isAccessTime = strval($xml->IsAccessTime); + } + if (isset($xml->ReturnToStdWhenVisit)){ + $returnToStdWhenVisit = strval($xml->ReturnToStdWhenVisit); + } + if (isset($xml->AllowSmallFile)){ + $allowSmallFile = strval($xml->AllowSmallFile); + } + + $lifecycleNonCurrentVersionTransition = new LifecycleNonCurrentVersionTransition($days,$storageClass,$isAccessTime,$returnToStdWhenVisit,$allowSmallFile); + $this->addNonCurrentVersionTransition($lifecycleNonCurrentVersionTransition); + } + + /** + * @param $xml \SimpleXMLElement + */ + private function parseAbortMultipartUpload($xml) + { + if (!isset($xml->Days) && !isset($xml->CreatedBeforeDate)) return; + + if (isset($xml->Days)){ + $days = strval($xml->Days); + } + if (isset($xml->CreatedBeforeDate)){ + $createdBeforeDate = strval($xml->CreatedBeforeDate); + } + + $lifecycleAbortMultipartUpload = new LifecycleAbortMultipartUpload($days,$createdBeforeDate); + $this->setAbortMultipartUpload($lifecycleAbortMultipartUpload); + } + + /** + * @param $xml \SimpleXMLElement + */ + private function parseTag($xml) + { + if (!isset($xml->Key) && !isset($xml->Value)) return; + + if (isset($xml->Key)){ + $key = strval($xml->Key); + } + if (isset($xml->Value)){ + $value = strval($xml->Value); + } + + $tag = new LifecycleTag($key,$value); + $this->addTag($tag); + } + + /** + * @param $xml \SimpleXMLElement + */ + private function parseFilter($xml) + { + if (isset($xml->Not)){ + foreach ($xml->Not as $not){ + $notObject[] = $this->parseNot($not); + } + } + if (isset($xml->ObjectSizeGreaterThan)){ + $objectSizeGreaterThan = strval($xml->ObjectSizeGreaterThan); + } + if (isset($xml->ObjectSizeLessThan)){ + $objectSizeLessThan = strval($xml->ObjectSizeLessThan); + } + $lifecycleFilter = new LifecycleFilter($notObject,$objectSizeGreaterThan,$objectSizeLessThan); + $this->setFilter($lifecycleFilter); + } + + /** + * @param $xml \SimpleXMLElement + */ + private function parseNot($xml) + { + if (!isset($xml->Prefix) && !isset($xml->Tag)) return; + if (isset($xml->Prefix)){ + $prefix = strval($xml->Prefix); + } + if (isset($xml->Tag)){ + $tag = $this->parseFilterTag($xml->Tag); + } + return new LifecycleNot($prefix,$tag); + } + + /** + * @param $xml \SimpleXMLElement + */ + private function parseFilterTag($xml) + { + if (!isset($xml->Key) && !isset($xml->Value)) return; + + if (isset($xml->Key)){ + $key = strval($xml->Key); + } + if (isset($xml->Value)){ + $value = strval($xml->Value); + } + + return new LifecycleTag($key,$value); + } } \ 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 0000000..b65c4d6 --- /dev/null +++ b/src/OSS/Model/LifecycleTag.php @@ -0,0 +1,92 @@ +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 0000000..00c55d4 --- /dev/null +++ b/src/OSS/Model/LifecycleTransition.php @@ -0,0 +1,198 @@ +days = $days; + $this->createdBeforeDate = $createdBeforeDate; + $this->storageClass = $storageClass; + $this->isAccessTime = $isAccessTime; + $this->returnToStdWhenVisit = $returnToStdWhenVisit; + $this->allowSmallFile = $allowSmallFile; + } + + /** + * 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; + } + + /** + * Get Allow Small File + * @return bool + */ + public function getAllowSmallFile(){ + return $this->allowSmallFile; + } + + /** + * Set Allow Small File + * @param $allowSmallFile bool + */ + public function setAllowSmallFile($allowSmallFile){ + $this->allowSmallFile = $allowSmallFile; + } + + + /** + * @param \SimpleXMLElement $xmlRule + */ + public function appendToXml(&$xmlRule) + { + if(isset($this->days) || isset($this->createdBeforeDate) || isset($this->storageClass) || isset($this->isAccessTime) || isset($this->returnToStdWhenVisit) || isset($this->allowSmallFile) ){ + $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); + } + + if (isset($this->allowSmallFile)){ + $xmlTransition->addChild('AllowSmallFile',is_bool($this->allowSmallFile) ? json_encode($this->allowSmallFile):$this->allowSmallFile); + } + } +} \ No newline at end of file diff --git a/src/OSS/Model/RefererConfig.php b/src/OSS/Model/RefererConfig.php index 0830143..50c3778 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 c953344..772cf6c 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; @@ -1017,6 +1020,7 @@ public function putBucketLifecycle($bucket, $lifecycleConfig, $options = NULL) return $result->getData(); } + /** * Gets bucket's lifecycle config * @@ -1633,6 +1637,52 @@ 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,11 +3462,39 @@ 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]; + $subResource = $this->filterSubResource($options[self::OSS_SUB_RESOURCE]); + if (strlen($subResource) > 0){ + $signableResource .= '?' . $subResource; + } + } return $signableResource; } + /** + * Filter sub resource + * @param $subResource + * @return string + */ + private function filterSubResource($subResource) + { + $queryString = ''; + parse_str($subResource, $queryArrayParams); + foreach($queryArrayParams as $key=> $param) + { + if (!in_array($key,self::$FILTER_SIGN_KEY)){ + if (!empty($param)){ + $queryString .= $key . '=' . $param . '&'; + }else{ + $queryString .= $key . '&'; + } + } + } + $queryString = substr($queryString, 0, -1); + + return $queryString; + } + /** * generates query string * @@ -3733,6 +3811,8 @@ public function setConnectTimeout($connectTimeout) const OSS_OPTIONS_REQUEST_METHOD = 'Access-Control-Request-Method'; const OSS_OPTIONS_REQUEST_HEADERS = 'Access-Control-Request-Headers'; + static $FILTER_SIGN_KEY = array('accessmonitor'); + //use ssl flag private $useSSL = false; private $maxRetries = 3; diff --git a/src/OSS/Result/GetBucketAccessMonitorResult.php b/src/OSS/Result/GetBucketAccessMonitorResult.php new file mode 100644 index 0000000..569bf34 --- /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 0000000..9e38362 --- /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 0000000..4fc76b6 --- /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 e6d9a72..4529050 100644 --- a/tests/OSS/Tests/GetLifecycleResultTest.php +++ b/tests/OSS/Tests/GetLifecycleResultTest.php @@ -7,6 +7,7 @@ use OSS\Core\OssException; use OSS\Model\LifecycleConfig; use OSS\Result\GetLifecycleResult; +use OSS\Result\Result; class GetLifecycleResultTest extends \PHPUnit\Framework\TestCase { @@ -24,10 +25,120 @@ class GetLifecycleResultTest extends \PHPUnit\Framework\TestCase temporary/ Enabled 2022-10-12T00:00:00.000Z -2022-10-12T00:00:00.000Z BBBB; + private $validXml1 = << + +rule1 +logs/ +Enabled +3 +1 + + +rule2 +logs2/ +Enabled +180 +30IA +60Archive +rule3logs3/Enabled +2017-01-01T00:00:00.000Z +2017-01-01T00:00:00.000Z +rule4logs4/Enabledkey1val1key12val1230IArule5logs5/Enabled30IAfalserule6logs6/Enabled30IAtruefalserule7logs7/Enabled30IAtruetrue +BBB; + + private $validXml2 = << + + +RuleID +logs +Enabled + +100 + + +Days +Archive + + + +logs1 +key1value1 + + + + +BBBB; + + 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; + + private $validXml3 = << + + +rule1 +logs/ +Enabled + +true + + +1 + + +5 + + + +rule2 +data/ +Enabled + +30 +IA + + +10 +IA + + + +rule3 +logs5/ +Enabled + +10 +IA +true +false + + + +AAA; + + + public function testParseValidXml() { @@ -40,6 +151,50 @@ public function testParseValidXml() $this->assertEquals($this->cleanXml($this->validXml), $this->cleanXml($lifecycleConfig->serializeToXml())); } + public function testParseValidXml2() + { + $response = new ResponseCore(array(), $this->validXml2, 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->validXml2), $this->cleanXml($lifecycleConfig->serializeToXml())); + } + + public function testParseValidXml3() + { + $response = new ResponseCore(array(), $this->validXml3, 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->validXml3), $this->cleanXml($lifecycleConfig->serializeToXml())); + } + + public function testInValidXml() + { + $response = new ResponseCore(array(), $this->inValidXml, 200); + try { + $result = new GetLifecycleResult($response); + } catch (OssException $e) { + printf($e->getMessage()); + $this->assertTrue(false); + } + } + + 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,8 +207,8 @@ 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 063e436..f368ef3 100644 --- a/tests/OSS/Tests/LifecycleConfigTest.php +++ b/tests/OSS/Tests/LifecycleConfigTest.php @@ -2,41 +2,79 @@ 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; +use \OSS\Model\LifecycleNot; +use \OSS\Model\LifecycleFilter; class LifecycleConfigTest extends \PHPUnit\Framework\TestCase { - private $validLifecycle = << +rule1logs/Enabled31rule2logs2/Enabled18030IA60Archiverule3logs3/Enabled2017-01-01T00:00:00.000Z2017-01-01T00:00:00.000Zrule4logs4/Enabledkey1val1key12val1230IArule5logs5/Enabled30IAfalserule6logs6/Enabled30IAtruefalserule7logs7/Enabled30IAtruetrue + +BBB; + + private $validLifecycle2 = << - -delete obsoleted files -obsoleted/ -Enabled -3 - - -delete temporary files +delete temporary files temporary/ Enabled 2022-10-12T00:00:00.000Z -2022-10-12T00:00:00.000Z BBBB; - private $validLifecycle2 = << -delete temporary files -temporary/ -Enabled -2022-10-12T00:00:00.000Z -2022-10-12T00:00:00.000Z + +r1 +abc/ + +500 +64000 + +abc/not1/ + +notkey1 +notvalue1 + + + +abc/not2/ + +notkey2 +notvalue2 + + + + + +r2 +def/ + +500 + +def/not1/ + + +def/not2/ + +notkey2 +notvalue2 + + + BBBB; @@ -46,24 +84,95 @@ 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->addTransition($lifecycleTransition); + // 60 天 转换Object的存储类型为 Archive + $lifecycleTransition = new LifecycleTransition(); + $lifecycleTransition->setDays(60); + $lifecycleTransition->setStorageClass(OssClient::OSS_STORAGE_ARCHIVE); + $rule2->addTransition($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->addTag($tag); + + $tag2 = new LifecycleTag(); + $tag2->setKey("key12"); + $tag2->setValue("val12"); + $rule4->addTag($tag2); + $lifecycleConfig->addRule($rule4); + $lifecycleTransition = new LifecycleTransition(); + $lifecycleTransition->setDays(30); + $lifecycleTransition->setStorageClass(OssClient::OSS_STORAGE_IA); + $rule4->addTransition($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->addTransition($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->addTransition($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->addNoncurrentVersionTransition($nonTransition); + $lifecycleConfig->addRule($rule7); + $this->assertEquals($this->cleanXml(strval($lifecycleConfig)), $this->cleanXml($this->validLifecycle)); } @@ -72,9 +181,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() @@ -87,6 +196,18 @@ public function testParseValidXml2() $this->assertEquals('delete temporary files', $rules[0]->getId()); } + public function testParseValidXml3() + { + $lifecycleConfig = new LifecycleConfig(); + $lifecycleConfig->parseFromXml($this->validLifecycle3); + $this->assertEquals(2, count($lifecycleConfig->getRules())); + $rules = $lifecycleConfig->getRules(); + $this->assertEquals('r1', $rules[0]->getId()); + $filter = $rules[0]->getFilter(); + $this->assertEquals(500, $filter->getObjectSizeGreaterThan()); + $this->assertEquals(64000, $filter->getObjectSizeLessThan()); + } + public function testParseNullXml() { $lifecycleConfig = new LifecycleConfig(); @@ -97,30 +218,170 @@ 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()); $this->assertEquals('Enabled', $lifecycleRule->getStatus()); - $this->assertEmpty($lifecycleRule->getActions()); } - public function testLifecycleAction() + public function testLifecycleRuleWithFilter() + { + $lifecycleRule = new LifecycleRule("x", "x", "x"); + $lifecycleRule->setId("id"); + $lifecycleRule->setPrefix("prefix"); + $lifecycleRule->setStatus("Enabled"); + + $not = new LifecycleNot(); + $tag = new LifecycleTag(); + $tag->setKey("key1"); + $tag->setValue("val1"); + $not->setTag($tag); + $not->setPrefix("log1/"); + + $filter = new LifecycleFilter(); + + $filter->addNot($not); + + $lifecycleRule->setFilter($filter); + + $this->assertEquals('id', $lifecycleRule->getId()); + $this->assertEquals('prefix', $lifecycleRule->getPrefix()); + $this->assertEquals('Enabled', $lifecycleRule->getStatus()); + + $getFilter = $lifecycleRule->getFilter(); + $getNot = $getFilter->getNot(); + $this->assertEquals($getNot[0]->getPrefix(),"log1/"); + $getFilterTag = $getNot[0]->getTag(); + $this->assertEquals($getFilterTag->getKey(),"key1"); + $this->assertEquals($getFilterTag->getValue(),"val1"); + + + $lifecycleRule = new LifecycleRule("x", "x", "x"); + $lifecycleRule->setId("id"); + $lifecycleRule->setPrefix("prefix"); + $lifecycleRule->setStatus("Enabled"); + + $not = new LifecycleNot(); + + $filter = new LifecycleFilter(); + + $filter->addNot($not); + + $filter->setObjectSizeGreaterThan(599); + + $filter->setObjectSizeLessThan(899); + + $lifecycleRule->setFilter($filter); + + + $this->assertEquals('id', $lifecycleRule->getId()); + $this->assertEquals('prefix', $lifecycleRule->getPrefix()); + $this->assertEquals('Enabled', $lifecycleRule->getStatus()); + + $getFilter = $lifecycleRule->getFilter(); + $getNot = $getFilter->getNot(); + $this->assertEquals($getNot[0]->getPrefix(),"log1/"); + $getFilterTag = $getNot[0]->getTag(); + $this->assertEquals($getFilterTag->getKey(),"key1"); + $this->assertEquals($getFilterTag->getValue(),"val1"); + } + + 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 0000000..1c78841 --- /dev/null +++ b/tests/OSS/Tests/OssClientBucketAccessMonitorTest.php @@ -0,0 +1,107 @@ +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->addNonCurrentVersionTransition($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 759e536..7a677ee 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 46da1f0..89390e6 100644 --- a/tests/OSS/Tests/OssClientBucketLifecycleTest.php +++ b/tests/OSS/Tests/OssClientBucketLifecycleTest.php @@ -3,16 +3,25 @@ namespace OSS\Tests; use OSS\Core\OssException; +use OSS\Model\LifecycleAbortMultipartUpload; use OSS\Model\LifecycleConfig; +use OSS\Model\LifecycleExpiration; +use OSS\Model\LifecycleFilter; +use OSS\Model\LifecycleNoncurrentVersionTransition; +use OSS\Model\LifecycleNot; 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 testBucketLifecycleOld() { $lifecycleConfig = new LifecycleConfig(); $actions = array(); @@ -54,4 +63,268 @@ public function testBucket() } } + + public function testSimpleLifeRule() + { + $lifecycleConfig = new LifecycleConfig(); + $lifecycleRule = new LifecycleRule("delete obsoleted files", "obsoleted/", "Enabled"); + $expiration = new LifecycleExpiration(3); + $lifecycleRule->setExpiration($expiration); + $lifecycleConfig->addRule($lifecycleRule); + + $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 { + $this->ossClient->putBucketLifecycle($this->bucket, $lifecycleConfig); + } catch (OssException $e) { + $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 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->addTransition($lifecycleTransition); + // 60 天 转换Object的存储类型为 Archive + $lifecycleTransition = new LifecycleTransition(); + $lifecycleTransition->setDays(60); + $lifecycleTransition->setStorageClass(OssClient::OSS_STORAGE_ARCHIVE); + $rule2->addTransition($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->addTag($tag); + + $tag2 = new LifecycleTag(); + $tag2->setKey("key12"); + $tag2->setValue("val12"); + $rule4->addTag($tag2); + $lifecycleConfig->addRule($rule4); + $lifecycleTransition = new LifecycleTransition(); + $lifecycleTransition->setDays(30); + $lifecycleTransition->setStorageClass(OssClient::OSS_STORAGE_IA); + $rule4->addTransition($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->addTransition($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->addNoncurrentVersionTransition($nonTransition); + $lifecycleConfig->addRule($rule7); + + try { + $this->ossClient->putBucketLifecycle($this->bucket, $lifecycleConfig); + } catch (OssException $e) { + print_r($e->getMessage()); + $this->assertTrue(true); + } + + try { + $this->ossClient->putBucketAccessMonitor($this->bucket, "Enabled"); + } catch (OssException $e) { + $this->assertTrue(false); + } + + 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 testLifeRuleWithFilter() + { + $lifecycleConfig = new LifecycleConfig(); + + $rule = new LifecycleRule("rule-filter", "logs", LifecycleRule::STATUS_ENANLED); + + $lifecycleTransition = new LifecycleTransition(); + $lifecycleTransition->setDays(30); + $lifecycleTransition->setStorageClass(OssClient::OSS_STORAGE_IA); + $expiration = new LifecycleExpiration(100,null); + + $rule->addTransition($lifecycleTransition); + $rule->setExpiration($expiration); + + $not = new LifecycleNot(); + $tag = new LifecycleTag(); + $tag->setKey("key1"); + $tag->setValue("val1"); + $not->setTag($tag); + $not->setPrefix("logs1/"); + + $filter = new LifecycleFilter(); + + $filter->addNot($not); + + $rule->setFilter($filter); + $lifecycleConfig->addRule($rule); + + 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); + } + + } } diff --git a/tests/OSS/Tests/OssClientObjectTest.php b/tests/OSS/Tests/OssClientObjectTest.php index bb61018..3c9058f 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";