You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
140 lines
4.9 KiB
140 lines
4.9 KiB
<?php |
|
|
|
namespace OSS\Tests; |
|
|
|
|
|
use OSS\Model\CorsConfig; |
|
use OSS\Model\CorsRule; |
|
use OSS\Core\OssException; |
|
|
|
class CorsConfigTest extends \PHPUnit_Framework_TestCase |
|
{ |
|
private $validXml = <<<BBBB |
|
<?xml version="1.0" encoding="utf-8"?> |
|
<CORSConfiguration> |
|
<CORSRule> |
|
<AllowedOrigin>http://www.b.com</AllowedOrigin> |
|
<AllowedOrigin>http://www.a.com</AllowedOrigin> |
|
<AllowedOrigin>http://www.a.com</AllowedOrigin> |
|
<AllowedMethod>GET</AllowedMethod> |
|
<AllowedMethod>PUT</AllowedMethod> |
|
<AllowedMethod>POST</AllowedMethod> |
|
<AllowedHeader>x-oss-test</AllowedHeader> |
|
<AllowedHeader>x-oss-test2</AllowedHeader> |
|
<AllowedHeader>x-oss-test2</AllowedHeader> |
|
<AllowedHeader>x-oss-test3</AllowedHeader> |
|
<ExposeHeader>x-oss-test1</ExposeHeader> |
|
<ExposeHeader>x-oss-test1</ExposeHeader> |
|
<ExposeHeader>x-oss-test2</ExposeHeader> |
|
<MaxAgeSeconds>10</MaxAgeSeconds> |
|
</CORSRule> |
|
<CORSRule> |
|
<AllowedOrigin>http://www.b.com</AllowedOrigin> |
|
<AllowedMethod>GET</AllowedMethod> |
|
<AllowedHeader>x-oss-test</AllowedHeader> |
|
<ExposeHeader>x-oss-test1</ExposeHeader> |
|
<MaxAgeSeconds>110</MaxAgeSeconds> |
|
</CORSRule> |
|
</CORSConfiguration> |
|
BBBB; |
|
|
|
private $validXml2 = <<<BBBB |
|
<?xml version="1.0" encoding="utf-8"?> |
|
<CORSConfiguration> |
|
<CORSRule> |
|
<AllowedOrigin>http://www.b.com</AllowedOrigin> |
|
<AllowedOrigin>http://www.a.com</AllowedOrigin> |
|
<AllowedOrigin>http://www.a.com</AllowedOrigin> |
|
<AllowedMethod>GET</AllowedMethod> |
|
<AllowedMethod>PUT</AllowedMethod> |
|
<AllowedMethod>POST</AllowedMethod> |
|
<AllowedHeader>x-oss-test</AllowedHeader> |
|
<AllowedHeader>x-oss-test2</AllowedHeader> |
|
<AllowedHeader>x-oss-test2</AllowedHeader> |
|
<AllowedHeader>x-oss-test3</AllowedHeader> |
|
<ExposeHeader>x-oss-test1</ExposeHeader> |
|
<ExposeHeader>x-oss-test1</ExposeHeader> |
|
<ExposeHeader>x-oss-test2</ExposeHeader> |
|
<MaxAgeSeconds>10</MaxAgeSeconds> |
|
</CORSRule> |
|
</CORSConfiguration> |
|
BBBB; |
|
|
|
public function testParseValidXml() |
|
{ |
|
$corsConfig = new CorsConfig(); |
|
$corsConfig->parseFromXml($this->validXml); |
|
$this->assertEquals($this->cleanXml($this->validXml), $this->cleanXml($corsConfig->serializeToXml())); |
|
$this->assertNotNull($corsConfig->getRules()); |
|
$rules = $corsConfig->getRules(); |
|
$this->assertNotNull($rules[0]->getAllowedHeaders()); |
|
$this->assertNotNull($rules[0]->getAllowedMethods()); |
|
$this->assertNotNull($rules[0]->getAllowedOrigins()); |
|
$this->assertNotNull($rules[0]->getExposeHeaders()); |
|
$this->assertNotNull($rules[0]->getMaxAgeSeconds()); |
|
} |
|
|
|
public function testParseValidXml2() |
|
{ |
|
$corsConfig = new CorsConfig(); |
|
$corsConfig->parseFromXml($this->validXml2); |
|
$this->assertEquals($this->cleanXml($this->validXml2), $this->cleanXml($corsConfig->serializeToXml())); |
|
} |
|
|
|
public function testCreateCorsConfigFromMoreThan10Rules() |
|
{ |
|
$corsConfig = new CorsConfig(); |
|
$rule = new CorsRule(); |
|
for ($i = 0; $i < CorsConfig::OSS_MAX_RULES; $i += 1) { |
|
$corsConfig->addRule($rule); |
|
} |
|
try { |
|
$corsConfig->addRule($rule); |
|
$this->assertFalse(true); |
|
} catch (OssException $e) { |
|
$this->assertEquals($e->getMessage(), "num of rules in the config exceeds self::OSS_MAX_RULES: " . strval(CorsConfig::OSS_MAX_RULES)); |
|
} |
|
} |
|
|
|
public function testCreateCorsConfigParamAbsent() |
|
{ |
|
$corsConfig = new CorsConfig(); |
|
$rule = new CorsRule(); |
|
$corsConfig->addRule($rule); |
|
|
|
try { |
|
$xml = $corsConfig->serializeToXml(); |
|
$this->assertFalse(true); |
|
} catch (OssException $e) { |
|
$this->assertEquals($e->getMessage(), "maxAgeSeconds is not set in the Rule"); |
|
} |
|
} |
|
|
|
public function testCreateCorsConfigFromScratch() |
|
{ |
|
$corsConfig = new CorsConfig(); |
|
$rule = new CorsRule(); |
|
$rule->addAllowedHeader("x-oss-test"); |
|
$rule->addAllowedHeader("x-oss-test2"); |
|
$rule->addAllowedHeader("x-oss-test2"); |
|
$rule->addAllowedHeader("x-oss-test3"); |
|
$rule->addAllowedOrigin("http://www.b.com"); |
|
$rule->addAllowedOrigin("http://www.a.com"); |
|
$rule->addAllowedOrigin("http://www.a.com"); |
|
$rule->addAllowedMethod("GET"); |
|
$rule->addAllowedMethod("PUT"); |
|
$rule->addAllowedMethod("POST"); |
|
$rule->addExposeHeader("x-oss-test1"); |
|
$rule->addExposeHeader("x-oss-test1"); |
|
$rule->addExposeHeader("x-oss-test2"); |
|
$rule->setMaxAgeSeconds(10); |
|
$corsConfig->addRule($rule); |
|
$this->assertEquals($this->cleanXml($this->validXml2), $this->cleanXml($corsConfig->serializeToXml())); |
|
$this->assertEquals($this->cleanXml($this->validXml2), $this->cleanXml(strval($corsConfig))); |
|
} |
|
|
|
private function cleanXml($xml) |
|
{ |
|
return str_replace("\n", "", str_replace("\r", "", $xml)); |
|
} |
|
}
|
|
|