CookieManagerTest.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. <?php
  2. namespace Magento\Framework\Stdlib;
  3. /**
  4. * Copyright © Magento, Inc. All rights reserved.
  5. * See COPYING.txt for license details.
  6. */
  7. use Magento\TestFramework\Helper\Bootstrap;
  8. use Magento\TestFramework\TestCase\HttpClient\CurlClientWithCookies;
  9. /**
  10. * End to end test of the Cookie Manager, using curl.
  11. *
  12. * Uses controllers in TestModule1 to set and delete cookies and verify 'Set-Cookie' headers that come back.
  13. */
  14. class CookieManagerTest extends \Magento\TestFramework\TestCase\WebapiAbstract
  15. {
  16. private $cookieTesterUrl = 'testmoduleone/CookieTester';
  17. /** @var CurlClientWithCookies */
  18. protected $curlClient;
  19. public function setUp()
  20. {
  21. $objectManager = Bootstrap::getObjectManager();
  22. $this->config = $objectManager->get(\Magento\Webapi\Model\Config::class);
  23. $this->curlClient = $objectManager->get(
  24. \Magento\TestFramework\TestCase\HttpClient\CurlClientWithCookies::class
  25. );
  26. }
  27. /**
  28. * Set a sensitive Cookie and delete it.
  29. *
  30. */
  31. public function testSensitiveCookie()
  32. {
  33. $url = $this->cookieTesterUrl . '/SetSensitiveCookie';
  34. $cookieParams =
  35. [
  36. 'cookie_name' => 'test-sensitive-cookie',
  37. 'cookie_value' => 'test-sensitive-cookie-value',
  38. ];
  39. $response = $this->curlClient->get($url, $cookieParams);
  40. $cookie = $this->findCookie($cookieParams['cookie_name'], $response['cookies']);
  41. $this->assertNotNull($cookie);
  42. $this->assertEquals($cookieParams['cookie_name'], $cookie['name']);
  43. $this->assertEquals($cookieParams['cookie_value'], $cookie['value']);
  44. $this->assertFalse(isset($cookie['domain']));
  45. $this->assertFalse(isset($cookie['path']));
  46. $this->assertEquals('true', $cookie['httponly']);
  47. $this->assertFalse(isset($cookie['secure']));
  48. $this->assertFalse(isset($cookie['max-age']));
  49. }
  50. /**
  51. * Set a public cookie
  52. *
  53. */
  54. public function testPublicCookieNameValue()
  55. {
  56. $url = $this->cookieTesterUrl . '/SetPublicCookie';
  57. $cookieParams =
  58. [
  59. 'cookie_name' => 'test-cookie',
  60. 'cookie_value' => 'test-cookie-value',
  61. ];
  62. $response = $this->curlClient->get($url, $cookieParams);
  63. $cookie = $this->findCookie($cookieParams['cookie_name'], $response['cookies']);
  64. $this->assertNotNull($cookie);
  65. $this->assertEquals($cookieParams['cookie_name'], $cookie['name']);
  66. $this->assertEquals($cookieParams['cookie_value'], $cookie['value']);
  67. $this->assertFalse(isset($cookie['domain']));
  68. $this->assertFalse(isset($cookie['path']));
  69. $this->assertFalse(isset($cookie['httponly']));
  70. $this->assertFalse(isset($cookie['secure']));
  71. $this->assertFalse(isset($cookie['max-age']));
  72. }
  73. /**
  74. * Set a public cookie
  75. *
  76. */
  77. public function testPublicCookieAll()
  78. {
  79. $url = $this->cookieTesterUrl . '/SetPublicCookie';
  80. $cookieParams =
  81. [
  82. 'cookie_name' => 'test-cookie',
  83. 'cookie_value' => 'test-cookie-value',
  84. 'cookie_domain' => 'www.example.com',
  85. 'cookie_path' => '/test/path',
  86. 'cookie_httponly' => 'true',
  87. 'cookie_secure' => 'true',
  88. 'cookie_duration' => '600',
  89. ];
  90. $response = $this->curlClient->get($url, $cookieParams);
  91. $cookie = $this->findCookie($cookieParams['cookie_name'], $response['cookies']);
  92. $this->assertNotNull($cookie);
  93. $this->assertEquals($cookieParams['cookie_name'], $cookie['name']);
  94. $this->assertEquals($cookieParams['cookie_value'], $cookie['value']);
  95. $this->assertEquals($cookieParams['cookie_domain'], $cookie['domain']);
  96. $this->assertEquals($cookieParams['cookie_path'], $cookie['path']);
  97. $this->assertEquals($cookieParams['cookie_httponly'], $cookie['httponly']);
  98. $this->assertEquals($cookieParams['cookie_secure'], $cookie['secure']);
  99. if (isset($cookie['max-age'])) {
  100. $this->assertEquals($cookieParams['cookie_duration'], $cookie['max-age']);
  101. }
  102. $this->assertTrue(isset($cookie['expires']));
  103. }
  104. /**
  105. * Delete a cookie
  106. *
  107. */
  108. public function testDeleteCookie()
  109. {
  110. $url = $this->cookieTesterUrl . '/DeleteCookie';
  111. $cookieParams =
  112. [
  113. 'cookie_name' => 'test-cookie',
  114. 'cookie_value' => 'test-cookie-value',
  115. ];
  116. $response = $this->curlClient->get(
  117. $url,
  118. $cookieParams,
  119. ['Cookie: test-cookie=test-cookie-value; anothertestcookie=anothertestcookievalue']
  120. );
  121. $cookie = $this->findCookie($cookieParams['cookie_name'], $response['cookies']);
  122. $this->assertNotNull($cookie);
  123. $this->assertEquals($cookieParams['cookie_name'], $cookie['name']);
  124. $this->assertEquals('deleted', $cookie['value']);
  125. $this->assertFalse(isset($cookie['domain']));
  126. $this->assertFalse(isset($cookie['path']));
  127. $this->assertFalse(isset($cookie['httponly']));
  128. $this->assertFalse(isset($cookie['secure']));
  129. if (isset($cookie['max-age'])) {
  130. $this->assertEquals(0, $cookie['max-age']);
  131. }
  132. $this->assertEquals('Thu, 01-Jan-1970 00:00:01 GMT', $cookie['expires']);
  133. }
  134. /**
  135. * Find cookie with given name in the list of cookies
  136. *
  137. * @param string $cookieName
  138. * @param array $cookies
  139. * @return $cookie|null
  140. * @SuppressWarnings(PHPMD.UnusedLocalVariable)
  141. */
  142. private function findCookie($cookieName, $cookies)
  143. {
  144. foreach ($cookies as $cookieIndex => $cookie) {
  145. if ($cookie['name'] === $cookieName) {
  146. return $cookie;
  147. }
  148. }
  149. return null;
  150. }
  151. }