| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 | <?phpnamespace OSS\Tests;use OSS\Core\OssException;use OSS\Http\RequestCore;use OSS\Http\ResponseCore;use OSS\OssClient;require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestOssClientBase.php';class OssClientSignatureTest extends TestOssClientBase{    function testGetSignedUrlForGettingObject()    {        $object = "a.file";        $this->ossClient->putObject($this->bucket, $object, file_get_contents(__FILE__));        $timeout = 3600;        try {            $signedUrl = $this->ossClient->signUrl($this->bucket, $object, $timeout);        } catch (OssException $e) {            $this->assertFalse(true);        }        $request = new RequestCore($signedUrl);        $request->set_method('GET');        $request->add_header('Content-Type', '');        $request->send_request();        $res = new ResponseCore($request->get_response_header(), $request->get_response_body(), $request->get_response_code());        $this->assertEquals(file_get_contents(__FILE__), $res->body);    }    public function testGetSignedUrlForPuttingObject()    {        $object = "a.file";        $timeout = 3600;        try {            $signedUrl = $this->ossClient->signUrl($this->bucket, $object, $timeout, "PUT");            $content = file_get_contents(__FILE__);            $request = new RequestCore($signedUrl);            $request->set_method('PUT');            $request->add_header('Content-Type', '');            $request->add_header('Content-Length', strlen($content));            $request->set_body($content);            $request->send_request();            $res = new ResponseCore($request->get_response_header(),                $request->get_response_body(), $request->get_response_code());            $this->assertTrue($res->isOK());        } catch (OssException $e) {            $this->assertFalse(true);        }    }    public function testGetSignedUrlForPuttingObjectFromFile()    {        $file = __FILE__;        $object = "a.file";        $timeout = 3600;        $options = array('Content-Type' => 'txt');        try {            $signedUrl = $this->ossClient->signUrl($this->bucket, $object, $timeout, "PUT", $options);            $request = new RequestCore($signedUrl);            $request->set_method('PUT');            $request->add_header('Content-Type', 'txt');            $request->set_read_file($file);            $request->set_read_stream_size(filesize($file));            $request->send_request();            $res = new ResponseCore($request->get_response_header(),                $request->get_response_body(), $request->get_response_code());            $this->assertTrue($res->isOK());        } catch (OssException $e) {            $this->assertFalse(true);        }    }    public function testSignedUrlWithException()    {        $file = __FILE__;        $object = "a.file";        $timeout = 3600;        $options = array('Content-Type' => 'txt');        try {            $signedUrl = $this->ossClient->signUrl($this->bucket, $object, $timeout, "POST", $options);            $this->assertTrue(false);        } catch (OssException $e) {            $this->assertTrue(true);            if (strpos($e, "method is invalid") == false)            {                $this->assertTrue(false);            }        }    }    function testGetgenPreSignedUrlForGettingObject()    {        $object = "a.file";        $this->ossClient->putObject($this->bucket, $object, file_get_contents(__FILE__));        $expires = time() + 3600;        try {            $signedUrl = $this->ossClient->generatePresignedUrl($this->bucket, $object, $expires);        } catch (OssException $e) {            $this->assertFalse(true);        }        $request = new RequestCore($signedUrl);        $request->set_method('GET');        $request->add_header('Content-Type', '');        $request->send_request();        $res = new ResponseCore($request->get_response_header(), $request->get_response_body(), $request->get_response_code());        $this->assertEquals(file_get_contents(__FILE__), $res->body);    }    function testGetgenPreSignedUrlVsSignedUrl()    {        $object = "object-vs.file";        $signedUrl1 = '245';        $signedUrl2 = '123';        $expiration = 0;        do {            usleep(500000);            $begin = time();            $expiration = time() + 3600;            $signedUrl1 = $this->ossClient->generatePresignedUrl($this->bucket, $object, $expiration);            $signedUrl2 = $this->ossClient->signUrl($this->bucket, $object, 3600);            $end = time();        } while ($begin != $end);        $this->assertEquals($signedUrl1, $signedUrl2);        $this->assertTrue(strpos($signedUrl1, 'Expires='.$expiration) !== false);    }    protected function tearDown(): void    {        $this->ossClient->deleteObject($this->bucket, "a.file");        parent::tearDown();    }    protected function setUp(): void    {        parent::setUp();        /**         *  上传本地变量到bucket         */        $object = "a.file";        $content = file_get_contents(__FILE__);        $options = array(            OssClient::OSS_LENGTH => strlen($content),            OssClient::OSS_HEADERS => array(                'Expires' => 'Fri, 28 Feb 2020 05:38:42 GMT',                'Cache-Control' => 'no-cache',                'Content-Disposition' => 'attachment;filename=oss_download.log',                'Content-Encoding' => 'utf-8',                'Content-Language' => 'zh-CN',                'x-oss-server-side-encryption' => 'AES256',                'x-oss-meta-self-define-title' => 'user define meta info',            ),        );        try {            $this->ossClient->putObject($this->bucket, $object, $content, $options);        } catch (OssException $e) {            $this->assertFalse(true);        }    }}
 |