CorsConfigTest.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <?php
  2. namespace OSS\Tests;
  3. use OSS\Model\CorsConfig;
  4. use OSS\Model\CorsRule;
  5. use OSS\Core\OssException;
  6. class CorsConfigTest extends \PHPUnit\Framework\TestCase
  7. {
  8. private $validXml = <<<BBBB
  9. <?xml version="1.0" encoding="utf-8"?>
  10. <CORSConfiguration>
  11. <CORSRule>
  12. <AllowedOrigin>http://www.b.com</AllowedOrigin>
  13. <AllowedOrigin>http://www.a.com</AllowedOrigin>
  14. <AllowedOrigin>http://www.a.com</AllowedOrigin>
  15. <AllowedMethod>GET</AllowedMethod>
  16. <AllowedMethod>PUT</AllowedMethod>
  17. <AllowedMethod>POST</AllowedMethod>
  18. <AllowedHeader>x-oss-test</AllowedHeader>
  19. <AllowedHeader>x-oss-test2</AllowedHeader>
  20. <AllowedHeader>x-oss-test2</AllowedHeader>
  21. <AllowedHeader>x-oss-test3</AllowedHeader>
  22. <ExposeHeader>x-oss-test1</ExposeHeader>
  23. <ExposeHeader>x-oss-test1</ExposeHeader>
  24. <ExposeHeader>x-oss-test2</ExposeHeader>
  25. <MaxAgeSeconds>10</MaxAgeSeconds>
  26. </CORSRule>
  27. <CORSRule>
  28. <AllowedOrigin>http://www.b.com</AllowedOrigin>
  29. <AllowedMethod>GET</AllowedMethod>
  30. <AllowedHeader>x-oss-test</AllowedHeader>
  31. <ExposeHeader>x-oss-test1</ExposeHeader>
  32. <MaxAgeSeconds>110</MaxAgeSeconds>
  33. </CORSRule>
  34. </CORSConfiguration>
  35. BBBB;
  36. private $validXml2 = <<<BBBB
  37. <?xml version="1.0" encoding="utf-8"?>
  38. <CORSConfiguration>
  39. <CORSRule>
  40. <AllowedOrigin>http://www.b.com</AllowedOrigin>
  41. <AllowedOrigin>http://www.a.com</AllowedOrigin>
  42. <AllowedOrigin>http://www.a.com</AllowedOrigin>
  43. <AllowedMethod>GET</AllowedMethod>
  44. <AllowedMethod>PUT</AllowedMethod>
  45. <AllowedMethod>POST</AllowedMethod>
  46. <AllowedHeader>x-oss-test</AllowedHeader>
  47. <AllowedHeader>x-oss-test2</AllowedHeader>
  48. <AllowedHeader>x-oss-test2</AllowedHeader>
  49. <AllowedHeader>x-oss-test3</AllowedHeader>
  50. <ExposeHeader>x-oss-test1</ExposeHeader>
  51. <ExposeHeader>x-oss-test1</ExposeHeader>
  52. <ExposeHeader>x-oss-test2</ExposeHeader>
  53. <MaxAgeSeconds>10</MaxAgeSeconds>
  54. </CORSRule>
  55. </CORSConfiguration>
  56. BBBB;
  57. public function testParseValidXml()
  58. {
  59. $corsConfig = new CorsConfig();
  60. $corsConfig->parseFromXml($this->validXml);
  61. $this->assertEquals($this->cleanXml($this->validXml), $this->cleanXml($corsConfig->serializeToXml()));
  62. $this->assertNotNull($corsConfig->getRules());
  63. $rules = $corsConfig->getRules();
  64. $this->assertNotNull($rules[0]->getAllowedHeaders());
  65. $this->assertNotNull($rules[0]->getAllowedMethods());
  66. $this->assertNotNull($rules[0]->getAllowedOrigins());
  67. $this->assertNotNull($rules[0]->getExposeHeaders());
  68. $this->assertNotNull($rules[0]->getMaxAgeSeconds());
  69. }
  70. public function testParseValidXml2()
  71. {
  72. $corsConfig = new CorsConfig();
  73. $corsConfig->parseFromXml($this->validXml2);
  74. $this->assertEquals($this->cleanXml($this->validXml2), $this->cleanXml($corsConfig->serializeToXml()));
  75. }
  76. public function testCreateCorsConfigFromMoreThan10Rules()
  77. {
  78. $corsConfig = new CorsConfig();
  79. $rule = new CorsRule();
  80. for ($i = 0; $i < CorsConfig::OSS_MAX_RULES; $i += 1) {
  81. $corsConfig->addRule($rule);
  82. }
  83. try {
  84. $corsConfig->addRule($rule);
  85. $this->assertFalse(true);
  86. } catch (OssException $e) {
  87. $this->assertEquals($e->getMessage(), "num of rules in the config exceeds self::OSS_MAX_RULES: " . strval(CorsConfig::OSS_MAX_RULES));
  88. }
  89. }
  90. public function testCreateCorsConfigParamAbsent()
  91. {
  92. $corsConfig = new CorsConfig();
  93. $rule = new CorsRule();
  94. $corsConfig->addRule($rule);
  95. try {
  96. $xml = $corsConfig->serializeToXml();
  97. $this->assertFalse(true);
  98. } catch (OssException $e) {
  99. $this->assertEquals($e->getMessage(), "maxAgeSeconds is not set in the Rule");
  100. }
  101. }
  102. public function testCreateCorsConfigFromScratch()
  103. {
  104. $corsConfig = new CorsConfig();
  105. $rule = new CorsRule();
  106. $rule->addAllowedHeader("x-oss-test");
  107. $rule->addAllowedHeader("x-oss-test2");
  108. $rule->addAllowedHeader("x-oss-test2");
  109. $rule->addAllowedHeader("x-oss-test3");
  110. $rule->addAllowedOrigin("http://www.b.com");
  111. $rule->addAllowedOrigin("http://www.a.com");
  112. $rule->addAllowedOrigin("http://www.a.com");
  113. $rule->addAllowedMethod("GET");
  114. $rule->addAllowedMethod("PUT");
  115. $rule->addAllowedMethod("POST");
  116. $rule->addExposeHeader("x-oss-test1");
  117. $rule->addExposeHeader("x-oss-test1");
  118. $rule->addExposeHeader("x-oss-test2");
  119. $rule->setMaxAgeSeconds(10);
  120. $corsConfig->addRule($rule);
  121. $this->assertEquals($this->cleanXml($this->validXml2), $this->cleanXml($corsConfig->serializeToXml()));
  122. $this->assertEquals($this->cleanXml($this->validXml2), $this->cleanXml(strval($corsConfig)));
  123. }
  124. private function cleanXml($xml)
  125. {
  126. return str_replace("\n", "", str_replace("\r", "", $xml));
  127. }
  128. }