168 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			168 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			PHP
		
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace 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);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |