347 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			347 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
	
|  | <?php | ||
|  | 
 | ||
|  | namespace OSS\Tests; | ||
|  | 
 | ||
|  | use OSS\Core\OssException; | ||
|  | use OSS\OssClient; | ||
|  | 
 | ||
|  | 
 | ||
|  | class OssClientTest extends TestOssClientBase | ||
|  | { | ||
|  |     public function testConstrunct() | ||
|  |     { | ||
|  |         try { | ||
|  |             $ossClient = new OssClient('id', 'key', 'http://oss-cn-hangzhou.aliyuncs.com'); | ||
|  |             $this->assertFalse($ossClient->isUseSSL()); | ||
|  |             $ossClient->setUseSSL(true); | ||
|  |             $this->assertTrue($ossClient->isUseSSL()); | ||
|  |             $this->assertTrue(true); | ||
|  |             $this->assertEquals(3, $ossClient->getMaxRetries()); | ||
|  |             $ossClient->setMaxTries(4); | ||
|  |             $this->assertEquals(4, $ossClient->getMaxRetries()); | ||
|  |             $ossClient->setTimeout(10); | ||
|  |             $ossClient->setConnectTimeout(20); | ||
|  |         } catch (OssException $e) { | ||
|  |             assertFalse(true); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testConstrunct2() | ||
|  |     { | ||
|  |         try { | ||
|  |             $ossClient = new OssClient('id', "", 'http://oss-cn-hangzhou.aliyuncs.com'); | ||
|  |             $this->assertFalse(true); | ||
|  |         } catch (OssException $e) { | ||
|  |             $this->assertEquals("access key secret is empty", $e->getMessage()); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testConstrunct3() | ||
|  |     { | ||
|  |         try { | ||
|  |             $ossClient = new OssClient("", 'key', 'http://oss-cn-hangzhou.aliyuncs.com'); | ||
|  |             $this->assertFalse(true); | ||
|  |         } catch (OssException $e) { | ||
|  |             $this->assertEquals("access key id is empty", $e->getMessage()); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testConstrunct4() | ||
|  |     { | ||
|  |         try { | ||
|  |             $ossClient = new OssClient('id', 'key', ""); | ||
|  |             $this->assertFalse(true); | ||
|  |         } catch (OssException $e) { | ||
|  |             $this->assertEquals('endpoint is empty', $e->getMessage()); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testConstrunct5() | ||
|  |     { | ||
|  |         try { | ||
|  |             $ossClient = new OssClient('id', 'key', "123.123.123.1"); | ||
|  |             $this->assertTrue(true); | ||
|  |         } catch (OssException $e) { | ||
|  |             $this->assertTrue(false); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testConstrunct6() | ||
|  |     { | ||
|  |         try { | ||
|  |             $ossClient = new OssClient('id', 'key', "https://123.123.123.1"); | ||
|  |             $this->assertTrue($ossClient->isUseSSL()); | ||
|  |             $this->assertTrue(true); | ||
|  |         } catch (OssException $e) { | ||
|  |             $this->assertTrue(false); | ||
|  |         } | ||
|  | 
 | ||
|  |         try { | ||
|  |             $ossClient = new OssClient('id', 'key', "https://123.123.123.1:3128"); | ||
|  |             $this->assertTrue($ossClient->isUseSSL()); | ||
|  |             $this->assertTrue(true); | ||
|  |         } catch (OssException $e) { | ||
|  |             $this->assertTrue(false); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testConstrunct7() | ||
|  |     { | ||
|  |         try { | ||
|  |             $ossClient = new OssClient('id', 'key', "http://123.123.123.1"); | ||
|  |             $this->assertFalse($ossClient->isUseSSL()); | ||
|  |             $this->assertTrue(true); | ||
|  |         } catch (OssException $e) { | ||
|  |             $this->assertTrue(false); | ||
|  |         } | ||
|  | 
 | ||
|  |         try { | ||
|  |             $ossClient = new OssClient('id', 'key', "http://123.123.123.1:3128"); | ||
|  |             $this->assertFalse($ossClient->isUseSSL()); | ||
|  |             $this->assertTrue(true); | ||
|  |         } catch (OssException $e) { | ||
|  |             $this->assertTrue(false); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testConstrunct8() | ||
|  |     { | ||
|  |         try { | ||
|  |             $ossClient = new OssClient('id', 'key', "http://123.123.123.1", true); | ||
|  |             $ossClient->listBuckets(); | ||
|  |             $this->assertFalse(true); | ||
|  |         } catch (OssException $e) { | ||
|  |             $this->assertFalse(false); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testConstrunct9() | ||
|  |     { | ||
|  |         try { | ||
|  |             $accessKeyId = ' ' . getenv('OSS_ACCESS_KEY_ID') . ' '; | ||
|  |             $accessKeySecret = ' ' . getenv('OSS_ACCESS_KEY_SECRET') . ' '; | ||
|  |             $endpoint = ' ' . getenv('OSS_ENDPOINT') . '/ '; | ||
|  |             $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false); | ||
|  |             $ossClient->listBuckets(); | ||
|  |             $this->assertTrue(true); | ||
|  |         } catch (OssException $e) { | ||
|  |             $this->assertFalse(true); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testConstrunct10() | ||
|  |     { | ||
|  |         try { | ||
|  |             $ossClient = new OssClient('id', 'key', "http://ABC-COM.TEST.123.cn", true); | ||
|  |             $this->assertTrue(true); | ||
|  |         } catch (OssException $e) { | ||
|  |             $this->assertTrue(false); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testConstrunct11() | ||
|  |     { | ||
|  |         try { | ||
|  |             $ossClient = new OssClient('id', 'key', "oss-test.com\\aliyuncs.com"); | ||
|  |             $this->assertFalse(true); | ||
|  |         } catch (OssException $e) { | ||
|  |             $this->assertEquals('endpoint is invalid:'."oss-test.com\\aliyuncs.com", $e->getMessage()); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testConstrunct12() | ||
|  |     { | ||
|  |         try { | ||
|  |             $ossClient = new OssClient('id', 'key', "192.168.1.0:abc123"); | ||
|  |             $this->assertFalse(true); | ||
|  |         } catch (OssException $e) { | ||
|  |             $this->assertEquals('endpoint is invalid:'."192.168.1.0:abc123", $e->getMessage()); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testSupportPutEmptyObject() | ||
|  |     { | ||
|  |         try { | ||
|  |             $accessKeyId = ' ' . getenv('OSS_ACCESS_KEY_ID') . ' '; | ||
|  |             $accessKeySecret = ' ' . getenv('OSS_ACCESS_KEY_SECRET') . ' '; | ||
|  |             $endpoint = ' ' . getenv('OSS_ENDPOINT') . '/ '; | ||
|  |             $bucket = $this->bucket; | ||
|  |             $ossClient = new OssClient($accessKeyId, $accessKeySecret , $endpoint, false); | ||
|  |             $ossClient->putObject($bucket,'test_emptybody',''); | ||
|  |         } catch (OssException $e) { | ||
|  |             $this->assertFalse(true); | ||
|  |         } | ||
|  | 
 | ||
|  |         //use invalid sts-token, should fail.
 | ||
|  |         try { | ||
|  |             $accessKeyId = ' ' . getenv('OSS_ACCESS_KEY_ID') . ' '; | ||
|  |             $accessKeySecret = ' ' . getenv('OSS_ACCESS_KEY_SECRET') . ' '; | ||
|  |             $endpoint = ' ' . getenv('OSS_ENDPOINT') . '/ '; | ||
|  |             $bucket = $this->bucket; | ||
|  |             $ossClient = new OssClient($accessKeyId, $accessKeySecret , $endpoint, false, "invalid-sts-token"); | ||
|  |             $ossClient->putObject($bucket,'test_emptybody',''); | ||
|  |             $this->assertTrue(false); | ||
|  |         } catch (OssException $e) { | ||
|  |             $this->assertEquals('InvalidAccessKeyId', $e->getErrorCode()); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testCreateObjectDir() | ||
|  |     { | ||
|  |         $accessKeyId = ' ' . getenv('OSS_ACCESS_KEY_ID') . ' '; | ||
|  |         $accessKeySecret = ' ' . getenv('OSS_ACCESS_KEY_SECRET') . ' '; | ||
|  |         $endpoint = ' ' . getenv('OSS_ENDPOINT') . '/ '; | ||
|  |         $bucket = $this->bucket; | ||
|  |         $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false); | ||
|  | 
 | ||
|  |         try { | ||
|  |             $object='test-dir'; | ||
|  |             $ossClient->createObjectDir($bucket,$object); | ||
|  |             $this->assertTrue(true); | ||
|  |         } catch (OssException $e) { | ||
|  |             $this->assertFalse(true); | ||
|  |         } | ||
|  | 
 | ||
|  |         try { | ||
|  |             $object='0'; | ||
|  |             $ossClient->createObjectDir($bucket,$object); | ||
|  |             $ossClient->putObject($bucket,$object, ''); | ||
|  |             $this->assertTrue(true); | ||
|  |         } catch (OssException $e) { | ||
|  |             var_dump($e); | ||
|  |             $this->assertFalse(true); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testGetBucketCors() | ||
|  |     { | ||
|  |         try { | ||
|  |             $accessKeyId = ' ' . getenv('OSS_ACCESS_KEY_ID') . ' '; | ||
|  |             $accessKeySecret = ' ' . getenv('OSS_ACCESS_KEY_SECRET') . ' '; | ||
|  |             $endpoint = ' ' . getenv('OSS_ENDPOINT') . '/ '; | ||
|  |             $bucket = getenv('OSS_BUCKET'); | ||
|  |             $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false); | ||
|  |             $ossClient->getBucketCors($bucket); | ||
|  |             $this->assertTrue(true); | ||
|  |         } catch (OssException $e) { | ||
|  |             $this->assertFalse(true); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testGetBucketCname() | ||
|  |     { | ||
|  |         try { | ||
|  |             $accessKeyId = ' ' . getenv('OSS_ACCESS_KEY_ID') . ' '; | ||
|  |             $accessKeySecret = ' ' . getenv('OSS_ACCESS_KEY_SECRET') . ' '; | ||
|  |             $endpoint = ' ' . getenv('OSS_ENDPOINT') . '/ '; | ||
|  |             $bucket = $this->bucket; | ||
|  |             $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false); | ||
|  |             $ossClient->getBucketCname($bucket); | ||
|  |             $this->assertTrue(true); | ||
|  |         } catch (OssException $e) { | ||
|  |             $this->assertFalse(true); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testProxySupport() | ||
|  |     { | ||
|  |         $accessKeyId = ' ' . getenv('OSS_ACCESS_KEY_ID') . ' '; | ||
|  |         $accessKeySecret = ' ' . getenv('OSS_ACCESS_KEY_SECRET') . ' '; | ||
|  |         $endpoint = ' ' . getenv('OSS_ENDPOINT') . '/ '; | ||
|  |         $bucket = getenv('OSS_BUCKET') . '-proxy'; | ||
|  |         $requestProxy  = getenv('OSS_PROXY'); | ||
|  |         $key = 'test-proxy-srv-object'; | ||
|  |         $content = 'test-content'; | ||
|  |         $proxys = parse_url($requestProxy); | ||
|  | 
 | ||
|  |         $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false, null, $requestProxy); | ||
|  | 
 | ||
|  |         $result = $ossClient->createBucket($bucket); | ||
|  |         $this->checkProxy($result, $proxys); | ||
|  | 
 | ||
|  |         $result = $ossClient->putObject($bucket, $key, $content); | ||
|  |         $this->checkProxy($result, $proxys); | ||
|  |         $result = $ossClient->getObject($bucket, $key); | ||
|  |         $this->assertEquals($content, $result); | ||
|  | 
 | ||
|  |         // list object
 | ||
|  |         $objectListInfo = $ossClient->listObjects($bucket); | ||
|  |         $objectList = $objectListInfo->getObjectList(); | ||
|  |         $this->assertNotNull($objectList); | ||
|  |         $this->assertTrue(is_array($objectList)); | ||
|  |         $objects = array(); | ||
|  |         foreach ($objectList as $value) { | ||
|  |             $objects[] = $value->getKey(); | ||
|  |         } | ||
|  |         $this->assertEquals(1, count($objects)); | ||
|  |         $this->assertTrue(in_array($key, $objects)); | ||
|  | 
 | ||
|  |         $result = $ossClient->deleteObject($bucket, $key); | ||
|  |         $this->checkProxy($result,$proxys); | ||
|  | 
 | ||
|  |         $result = $ossClient->deleteBucket($bucket); | ||
|  |         $this->checkProxy($result, $proxys); | ||
|  |     } | ||
|  | 
 | ||
|  |     private function checkProxy($result, $proxys) | ||
|  |     { | ||
|  |         $this->assertEquals($result['info']['primary_ip'], $proxys['host']); | ||
|  |         $this->assertEquals($result['info']['primary_port'], $proxys['port']); | ||
|  |         $this->assertTrue(array_key_exists('via', $result)); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testIpEndpoint() | ||
|  |     { | ||
|  |         try { | ||
|  |             $accessKeyId = 'sk' . getenv('OSS_ACCESS_KEY_ID') . ' '; | ||
|  |             $accessKeySecret = ' ' . getenv('OSS_ACCESS_KEY_SECRET') . ' '; | ||
|  |             $endpoint = '192.168.1.1'; | ||
|  |             $bucket = getenv('OSS_BUCKET'); | ||
|  |             $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false); | ||
|  |             $object = "a.file"; | ||
|  |             $timeout = 3600; | ||
|  |             $options = array('Content-Type' => 'txt'); | ||
|  |             $signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "PUT", $options); | ||
|  |             $this->assertTrue(strpos($signedUrl, '192.168.1.1/skyranch-php-test/a.file?') != false); | ||
|  |         } catch (OssException $e) { | ||
|  |             $this->assertFalse(true); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testCnameEndpoint() | ||
|  |     { | ||
|  |         try { | ||
|  |             $accessKeyId = 'sk' . getenv('OSS_ACCESS_KEY_ID') . ' '; | ||
|  |             $accessKeySecret = ' ' . getenv('OSS_ACCESS_KEY_SECRET') . ' '; | ||
|  |             $endpoint = 'cname.endpoint'; | ||
|  |             $bucket = getenv('OSS_BUCKET'); | ||
|  |             $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, true); | ||
|  |             $object = "a.file"; | ||
|  |             $timeout = 3600; | ||
|  |             $options = array('Content-Type' => 'txt'); | ||
|  |             $signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "PUT", $options); | ||
|  |             $this->assertTrue(strpos($signedUrl, 'cname.endpoint/a.file?') != false); | ||
|  |         } catch (OssException $e) { | ||
|  |             $this->assertFalse(true); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testStsToken() | ||
|  |     { | ||
|  |         try { | ||
|  |             $accessKeyId = 'sk' . getenv('OSS_ACCESS_KEY_ID') . ' '; | ||
|  |             $accessKeySecret = ' ' . getenv('OSS_ACCESS_KEY_SECRET') . ' '; | ||
|  |             $endpoint = ' ' . getenv('OSS_ENDPOINT') . '/ '; | ||
|  |             $bucket = getenv('OSS_BUCKET'); | ||
|  |             $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false, "test-token"); | ||
|  |             $object = "a.file"; | ||
|  |             $timeout = 3600; | ||
|  |             $options = array('Content-Type' => 'txt'); | ||
|  |             $signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "PUT", $options); | ||
|  |             $this->assertTrue(strpos($signedUrl, 'security-token=test-token') != false); | ||
|  |         } catch (OssException $e) { | ||
|  |             $this->assertFalse(true); | ||
|  |         } | ||
|  |     } | ||
|  | } |