Scalr\Tests\Service\Aws\S3Test::testFunctionalS3 PHP Method

testFunctionalS3() public method

public testFunctionalS3 ( )
    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);
    }