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); | ||
|  |         } | ||
|  |     } | ||
|  | } |