RemoteAddressTest.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\HTTP\Test\Unit\PhpEnvironment;
  7. use Magento\Framework\HTTP\PhpEnvironment\RemoteAddress;
  8. use Magento\Framework\App\Request\Http as HttpRequest;
  9. use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
  10. class RemoteAddressTest extends \PHPUnit\Framework\TestCase
  11. {
  12. /**
  13. * @var \PHPUnit_Framework_MockObject_MockObject|\HttpRequest
  14. */
  15. protected $_request;
  16. /**
  17. * @var ObjectManager
  18. */
  19. protected $_objectManager;
  20. /**
  21. * @inheritdoc
  22. */
  23. protected function setUp()
  24. {
  25. $this->_request = $this->getMockBuilder(HttpRequest::class)
  26. ->disableOriginalConstructor()
  27. ->setMethods(['getServer'])
  28. ->getMock();
  29. $this->_objectManager = new ObjectManager($this);
  30. }
  31. /**
  32. * @param string[] $alternativeHeaders
  33. * @param array $serverValueMap
  34. * @param string|bool $expected
  35. * @param bool $ipToLong
  36. * @param string[]|null $trustedProxies
  37. * @return void
  38. * @dataProvider getRemoteAddressProvider
  39. */
  40. public function testGetRemoteAddress(
  41. array $alternativeHeaders,
  42. array $serverValueMap,
  43. $expected,
  44. bool $ipToLong,
  45. array $trustedProxies = null
  46. ): void {
  47. $remoteAddress = $this->_objectManager->getObject(
  48. RemoteAddress::class,
  49. [
  50. 'httpRequest' => $this->_request,
  51. 'alternativeHeaders' => $alternativeHeaders,
  52. 'trustedProxies' => $trustedProxies,
  53. ]
  54. );
  55. $this->_request->expects($this->any())
  56. ->method('getServer')
  57. ->will($this->returnValueMap($serverValueMap));
  58. $this->assertEquals($expected, $remoteAddress->getRemoteAddress($ipToLong));
  59. }
  60. /**
  61. * @return array
  62. *
  63. * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  64. */
  65. public function getRemoteAddressProvider()
  66. {
  67. return [
  68. [
  69. 'alternativeHeaders' => [],
  70. 'serverValueMap' => [['REMOTE_ADDR', null, null]],
  71. 'expected' => false,
  72. 'ipToLong' => false,
  73. 'trustedProxies' => null,
  74. ],
  75. [
  76. 'alternativeHeaders' => [],
  77. 'serverValueMap' => [['REMOTE_ADDR', null, '192.168.0.1']],
  78. 'expected' => '192.168.0.1',
  79. 'ipToLong' => false,
  80. 'trustedProxies' => null,
  81. ],
  82. [
  83. 'alternativeHeaders' => [],
  84. 'serverValueMap' => [['REMOTE_ADDR', null, '192.168.1.1']],
  85. 'expected' => ip2long('192.168.1.1'),
  86. 'ipToLong' => true,
  87. 'trustedProxies' => null,
  88. ],
  89. [
  90. 'alternativeHeaders' => ['TEST_HEADER'],
  91. 'serverValueMap' => [
  92. ['REMOTE_ADDR', null, '192.168.1.1'],
  93. ['TEST_HEADER', null, '192.168.0.1'],
  94. ['TEST_HEADER', false, '192.168.0.1'],
  95. ],
  96. 'expected' => '192.168.0.1',
  97. 'ipToLong' => false,
  98. 'trustedProxies' => null,
  99. ],
  100. [
  101. 'alternativeHeaders' => ['TEST_HEADER'],
  102. 'serverValueMap' => [
  103. ['REMOTE_ADDR', null, '192.168.1.1'],
  104. ['TEST_HEADER', null, '192.168.0.1'],
  105. ['TEST_HEADER', false, '192.168.0.1'],
  106. ],
  107. 'expected' => ip2long('192.168.0.1'),
  108. 'ipToLong' => true,
  109. 'trustedProxies' => null,
  110. ],
  111. [
  112. 'alternativeHeaders' => [],
  113. 'serverValueMap' => [
  114. ['REMOTE_ADDR', null, 'NotValidIp'],
  115. ],
  116. 'expected' => false,
  117. 'ipToLong' => false,
  118. 'trustedProxies' => ['127.0.0.1'],
  119. ],
  120. [
  121. 'alternativeHeaders' => ['TEST_HEADER'],
  122. 'serverValueMap' => [
  123. ['TEST_HEADER', null, 'NotValid, 192.168.0.1'],
  124. ['TEST_HEADER', false, 'NotValid, 192.168.0.1'],
  125. ],
  126. 'expected' => '192.168.0.1',
  127. 'ipToLong' => false,
  128. 'trustedProxies' => ['127.0.0.1'],
  129. ],
  130. [
  131. 'alternativeHeaders' => ['TEST_HEADER'],
  132. 'serverValueMap' => [
  133. ['TEST_HEADER', null, '192.168.0.2, 192.168.0.1'],
  134. ['TEST_HEADER', false, '192.168.0.2, 192.168.0.1'],
  135. ],
  136. 'expected' => '192.168.0.2',
  137. 'ipToLong' => false,
  138. 'trustedProxies' => null,
  139. ],
  140. [
  141. 'alternativeHeaders' => [],
  142. 'serverValueMap' => [
  143. [
  144. 'REMOTE_ADDR',
  145. null,
  146. '192.168.0.2, 192.168.0.1, 192.168.0.3',
  147. ],
  148. [
  149. 'REMOTE_ADDR',
  150. false,
  151. '192.168.0.2, 192.168.0.1, 192.168.0.3',
  152. ],
  153. ],
  154. 'expected' => '192.168.0.1',
  155. 'ipToLong' => false,
  156. 'trustedProxies' => ['192.168.0.3'],
  157. ],
  158. [
  159. 'alternativeHeaders' => [],
  160. 'serverValueMap' => [
  161. [
  162. 'REMOTE_ADDR',
  163. null,
  164. '192.168.0.2, 192.168.0.1, 192.168.0.3',
  165. ],
  166. [
  167. 'REMOTE_ADDR',
  168. false,
  169. '192.168.0.2, 192.168.0.1, 192.168.0.3',
  170. ],
  171. ],
  172. 'expected' => '192.168.0.3',
  173. 'ipToLong' => false,
  174. 'trustedProxies' => [],
  175. ],
  176. ];
  177. }
  178. }