| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472 | <?phpnamespace OSS\Tests;use OSS\Core\OssException;use OSS\OssClient;use OSS\Model\RestoreConfig;use OSS\Model\TaggingConfig;use OSS\Model\Tag;use OSS\Core\OssUtil;require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestOssClientBase.php';class OssClientObjectRequestPaymentTest extends TestOssClientBase{    private $payerClient;    public function testPayerClientWithoutRequester()    {        try {            $this->payerClient->listObjects($this->bucket);            $this->assertTrue(false);        } catch (OssException $e) {            $this->assertEquals('AccessDenied', $e->getErrorCode());        }        try {            $this->payerClient->createObjectDir($this->bucket, 'folder/');            $this->assertTrue(false);        } catch (OssException $e) {            $this->assertEquals('AccessDenied', $e->getErrorCode());        }        try {            $this->payerClient->putObject($this->bucket, 'object', 'content');            $this->assertTrue(false);        } catch (OssException $e) {            $this->assertEquals('AccessDenied', $e->getErrorCode());        }        try {            $this->payerClient->putSymlink($this->bucket, 'symlink', 'default-object');            $this->assertTrue(false);        } catch (OssException $e) {            $this->assertEquals('AccessDenied', $e->getErrorCode());        }        try {            $this->payerClient->getSymlink($this->bucket, 'default-symlink');            $this->assertTrue(false);        } catch (OssException $e) {            $this->assertEquals('AccessDenied', $e->getErrorCode());        }        try {    		$this->payerClient->uploadFile($this->bucket, 'file-object', __FILE__);            $this->assertTrue(false);        } catch (OssException $e) {            $this->assertEquals('AccessDenied', $e->getErrorCode());        }        try {    		$this->payerClient->appendObject($this->bucket, 'append-object', 'content', 0);            $this->assertTrue(false);        } catch (OssException $e) {            $this->assertEquals('AccessDenied', $e->getErrorCode());        }        try {    		$this->payerClient->appendObject($this->bucket, 'append-file', __FILE__, 0);            $this->assertTrue(false);        } catch (OssException $e) {            $this->assertEquals('AccessDenied', $e->getErrorCode());        }        try {    		$this->payerClient->copyObject($this->bucket, 'default-object', $this->bucket, 'copy-object');            $this->assertTrue(false);        } catch (OssException $e) {            $this->assertEquals('AccessDenied', $e->getErrorCode());        }        try {            $this->payerClient->getObjectMeta($this->bucket, 'default-object');            $this->assertTrue(false);        } catch (OssException $e) {            $this->assertTrue(true);        }        try {            $this->payerClient->getSimplifiedObjectMeta($this->bucket, 'default-object');            $this->assertTrue(false);        } catch (OssException $e) {            $this->assertTrue(true);        }        try {            $this->payerClient->deleteObject($this->bucket, 'default-object');            $this->assertTrue(false);        } catch (OssException $e) {            $this->assertEquals('AccessDenied', $e->getErrorCode());        }        try {            $this->payerClient->getObject($this->bucket, 'default-object');            $this->assertTrue(false);        } catch (OssException $e) {            $this->assertEquals('AccessDenied', $e->getErrorCode());        }        try {            $this->payerClient->doesObjectExist($this->bucket, 'default-object');            $this->assertTrue(false);        } catch (OssException $e) {            $this->assertTrue(true);        }        try {            $this->payerClient->restoreObject($this->bucket, 'default-ia-object');            $this->assertTrue(false);        } catch (OssException $e) {            $this->assertEquals('AccessDenied', $e->getErrorCode());        }        try {            $config = new TaggingConfig();            $config->addTag(new Tag("key1", "value1"));            $this->payerClient->putObjectTagging($this->bucket, 'default-object', $config);            $this->assertTrue(false);        } catch (OssException $e) {            $this->assertEquals('AccessDenied', $e->getErrorCode());        }        try {            $this->payerClient->getObjectTagging($this->bucket, 'default-object');            $this->assertTrue(false);        } catch (OssException $e) {            $this->assertEquals('AccessDenied', $e->getErrorCode());        }        try {            $this->payerClient->deleteObjectTagging($this->bucket, 'default-object');            $this->assertTrue(false);        } catch (OssException $e) {            $this->assertEquals('AccessDenied', $e->getErrorCode());        }        try {            $this->payerClient->initiateMultipartUpload($this->bucket, 'mup-object');            $this->assertTrue(false);        } catch (OssException $e) {            $this->assertEquals('AccessDenied', $e->getErrorCode());        }        $uploadId= $this->ossClient->initiateMultipartUpload($this->bucket, 'mup-object');        try {            $this->payerClient->listParts($this->bucket, 'mup-object', $uploadId);            $this->assertTrue(false);        } catch (OssException $e) {            $this->assertEquals('AccessDenied', $e->getErrorCode());        }        try {            $this->payerClient->abortMultipartUpload($this->bucket, 'mup-object', $uploadId);            $this->assertTrue(false);        } catch (OssException $e) {            $this->assertEquals('AccessDenied', $e->getErrorCode());        }        try {            $this->payerClient->listMultipartUploads($this->bucket);            $this->assertTrue(false);        } catch (OssException $e) {            $this->assertEquals('AccessDenied', $e->getErrorCode());        }        try {            $this->payerClient->multiuploadFile($this->bucket, 'mup-file', __FILE__);            $this->assertTrue(false);        } catch (OssException $e) {            $this->assertEquals('AccessDenied', $e->getErrorCode());        }    }    public function testObjectOperationsWithRequester()    {        $options = array(            OssClient::OSS_HEADERS => array(                OssClient::OSS_REQUEST_PAYER => 'requester',        ));        try {            $this->payerClient->listObjects($this->bucket, $options);            $this->assertTrue(true);        } catch (OssException $e) {            $this->assertTrue(false);        }        try {            $this->payerClient->createObjectDir($this->bucket, 'folder/', $options);            $this->assertTrue(true);        } catch (OssException $e) {            $this->assertTrue(false);        }        try {            $this->payerClient->putObject($this->bucket, 'object', 'content', $options);            $this->assertTrue(true);        } catch (OssException $e) {            $this->assertTrue(false);        }        try {            $this->payerClient->putSymlink($this->bucket, 'symlink', 'default-object', $options);            $this->assertTrue(true);        } catch (OssException $e) {            $this->assertTrue(false);        }        try {            $this->payerClient->getSymlink($this->bucket, 'default-symlink', $options);            $this->assertTrue(true);        } catch (OssException $e) {            $this->assertTrue(false);        }        try {    		$this->payerClient->uploadFile($this->bucket, 'file-object', __FILE__, $options);            $this->assertTrue(true);        } catch (OssException $e) {            $this->assertTrue(false);        }        try {    		$this->payerClient->appendObject($this->bucket, 'append-object', 'content', 0, $options);            $this->assertTrue(true);        } catch (OssException $e) {            $this->assertTrue(false);        }        try {    		$this->payerClient->appendObject($this->bucket, 'append-file', __FILE__, 0, $options);            $this->assertTrue(true);        } catch (OssException $e) {            $this->assertTrue(false);        }        try {    		$this->payerClient->copyObject($this->bucket, 'default-object', $this->bucket, 'copy-object', $options);            $this->assertTrue(true);        } catch (OssException $e) {            $this->assertTrue(false);        }        try {            $this->payerClient->getObjectMeta($this->bucket, 'default-object', $options);            $this->assertTrue(true);        } catch (OssException $e) {            $this->assertTrue(false);        }        try {            $this->payerClient->getSimplifiedObjectMeta($this->bucket, 'default-object', $options);            $this->assertTrue(true);        } catch (OssException $e) {            $this->assertTrue(false);        }        try {            $this->payerClient->getObject($this->bucket, 'default-object', $options);            $this->assertTrue(true);        } catch (OssException $e) {            $this->assertTrue(false);        }        try {            $this->payerClient->putObject($this->bucket, 'test-object', 'content', $options);            $this->assertTrue(true);        } catch (OssException $e) {            $this->assertTrue(false);        }        try {            $this->payerClient->deleteObject($this->bucket, 'test-object', $options);            $this->assertTrue(true);        } catch (OssException $e) {            $this->assertTrue(false);        }        try {            $this->payerClient->doesObjectExist($this->bucket, 'default-object', $options);            $this->assertTrue(true);        } catch (OssException $e) {            $this->assertTrue(false);        }        $ia_options = array(            OssClient::OSS_HEADERS => array(                'x-oss-storage-class' => 'Archive',        ));        $this->ossClient->putObject($this->bucket, 'default-Archive-object', 'content', $ia_options);        try {            $this->payerClient->restoreObject($this->bucket, 'default-Archive-object', $options);            $this->assertTrue(true);        } catch (OssException $e) {            $this->assertTrue(false);        }        try {            $config = new TaggingConfig();            $config->addTag(new Tag("key1", "value1"));            $this->payerClient->putObjectTagging($this->bucket, 'default-object', $config, $options);            $this->assertTrue(true);        } catch (OssException $e) {            $this->assertTrue(false);        }        try {            $this->payerClient->getObjectTagging($this->bucket, 'default-object', $options);            $this->assertTrue(true);        } catch (OssException $e) {            $this->assertTrue(false);        }        try {            $this->payerClient->deleteObjectTagging($this->bucket, 'default-object', $options);            $this->assertTrue(true);        } catch (OssException $e) {            $this->assertTrue(false);        }    }        public function testMultipartOperationsWithRequester()    {        $options = array(            OssClient::OSS_HEADERS => array(                OssClient::OSS_REQUEST_PAYER => 'requester',        ));        $object = "mpu/multipart-test.txt";        /**         *  step 1. 初始化一个分块上传事件, 也就是初始化上传Multipart, 获取upload id         */        try {            $upload_id = $this->payerClient->initiateMultipartUpload($this->bucket, $object, $options);        } catch (OssException $e) {            $this->assertFalse(true);        }        /*         * step 2. 上传分片         */        $part_size = 1 * 1024 * 1024;        $upload_file = __FILE__;        $upload_filesize = sprintf('%u',filesize($upload_file));        $pieces = $this->payerClient->generateMultiuploadParts($upload_filesize, $part_size);        $response_upload_part = array();        $upload_position = 0;        $is_check_md5 = false;        foreach ($pieces as $i => $piece) {            $from_pos = $upload_position + (integer)$piece[OssClient::OSS_SEEK_TO];            $to_pos = (integer)$piece[OssClient::OSS_LENGTH] + $from_pos - 1;            $up_options = array(                OssClient::OSS_FILE_UPLOAD => $upload_file,                OssClient::OSS_PART_NUM => ($i + 1),                OssClient::OSS_SEEK_TO => $from_pos,                OssClient::OSS_LENGTH => $to_pos - $from_pos + 1,                OssClient::OSS_CHECK_MD5 => $is_check_md5,                OssClient::OSS_HEADERS => array(                    OssClient::OSS_REQUEST_PAYER => 'requester',                ),            );            //2. 将每一分片上传到OSS            try {                $response_upload_part[] = $this->ossClient->uploadPart($this->bucket, $object, $upload_id, $up_options);            } catch (OssException $e) {                $this->assertFalse(true);            }        }        $upload_parts = array();        foreach ($response_upload_part as $i => $eTag) {            $upload_parts[] = array(                'PartNumber' => ($i + 1),                'ETag' => $eTag,            );        }        try {            $listPartsInfo = $this->payerClient->listParts($this->bucket, $object, $upload_id, $options);            $this->assertNotNull($listPartsInfo);        } catch (OssException $e) {            $this->assertTrue(false);        }        try {            $uploads = $this->payerClient->listMultipartUploads($this->bucket, $options);            $this->assertNotNull($uploads);        } catch (OssException $e) {            $this->assertTrue(false);        }        /**         * step 3.         */        try {            $this->payerClient->completeMultipartUpload($this->bucket, $object, $upload_id, $upload_parts, $options);        } catch (OssException $e) {            $this->assertTrue(false);        }    }    public function testMiscOperationsWithRequester()    {        //use multipart        $options = array(            OssClient::OSS_PART_SIZE => 1,            OssClient::OSS_HEADERS => array(                OssClient::OSS_REQUEST_PAYER => 'requester',        ));        $bigFileName = __DIR__ . DIRECTORY_SEPARATOR . "/bigfile.tmp";        OssUtil::generateFile($bigFileName, 256 * 1024);        $object = 'mpu/multipart-bigfile-test.tmp';        try {            $this->ossClient->multiuploadFile($this->bucket, $object, $bigFileName, $options);            $this->assertTrue(true);        } catch (OssException $e) {            $this->assertFalse(true);        }        //use uploadfile        $options = array(            OssClient::OSS_PART_SIZE => 1024*1024,            OssClient::OSS_HEADERS => array(                OssClient::OSS_REQUEST_PAYER => 'requester',        ));        try {            $this->ossClient->multiuploadFile($this->bucket, $object, $bigFileName, $options);        } catch (OssException $e) {            $this->assertFalse(true);        }        unlink($bigFileName);    }    protected function setUp(): void    {        parent::setUp();        $this->payerClient = new OssClient(            getenv('OSS_PAYER_ACCESS_KEY_ID'),            getenv('OSS_PAYER_ACCESS_KEY_SECRET'),            getenv('OSS_ENDPOINT'), false);        $policy = '{"Version":"1","Statement":[{"Action":["oss:*"],"Effect": "Allow",'.                  '"Principal":["' . getenv('OSS_PAYER_UID') . '"],'.                  '"Resource": ["acs:oss:*:*:' . $this->bucket . '","acs:oss:*:*:' . $this->bucket . '/*"]}]}';        $this->ossClient->putBucketPolicy($this->bucket, $policy);        $this->ossClient->putBucketRequestPayment($this->bucket, 'Requester');        $this->ossClient->putObject($this->bucket, "default-object", "");        $this->ossClient->putSymlink($this->bucket, "default-symlink", "default-object");    }    protected function tearDown(): void    {        parent::tearDown();    }}
 |