/** * @test */ public function testFunctionalS3() { $this->skipIfEc2PlatformDisabled(); $client = $this->s3->getApiHandler()->getClient(); //AP region aws instance $awsap = $this->getEnvironment()->aws(Aws::REGION_AP_SOUTHEAST_1); $awsap->s3->enableEntityManager(); $bucketList = $this->s3->bucket->getList(); $this->assertInstanceOf(self::CLASS_S3_BUCKET_LIST, $bucketList); $this->assertInstanceOf(self::CLASS_S3, $bucketList->getS3()); $this->assertInstanceOf(self::CLASS_S3_OWNER_DATA, $bucketList->getOwner()); $bucket = $this->s3->bucket->get(self::getTestName('bucket')); if ($bucket !== null) { $list = $awsap->s3->bucket->listObjects($bucket->bucketName); /* @var $object ObjectData */ foreach ($list as $object) { if ($object->objectName == self::getTestName(self::OBJECT_NAME_DUMMY)) { //Removes dummy object $object->delete(); } } //Removes bucket $awsap->s3->bucket->delete($bucket->bucketName); unset($bucket); unset($list); } $bucket = $this->s3->bucket->get(self::getTestName('bucket-copy')); if ($bucket !== null) { $list = $awsap->s3->bucket->listObjects($bucket->bucketName); foreach ($list as $object) { if ($object->objectName == self::getTestName(self::OBJECT_NAME_DUMMY)) { $object->delete(); } } $awsap->s3->bucket->delete($bucket->bucketName); unset($bucket); unset($list); } //Tests creation of the bucket $bucket = $awsap->s3->bucket->create(self::getTestName('bucket')); $this->assertInstanceOf(self::CLASS_S3_BUCKET_DATA, $bucket); $this->assertInstanceOf(self::CLASS_S3, $bucket->getS3()); $this->assertEquals(self::getTestName('bucket'), $bucket->bucketName); $this->assertNotEmpty($bucket->creationDate); $bucketCopy = $awsap->s3->bucket->create(self::getTestName('bucket-copy')); $this->assertInstanceOf(self::CLASS_S3_BUCKET_DATA, $bucketCopy); $this->assertInstanceOf(self::CLASS_S3, $bucketCopy->getS3()); //Checks location $this->assertEquals(Aws::REGION_AP_SOUTHEAST_1, $bucket->getLocation()); $acl = $bucket->getAcl(); $this->assertInstanceOf(self::CLASS_S3_ACCESS_CONTROL_POLICY_DATA, $acl); $this->assertNotEmpty($acl->toXml()); //Checks that generated document is properly constructed. $dom = new \DOMDocument(); $dom->loadXML($acl->getOriginalXml()); $this->assertEqualXMLStructure($acl->toXml(true)->firstChild, $dom->firstChild); //Applies canned ACL $ret = $bucket->setAcl(array('x-amz-acl' => 'authenticated-read')); $this->assertTrue($ret); $acl2 = $bucket->getAcl(); $this->assertInstanceOf(self::CLASS_S3_ACCESS_CONTROL_POLICY_DATA, $acl2); //Restores acl to previous state $ret = $bucket->setAcl($acl); $this->assertTrue($ret); //Compare restored with its stored value $this->assertEqualXMLStructure($bucket->getAcl()->toXml(true)->firstChild, $dom->firstChild); //Create object test $fileInfo = new SplFileInfo($this->getFixturesDirectory() . '/dummy'); /* @var $response ClientResponseInterface */ $response = $bucket->addObject(self::getTestName(self::OBJECT_NAME_DUMMY), $fileInfo, array('Content-Type' => 'text/plain; charset:UTF-8')); $this->assertInstanceOf($this->getAwsClassName('Client\\ClientResponseInterface'), $response); $this->assertNotEmpty($response->getHeader('ETag')); /* @var $dresponse ClientResponseInterface */ $dresponse = $bucket->getObject(self::getTestName(self::OBJECT_NAME_DUMMY)); $this->assertInstanceOf($this->getAwsClassName('Client\\ClientResponseInterface'), $dresponse); $objectContent = $dresponse->getRawContent(); $this->assertContains('This is a dummy file', $objectContent); unset($dresponse); $objList = $bucket->listObjects(); $this->assertInstanceOf($this->getS3ClassName('DataType\\ObjectList'), $objList); $object = $awsap->s3->object->get(array(self::getTestName('bucket'), self::getTestName(self::OBJECT_NAME_DUMMY))); $this->assertInstanceOf($this->getS3ClassName('DataType\\ObjectData'), $object); $this->assertSame($object, $objList[0]); $arr = $awsap->s3->bucket->getObjectsFromStorage(self::getTestName('bucket')); $this->assertSame($object, $arr[0]); unset($arr); $objectAcl = $object->getAcl(); $this->assertInstanceOf(self::CLASS_S3_ACCESS_CONTROL_POLICY_DATA, $objectAcl); $ret = $object->setAcl(array('x-amz-acl' => 'public-read')); $this->assertTrue($ret); $objectAclChanged = $object->getAcl(); $this->assertInstanceOf(self::CLASS_S3_ACCESS_CONTROL_POLICY_DATA, $objectAclChanged); $this->assertContains('xsi:type="CanonicalUser"', $objectAclChanged->toXml()); unset($objectAclChanged); unset($objectAcl); $rmetadata = $object->getMetadata(); $this->assertInstanceOf($this->getAwsClassName('Client\\ClientResponseInterface'), $rmetadata); $this->assertNotEmpty($rmetadata->getHeader('ETag')); $this->assertNotEmpty($rmetadata->getHeader('Last-Modified')); unset($rmetadata); $copyResponse = $object->copy($bucketCopy, self::getTestName(self::OBJECT_NAME_DUMMY)); $this->assertInstanceOf($this->getS3ClassName('DataType\\CopyObjectResponseData'), $copyResponse); $this->assertInstanceOf(self::CLASS_S3, $copyResponse->getS3()); $this->assertEquals(self::getTestName('bucket-copy'), $copyResponse->bucketName); $this->assertEquals(self::getTestName(self::OBJECT_NAME_DUMMY), $copyResponse->objectName); $this->assertNotEmpty($copyResponse->eTag); $this->assertInstanceOf('DateTime', $copyResponse->lastModified); $this->assertInternalType('array', $copyResponse->headers); unset($copyResponse); $dresponse = $bucket->deleteObject(self::getTestName(self::OBJECT_NAME_DUMMY)); $this->assertInstanceOf($this->getAwsClassName('Client\\ClientResponseInterface'), $dresponse); $this->assertEquals(204, $dresponse->getResponseCode()); unset($dresponse); unset($objList); unset($object); //Object must be detached from entity storage after deletion. $object = $awsap->s3->object->get(array(self::getTestName('bucket'), self::getTestName(self::OBJECT_NAME_DUMMY))); $this->assertNull($object); $dresponse = $bucketCopy->deleteObject(self::getTestName(self::OBJECT_NAME_DUMMY)); $this->assertInstanceOf($this->getAwsClassName('Client\\ClientResponseInterface'), $dresponse); $this->assertEquals(204, $dresponse->getResponseCode()); unset($dresponse); $ret = $bucket->delete(); $this->assertTrue($ret); $this->assertNull($this->s3->bucket->get(self::getTestName('bucket'))); unset($bucket); $ret = $bucketCopy->delete(); $this->assertTrue($ret); $this->assertNull($this->s3->bucket->get(self::getTestName('bucket-copy'))); unset($bucketCopy); }
/** * Gets an entity manager * * @return EntityManager */ public function getEntityManager() { return $this->s3->getEntityManager(); }