174 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			174 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
namespace Magento\Framework\Stdlib;
 | 
						|
 | 
						|
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
 | 
						|
use Magento\TestFramework\Helper\Bootstrap;
 | 
						|
use Magento\TestFramework\TestCase\HttpClient\CurlClientWithCookies;
 | 
						|
 | 
						|
/**
 | 
						|
 * End to end test of the Cookie Manager, using curl.
 | 
						|
 *
 | 
						|
 * Uses controllers in TestModule1 to set and delete cookies and verify 'Set-Cookie' headers that come back.
 | 
						|
 */
 | 
						|
class CookieManagerTest extends \Magento\TestFramework\TestCase\WebapiAbstract
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * @var string
 | 
						|
     */
 | 
						|
    private $cookieTesterUrl = 'testmoduleone/CookieTester';
 | 
						|
 | 
						|
    /** @var CurlClientWithCookies */
 | 
						|
    protected $curlClient;
 | 
						|
 | 
						|
    protected function setUp(): void
 | 
						|
    {
 | 
						|
        $objectManager = Bootstrap::getObjectManager();
 | 
						|
        $this->curlClient = $objectManager->get(
 | 
						|
            \Magento\TestFramework\TestCase\HttpClient\CurlClientWithCookies::class
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Set a sensitive Cookie and delete it.
 | 
						|
     *
 | 
						|
     */
 | 
						|
    public function testSensitiveCookie()
 | 
						|
    {
 | 
						|
        $url = $this->cookieTesterUrl . '/SetSensitiveCookie';
 | 
						|
        $cookieParams =
 | 
						|
            [
 | 
						|
                'cookie_name' => 'test-sensitive-cookie',
 | 
						|
                'cookie_value' => 'test-sensitive-cookie-value',
 | 
						|
            ];
 | 
						|
        $response = $this->curlClient->get($url, $cookieParams);
 | 
						|
 | 
						|
        $cookie = $this->findCookie($cookieParams['cookie_name'], $response['cookies']);
 | 
						|
        $this->assertNotNull($cookie);
 | 
						|
        $this->assertEquals($cookieParams['cookie_name'], $cookie['name']);
 | 
						|
        $this->assertEquals($cookieParams['cookie_value'], $cookie['value']);
 | 
						|
        $this->assertFalse(isset($cookie['domain']));
 | 
						|
        $this->assertFalse(isset($cookie['path']));
 | 
						|
        $this->assertEquals('true', $cookie['httponly']);
 | 
						|
        $this->assertFalse(isset($cookie['secure']));
 | 
						|
        $this->assertFalse(isset($cookie['max-age']));
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Set a public cookie
 | 
						|
     *
 | 
						|
     */
 | 
						|
    public function testPublicCookieNameValue()
 | 
						|
    {
 | 
						|
        $url = $this->cookieTesterUrl . '/SetPublicCookie';
 | 
						|
        $cookieParams =
 | 
						|
            [
 | 
						|
                'cookie_name' => 'test-cookie',
 | 
						|
                'cookie_value' => 'test-cookie-value',
 | 
						|
            ];
 | 
						|
 | 
						|
        $response = $this->curlClient->get($url, $cookieParams);
 | 
						|
 | 
						|
        $cookie = $this->findCookie($cookieParams['cookie_name'], $response['cookies']);
 | 
						|
        $this->assertNotNull($cookie);
 | 
						|
        $this->assertEquals($cookieParams['cookie_name'], $cookie['name']);
 | 
						|
        $this->assertEquals($cookieParams['cookie_value'], $cookie['value']);
 | 
						|
        $this->assertFalse(isset($cookie['domain']));
 | 
						|
        $this->assertFalse(isset($cookie['path']));
 | 
						|
        $this->assertFalse(isset($cookie['httponly']));
 | 
						|
        $this->assertFalse(isset($cookie['secure']));
 | 
						|
        $this->assertFalse(isset($cookie['max-age']));
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Set a public cookie
 | 
						|
     *
 | 
						|
     */
 | 
						|
    public function testPublicCookieAll()
 | 
						|
    {
 | 
						|
        $url = $this->cookieTesterUrl . '/SetPublicCookie';
 | 
						|
        $cookieParams =
 | 
						|
            [
 | 
						|
                'cookie_name' => 'test-cookie',
 | 
						|
                'cookie_value' => 'test-cookie-value',
 | 
						|
                'cookie_domain' => 'www.example.com',
 | 
						|
                'cookie_path' => '/test/path',
 | 
						|
                'cookie_httponly' => 'true',
 | 
						|
                'cookie_secure' => 'true',
 | 
						|
                'cookie_duration' => '600',
 | 
						|
            ];
 | 
						|
 | 
						|
        $response = $this->curlClient->get($url, $cookieParams);
 | 
						|
 | 
						|
        $cookie = $this->findCookie($cookieParams['cookie_name'], $response['cookies']);
 | 
						|
        $this->assertNotNull($cookie);
 | 
						|
        $this->assertEquals($cookieParams['cookie_name'], $cookie['name']);
 | 
						|
        $this->assertEquals($cookieParams['cookie_value'], $cookie['value']);
 | 
						|
        $this->assertEquals($cookieParams['cookie_domain'], $cookie['domain']);
 | 
						|
        $this->assertEquals($cookieParams['cookie_path'], $cookie['path']);
 | 
						|
        $this->assertEquals($cookieParams['cookie_httponly'], $cookie['httponly']);
 | 
						|
        $this->assertEquals($cookieParams['cookie_secure'], $cookie['secure']);
 | 
						|
        if (isset($cookie['max-age'])) {
 | 
						|
            $this->assertEquals($cookieParams['cookie_duration'], $cookie['max-age']);
 | 
						|
        }
 | 
						|
        $this->assertTrue(isset($cookie['expires']));
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Delete a cookie
 | 
						|
     *
 | 
						|
     */
 | 
						|
    public function testDeleteCookie()
 | 
						|
    {
 | 
						|
        $url = $this->cookieTesterUrl . '/DeleteCookie';
 | 
						|
        $cookieParams =
 | 
						|
            [
 | 
						|
                'cookie_name' => 'test-cookie',
 | 
						|
                'cookie_value' => 'test-cookie-value',
 | 
						|
            ];
 | 
						|
 | 
						|
        $response = $this->curlClient->get(
 | 
						|
            $url,
 | 
						|
            $cookieParams,
 | 
						|
            ['Cookie: test-cookie=test-cookie-value; anothertestcookie=anothertestcookievalue']
 | 
						|
        );
 | 
						|
 | 
						|
        $cookie = $this->findCookie($cookieParams['cookie_name'], $response['cookies']);
 | 
						|
        $this->assertNotNull($cookie);
 | 
						|
        $this->assertEquals($cookieParams['cookie_name'], $cookie['name']);
 | 
						|
        $this->assertEquals('deleted', $cookie['value']);
 | 
						|
        $this->assertFalse(isset($cookie['domain']));
 | 
						|
        $this->assertFalse(isset($cookie['path']));
 | 
						|
        $this->assertFalse(isset($cookie['httponly']));
 | 
						|
        $this->assertFalse(isset($cookie['secure']));
 | 
						|
        if (isset($cookie['max-age'])) {
 | 
						|
            $this->assertEquals(0, $cookie['max-age']);
 | 
						|
        }
 | 
						|
        $this->assertEquals(
 | 
						|
            date('D, j-M-o H:i:s T', strtotime('Thu, 01-Jan-1970 00:00:01 GMT')),
 | 
						|
            date('D, j-M-o H:i:s T', strtotime($cookie['expires']))
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Find cookie with given name in the list of cookies
 | 
						|
     *
 | 
						|
     * @param string $cookieName
 | 
						|
     * @param array $cookies
 | 
						|
     * @return $cookie|null
 | 
						|
     * @SuppressWarnings(PHPMD.UnusedLocalVariable)
 | 
						|
     */
 | 
						|
    private function findCookie($cookieName, $cookies)
 | 
						|
    {
 | 
						|
        foreach ($cookies as $cookieIndex => $cookie) {
 | 
						|
            if ($cookie['name'] === $cookieName) {
 | 
						|
                return $cookie;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        return null;
 | 
						|
    }
 | 
						|
}
 |