From c7a6c5669660a1dfb909d21a4a7ef70d0d09b8ff Mon Sep 17 00:00:00 2001
From: Volodymyr Kublytskyi <vkublytskyi@magento.com>
Date: Mon, 4 Dec 2017 13:02:03 +0200
Subject: [PATCH] MAGETWO-83373: Fix for issue 9633 500 error on setup wizard
 with memcache #11608

 - fixed test failures
---
 .../Magento/Framework/Session/ConfigTest.php  | 53 ++++++++++---------
 .../Magento/Framework/Session/Config.php      | 14 ++---
 .../Session/Test/Unit/ConfigTest.php          | 27 ++++++----
 3 files changed, 53 insertions(+), 41 deletions(-)

diff --git a/dev/tests/integration/testsuite/Magento/Framework/Session/ConfigTest.php b/dev/tests/integration/testsuite/Magento/Framework/Session/ConfigTest.php
index 629089ae4d9..573531cff96 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Session/ConfigTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Session/ConfigTest.php
@@ -36,15 +36,18 @@ class ConfigTest extends \PHPUnit\Framework\TestCase
             $sessionManager->writeClose();
         }
         $this->deploymentConfigMock = $this->createMock(\Magento\Framework\App\DeploymentConfig::class);
-
-        $this->deploymentConfigMock->expects($this->at(0))
-            ->method('get')
-            ->with(Config::PARAM_SESSION_SAVE_PATH)
-            ->will($this->returnValue(null));
-        $this->deploymentConfigMock->expects($this->at(1))
+        $this->deploymentConfigMock
             ->method('get')
-            ->with(Config::PARAM_SESSION_CACHE_LIMITER)
-            ->will($this->returnValue($this->_cacheLimiter));
+            ->willReturnCallback(function ($configPath) {
+                switch ($configPath) {
+                    case Config::PARAM_SESSION_SAVE_METHOD:
+                        return 'files';
+                    case Config::PARAM_SESSION_CACHE_LIMITER:
+                        return $this->_cacheLimiter;
+                    default:
+                        return null;
+                }
+            });
 
         $this->_model = $this->_objectManager->create(
             \Magento\Framework\Session\Config::class,
@@ -83,15 +86,6 @@ class ConfigTest extends \PHPUnit\Framework\TestCase
         $this->assertEquals($this->_model->getSavePath(), $this->_model->getOption('save_path'));
     }
 
-    /**
-     * Unable to add integration tests for testGetLifetimePathNonDefault
-     *
-     * Error: Cannot modify header information - headers already sent
-     */
-    public function testGetLifetimePathNonDefault()
-    {
-    }
-
     public function testSetOptionsInvalidValue()
     {
         $preValue = $this->_model->getOptions();
@@ -280,16 +274,27 @@ class ConfigTest extends \PHPUnit\Framework\TestCase
             $this->markTestSkipped('Cannot set session.save_path with ini_set');
         }
 
-        $this->deploymentConfigMock->expects($this->at(0))
+        $deploymentConfigMock = $this->createMock(\Magento\Framework\App\DeploymentConfig::class);
+        $deploymentConfigMock
             ->method('get')
