diff --git a/storage/src/move_object_atomic.php b/storage/src/move_object_atomic.php new file mode 100644 index 0000000000..059ad7d2a1 --- /dev/null +++ b/storage/src/move_object_atomic.php @@ -0,0 +1,55 @@ +bucket($bucketName); + $object = $bucket->object($objectName); + $object->move($newObjectName); + printf('Moved gs://%s/%s to gs://%s/%s' . PHP_EOL, + $bucketName, + $objectName, + $bucketName, + $newObjectName); +} +# [END storage_move_object] + +// The following 2 lines are only needed to run the samples +require_once __DIR__ . '/../../testing/sample_helpers.php'; +\Google\Cloud\Samples\execute_sample(__FILE__, __NAMESPACE__, $argv); diff --git a/storage/test/ObjectsTest.php b/storage/test/ObjectsTest.php index 7c2105198a..483bfc3453 100644 --- a/storage/test/ObjectsTest.php +++ b/storage/test/ObjectsTest.php @@ -151,6 +151,44 @@ public function testManageObject() $this->assertEquals($output, $outputString); } + public function testMoveObjectAtomic() + { + $bucketName = self::$bucketName . '-hns'; + $objectName = 'test-object-' . time(); + $newObjectName = $objectName . '-moved'; + $bucket = self::$storage->createBucket($bucketName, [ + 'hierarchicalNamespace' => ['enabled' => true], + 'iamConfiguration' => ['uniformBucketLevelAccess' => ['enabled' => true]] + ]); + + $object = $bucket->upload('test', ['name' => $objectName]); + $this->assertTrue($object->exists()); + + $output = self::runFunctionSnippet('move_object_atomic', [ + $bucketName, + $objectName, + $newObjectName + ]); + + $this->assertEquals( + sprintf( + 'Moved gs://%s/%s to gs://%s/%s' . PHP_EOL, + $bucketName, + $objectName, + $bucketName, + $newObjectName + ), + $output + ); + + $this->assertFalse($object->exists()); + $movedObject = $bucket->object($newObjectName); + $this->assertTrue($movedObject->exists()); + + $bucket->object($newObjectName)->delete(); + $bucket->delete(); + } + public function testCompose() { $bucket = self::$storage->bucket(self::$bucketName);