301 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			301 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			PHP
		
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace OSS\Tests;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use OSS\Core\OssException;
							 | 
						||
| 
								 | 
							
								use OSS\Core\OssUtil;
							 | 
						||
| 
								 | 
							
								use OSS\OssClient;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class OssUtilTest extends \PHPUnit\Framework\TestCase
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    public function testIsChinese()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(OssUtil::chkChinese("hello,world"), 0);
							 | 
						||
| 
								 | 
							
								        $str = '你好,这里是卖咖啡!';
							 | 
						||
| 
								 | 
							
								        $strGBK = OssUtil::encodePath($str);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(OssUtil::chkChinese($str), 1);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(OssUtil::chkChinese($strGBK), 1);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testIsGB2312()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $str = '你好,这里是卖咖啡!';
							 | 
						||
| 
								 | 
							
								        $this->assertFalse(OssUtil::isGb2312($str));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testCheckChar()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $str = '你好,这里是卖咖啡!';
							 | 
						||
| 
								 | 
							
								        $this->assertFalse(OssUtil::checkChar($str));
							 | 
						||
| 
								 | 
							
								        $this->assertTrue(OssUtil::checkChar(iconv("UTF-8", "GB2312//IGNORE", $str)));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testIsIpFormat()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $this->assertTrue(OssUtil::isIPFormat("10.101.160.147"));
							 | 
						||
| 
								 | 
							
								        $this->assertTrue(OssUtil::isIPFormat("12.12.12.34"));
							 | 
						||
| 
								 | 
							
								        $this->assertTrue(OssUtil::isIPFormat("12.12.12.12"));
							 | 
						||
| 
								 | 
							
								        $this->assertTrue(OssUtil::isIPFormat("255.255.255.255"));
							 | 
						||
| 
								 | 
							
								        $this->assertTrue(OssUtil::isIPFormat("0.1.1.1"));
							 | 
						||
| 
								 | 
							
								        $this->assertFalse(OssUtil::isIPFormat("0.1.1.x"));
							 | 
						||
| 
								 | 
							
								        $this->assertFalse(OssUtil::isIPFormat("0.1.1.256"));
							 | 
						||
| 
								 | 
							
								        $this->assertFalse(OssUtil::isIPFormat("256.1.1.1"));
							 | 
						||
| 
								 | 
							
								        $this->assertFalse(OssUtil::isIPFormat("0.1.1.0.1"));
							 | 
						||
| 
								 | 
							
								        $this->assertTrue(OssUtil::isIPFormat("10.10.10.10:123"));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testToQueryString()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $option = array("a" => "b");
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('a=b', OssUtil::toQueryString($option));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testSReplace()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $str = "<>&'\"";
							 | 
						||