-            ->with(Config::PARAM_SESSION_SAVE_PATH)
-            ->will($this->returnValue($given));
-
-        $this->_model = $this->_objectManager->create(
+            ->willReturnCallback(function ($configPath) use ($given) {
+                switch ($configPath) {
+                    case Config::PARAM_SESSION_SAVE_METHOD:
+                        return 'files';
+                    case Config::PARAM_SESSION_CACHE_LIMITER:
+                        return $this->_cacheLimiter;
+                    case Config::PARAM_SESSION_SAVE_PATH:
+                        return $given;
+                    default:
+                        return null;
+                }
+            });
+
+        $model = $this->_objectManager->create(
             \Magento\Framework\Session\Config::class,
-            ['deploymentConfig' => $this->deploymentConfigMock]
+            ['deploymentConfig' => $deploymentConfigMock]
         );
-        $this->assertEquals($expected, $this->_model->getOption('save_path'));
+        $this->assertEquals($expected, $model->getOption('save_path'));
 
         if ($sessionSavePath != ini_get('session.save_path')) {
             ini_set('session.save_path', $sessionSavePath);
diff --git a/lib/internal/Magento/Framework/Session/Config.php b/lib/internal/Magento/Framework/Session/Config.php
index 73a5eb26df4..053bd3e7fd6 100644
--- a/lib/internal/Magento/Framework/Session/Config.php
+++ b/lib/internal/Magento/Framework/Session/Config.php
@@ -133,14 +133,14 @@ class Config implements ConfigInterface
         if ($savePath) {
             $this->setSavePath($savePath);
         }
-	/**
-	* Session save handler - memcache,files,etc
-	*/
-	$saveHandler=$deploymentConfig->get(self::PARAM_SESSION_SAVE_METHOD);
-	if ($saveHandler) {
-		$this->setOption('session.save_handler', $saveHandler);
-	}
 
+        /**
+        * Session save handler - memcache, files, etc
+        */
+        $saveHandler = $deploymentConfig->get(self::PARAM_SESSION_SAVE_METHOD);
+        if ($saveHandler) {
+            $this->setOption('session.save_handler', $saveHandler);
+        }
 
         /**
          * Session cache limiter
diff --git a/lib/internal/Magento/Framework/Session/Test/Unit/ConfigTest.php b/lib/internal/Magento/Framework/Session/Test/Unit/ConfigTest.php
index 66fc12b4930..12e28cdb397 100644
--- a/lib/internal/Magento/Framework/Session/Test/Unit/ConfigTest.php
+++ b/lib/internal/Magento/Framework/Session/Test/Unit/ConfigTest.php
@@ -350,33 +350,36 @@ class ConfigTest extends \PHPUnit\Framework\TestCase
                 true,
                 true,
                 [
-                    'session.cache_limiter' => 'files',
+                    'session.cache_limiter' => 'private_no_expire',
                     'session.cookie_lifetime' => 7200,
                     'session.cookie_path' => '/',
                     'session.cookie_domain' => 'init.host',
                     'session.cookie_httponly' => false,
                     'session.cookie_secure' => false,
+                    'session.save_handler' => 'files'
                 ],
             ],
             'all invalid' => [
                 true,
                 false,
                 [
-                    'session.cache_limiter' => 'files',
+                    'session.cache_limiter' => 'private_no_expire',
                     'session.cookie_httponly' => false,
                     'session.cookie_secure' => false,
+                    'session.save_handler' => 'files'
                 ],
             ],
             'invalid_valid' => [
                 false,
                 true,
                 [
-                    'session.cache_limiter' => 'files',
+                    'session.cache_limiter' => 'private_no_expire',
                     'session.cookie_lifetime' => 3600,
                     'session.cookie_path' => '/',
                     'session.cookie_domain' => 'init.host',
                     'session.cookie_httponly' => false,
                     'session.cookie_secure' => false,
+                    'session.save_handler' => 'files'
                 ],
             ],
         ];
@@ -429,14 +432,18 @@ class ConfigTest extends \PHPUnit\Framework\TestCase
             ->will($this->returnValue($dirMock));
 
         $deploymentConfigMock = $this->createMock(\Magento\Framework\App\DeploymentConfig::class);
-        $deploymentConfigMock->expects($this->at(0))
+        $deploymentConfigMock
             ->method('get')
-            ->with(Config::PARAM_SESSION_SAVE_PATH)
-            ->will($this->returnValue(null));
-        $deploymentConfigMock->expects($this->at(1))
-            ->method('get')
-            ->with(Config::PARAM_SESSION_CACHE_LIMITER)
-            ->will($this->returnValue('files'));
+            ->willReturnCallback(function ($configPath) {
+                switch ($configPath) {
+                    case Config::PARAM_SESSION_SAVE_METHOD:
+                        return 'files';
+                    case Config::PARAM_SESSION_CACHE_LIMITER:
+                        return 'private_no_expire';
+                    default:
+                        return null;
+                }
+            });
 
         $this->config = $this->helper->getObject(
             \Magento\Framework\Session\Config::class,
-- 
GitLab