| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494 | <?phpnamespace OSS\Tests;use OSS\Core\OssException;use OSS\OssClient;use OSS\Credentials\Credentials;use OSS\Credentials\CredentialsProvider;use OSS\Credentials\StaticCredentialsProvider;class TestEmptyIdCredentials extends Credentials{    public function __construct()    {    }    public function getAccessKeyId()    {        return '';    }    public function getAccessKeySecret()    {        return 'secret';    }    public function getSecurityToken()    {        return null;    }}class TestEmptySecretCredentials extends Credentials{    public function __construct()    {    }    public function getAccessKeyId()    {        return 'id';    }    public function getAccessKeySecret()    {        return '';    }    public function getSecurityToken()    {        return null;    }}class TestCredentialsProvider implements CredentialsProvider{    private $credentials;    public function __construct($flag)    {        if ($flag == 2) {            $this->credentials =  new TestEmptyIdCredentials();        }        else if ($flag == 1) {            $this->credentials =  new TestEmptySecretCredentials();        }        else {            $this->credentials = null;        }    }    /**     * @return Credentials     */    public function getCredentials()    {        return $this->credentials;    }}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);        }    }    public function testEmptyCredentials()    {        // empty case, should throw exception        try {            $id = '';            $secret = 'accessKey_secret';            $provider = new StaticCredentialsProvider($id, $secret);            $config = array(                'provider' => $provider,                'endpoint'=>'http://oss-cn-hangzhou.aliyuncs.com'            );            $ossClient = new OssClient($config);            $this->assertFalse(true);        } catch (OssException $e) {            $this->assertEquals('access key id is empty', $e->getMessage());        }        // empty case, should throw exception        try {            $id = 'id';            $secret = '';            $provider = new StaticCredentialsProvider($id, $secret);            $config = array(                'provider' => $provider,                'endpoint'=>'http://oss-cn-hangzhou.aliyuncs.com'            );            $ossClient = new OssClient($config);            $this->assertFalse(true);        } catch (OssException $e) {            $this->assertEquals('access key secret is empty', $e->getMessage());        }        // empty case, should throw exception        try {            $provider = new TestCredentialsProvider(0);            $config = array(                'provider' => $provider,                'endpoint'=>'http://oss-cn-hangzhou.aliyuncs.com'            );            $ossClient = new OssClient($config);            $ossClient->getBucketAcl("bucket");            $this->assertFalse(true);        } catch (OssException $e) {            $this->assertEquals('credentials is empty.', $e->getMessage());        }        // empty case, should throw exception        try {            $provider = new TestCredentialsProvider(1);            $config = array(                'provider' => $provider,                'endpoint'=>'http://oss-cn-hangzhou.aliyuncs.com'            );            $ossClient = new OssClient($config);            $ossClient->getBucketAcl("bucket");            $this->assertFalse(true);        } catch (OssException $e) {            $this->assertEquals('access key secret is empty', $e->getMessage());        }        // empty case, should throw exception        try {            $provider = new TestCredentialsProvider(2);            $config = array(                'provider' => $provider,                'endpoint'=>'http://oss-cn-hangzhou.aliyuncs.com'            );            $ossClient = new OssClient($config);            $ossClient->getBucketAcl("bucket");            $this->assertFalse(true);        } catch (OssException $e) {            $this->assertEquals('access key id is empty', $e->getMessage());        }    }}
 |