| 
								 | 
							
								        $this->assertEquals("&lt;&gt;&'"", OssUtil::sReplace($str));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testCheckChinese()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $str = '你好,这里是卖咖啡!';
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(OssUtil::chkChinese($str), 1);
							 | 
						||
| 
								 | 
							
								        if (OssUtil::isWin()) {
							 | 
						||
| 
								 | 
							
								            $strGB = OssUtil::encodePath($str);
							 | 
						||
| 
								 | 
							
								            $this->assertEquals($str, iconv("GB2312", "UTF-8", $strGB));
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testValidateOption()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $option = 'string';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            OssUtil::validateOptions($option);
							 | 
						||
| 
								 | 
							
								            $this->assertFalse(true);
							 | 
						||
| 
								 | 
							
								        } catch (OssException $e) {
							 | 
						||
| 
								 | 
							
								            $this->assertEquals("string:option must be array", $e->getMessage());
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $option = null;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            OssUtil::validateOptions($option);
							 | 
						||
| 
								 | 
							
								            $this->assertTrue(true);
							 | 
						||
| 
								 | 
							
								        } catch (OssException $e) {
							 | 
						||
| 
								 | 
							
								            $this->assertFalse(true);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testCreateDeleteObjectsXmlBody()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $xml = <<<BBBB
							 | 
						||
| 
								 | 
							
								<?xml version="1.0" encoding="utf-8"?><Delete><Quiet>true</Quiet><Object><Key>obj1</Key></Object></Delete>
							 | 
						||
| 
								 | 
							
								BBBB;
							 | 
						||
| 
								 | 
							
								        $a = array('obj1');
							 | 
						||
| 
								 | 
							
								        $this->assertEquals($xml, $this->cleanXml(OssUtil::createDeleteObjectsXmlBody($a, 'true')));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testCreateCompleteMultipartUploadXmlBody()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $xml = <<<BBBB
							 | 
						||
| 
								 | 
							
								<?xml version="1.0" encoding="utf-8"?><CompleteMultipartUpload><Part><PartNumber>2</PartNumber><ETag>xx</ETag></Part></CompleteMultipartUpload>
							 | 
						||
| 
								 | 
							
								BBBB;
							 | 
						||
| 
								 | 
							
								        $a = array(array("PartNumber" => 2, "ETag" => "xx"));
							 | 
						||
| 
								 | 
							
								        $this->assertEquals($this->cleanXml(OssUtil::createCompleteMultipartUploadXmlBody($a)), $xml);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testCreateBucketXmlBody()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $xml = <<<BBBB
							 | 
						||
| 
								 | 
							
								<?xml version="1.0" encoding="UTF-8"?><CreateBucketConfiguration><StorageClass>Standard</StorageClass></CreateBucketConfiguration>
							 | 
						||
| 
								 | 
							
								BBBB;
							 | 
						||
| 
								 | 
							
								        $storageClass ="Standard";
							 | 
						||
| 
								 | 
							
								        $this->assertEquals($this->cleanXml(OssUtil::createBucketXmlBody($storageClass)), $xml);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testValidateBucket()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $this->assertTrue(OssUtil::validateBucket("xxx"));
							 | 
						||
| 
								 | 
							
								        $this->assertFalse(OssUtil::validateBucket("XXXqwe123"));
							 | 
						||
| 
								 | 
							
								        $this->assertFalse(OssUtil::validateBucket("XX"));
							 | 
						||
| 
								 | 
							
								        $this->assertFalse(OssUtil::validateBucket("/X"));
							 | 
						||
| 
								 | 
							
								        $this->assertFalse(OssUtil::validateBucket(""));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testValidateObject()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $this->assertTrue(OssUtil::validateObject("xxx"));
							 | 
						||
| 
								 | 
							
								        $this->assertTrue(OssUtil::validateObject("xxx23"));
							 | 
						||
| 
								 | 
							
								        $this->assertTrue(OssUtil::validateObject("12321-xxx"));
							 | 
						||
| 
								 | 
							
								        $this->assertTrue(OssUtil::validateObject("x"));
							 | 
						||
| 
								 | 
							
								        $this->assertFalse(OssUtil::validateObject("/aa"));
							 | 
						||
| 
								 | 
							
								        $this->assertFalse(OssUtil::validateObject("\\aa"));
							 | 
						||
| 
								 | 
							
								        $this->assertFalse(OssUtil::validateObject(""));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testStartWith()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $this->assertTrue(OssUtil::startsWith("xxab", "xx"), true);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testReadDir()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $list = OssUtil::readDir("./src", ".|..|.svn|.git", true);
							 | 
						||
| 
								 | 
							
								        $this->assertNotNull($list);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    //public function testIsWin()
							 | 
						||
| 
								 | 
							
								    //{
							 | 
						||
| 
								 | 
							
								    //    //$this->assertTrue(OssUtil::isWin());
							 | 
						||
| 
								 | 
							
								    //}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testGetMd5SumForFile()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(OssUtil::getMd5SumForFile(__FILE__, 0, filesize(__FILE__) - 1), base64_encode(md5(file_get_contents(__FILE__), true)));
							 | 
						||
| 
								 | 
							
								        // false case
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(OssUtil::getMd5SumForFile(__FILE__, 0, OssClient::OSS_MAX_PART_SIZE + 1), "");
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(OssUtil::getMd5SumForFile(__FILE__, 0, filesize(__FILE__) + 1), "");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testGenerateFile()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $path = __DIR__ . DIRECTORY_SEPARATOR . "generatedFile.txt";
							 | 
						||
| 
								 | 
							
								        OssUtil::generateFile($path, 1024 * 1024);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(filesize($path), 1024 * 1024);
							 | 
						||
| 
								 | 
							
								        unlink($path);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testThrowOssExceptionWithMessageIfEmpty()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $null = null;
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            OssUtil::throwOssExceptionWithMessageIfEmpty($null, "xx");
							 | 
						||
| 
								 | 
							
								            $this->assertTrue(false);
							 | 
						||
| 
								 | 
							
								        } catch (OssException $e) {
							 | 
						||
| 
								 | 
							
								            $this->assertEquals('xx', $e->getMessage());
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testThrowOssExceptionWithMessageIfEmpty2()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $null = "";
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            OssUtil::throwOssExceptionWithMessageIfEmpty($null, "xx");
							 | 
						||
| 
								 | 
							
								            $this->assertTrue(false);
							 | 
						||
| 
								 | 
							
								        } catch (OssException $e) {
							 | 
						||
| 
								 | 
							
								            $this->assertEquals('xx', $e->getMessage());
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testValidContent()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $null = "";
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            OssUtil::validateContent($null);
							 | 
						||
| 
								 | 
							
								            $this->assertTrue(false);
							 | 
						||
| 
								 | 
							
								        } catch (OssException $e) {
							 | 
						||
| 
								 | 
							
								            $this->assertEquals('http body content is invalid', $e->getMessage());
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $notnull = "x";
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            OssUtil::validateContent($notnull);
							 | 
						||
| 
								 | 
							
								            $this->assertTrue(true);
							 | 
						||
| 
								 | 
							
								        } catch (OssException $e) {
							 | 
						||
| 
								 | 
							
								            $this->assertEquals('http body content is invalid', $e->getMessage());
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testThrowOssExceptionWithMessageIfEmpty3()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $null = "xx";
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            OssUtil::throwOssExceptionWithMessageIfEmpty($null, "xx");
							 | 
						||
| 
								 | 
							
								            $this->assertTrue(True);
							 | 
						||
| 
								 | 
							
								        } catch (OssException $e) {
							 | 
						||
| 
								 | 
							
								            $this->assertTrue(false);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    private function cleanXml($xml)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return str_replace("\n", "", str_replace("\r", "", $xml));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function testGetHostPortFromEndpoint()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $str =  OssUtil::getHostPortFromEndpoint('http://username:password@hostname:80/path?arg=value#anchor');
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('hostname:80', $str);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $str =  OssUtil::getHostPortFromEndpoint('hostname:80');
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('hostname:80', $str);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $str =  OssUtil::getHostPortFromEndpoint('www.hostname.com');
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('www.hostname.com', $str);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $str =  OssUtil::getHostPortFromEndpoint('http://www.hostname.com');
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('www.hostname.com', $str);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $str =  OssUtil::getHostPortFromEndpoint('https://www.hostname.com');
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('www.hostname.com', $str);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $str =  OssUtil::getHostPortFromEndpoint('192.168.1.10:8080');
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('192.168.1.10:8080', $str);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $str =  OssUtil::getHostPortFromEndpoint('file://username:password@hostname:80/path?arg=value#anchor');
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('hostname:80', $str);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $str =  OssUtil::getHostPortFromEndpoint('https://WWW.hostname.com-_www.test.com');
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('WWW.hostname.com-_www.test.com', $str);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            $str =  OssUtil::getHostPortFromEndpoint('http:///path?arg=value#anchor');
							 | 
						||
| 
								 | 
							
								            $this->assertTrue(false);
							 | 
						||
| 
								 | 
							
								        } catch (OssException $e) {
							 | 
						||
| 
								 | 
							
								            $this->assertTrue(true);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            $str =  OssUtil::getHostPortFromEndpoint('https://www.hostname.com\www.test.com');
							 | 
						||
| 
								 | 
							
								            $this->assertTrue(false);
							 | 
						||
| 
								 | 
							
								        } catch (OssException $e) {
							 | 
						||
| 
								 | 
							
								            $this->assertTrue(true);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            $str =  OssUtil::getHostPortFromEndpoint('www.hostname.com-_*www.test.com');
							 | 
						||
| 
								 | 
							
								            $this->assertTrue(false);
							 | 
						||
| 
								 | 
							
								        } catch (OssException $e) {
							 | 
						||
| 
								 | 
							
								            $this->assertTrue(true);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            $str =  OssUtil::getHostPortFromEndpoint('www.hostname.com:ab123');
							 | 
						||
| 
								 | 
							
								            $this->assertTrue(false);
							 | 
						||
| 
								 | 
							
								        } catch (OssException $e) {
							 | 
						||
| 
								 | 
							
								            $this->assertTrue(true);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            $str =  OssUtil::getHostPortFromEndpoint('www.hostname.com:');
							 | 
						||
| 
								 | 
							
								            $this->assertTrue(false);
							 | 
						||
| 
								 | 
							
								        } catch (OssException $e) {
							 | 
						||
| 
								 | 
							
								            $this->assertTrue(true);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testDecodeKey()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            OssUtil::decodeKey("key", "unknown");
							 | 
						||
| 
								 | 
							
								            $this->assertTrue(false);
							 | 
						||
| 
								 | 
							
								        } catch (OssException $e) {
							 | 
						||
| 
								 | 
							
								            $this->assertTrue(true);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |