HttpTest.php 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725
  1. <?php
  2. // Call Zend_Controller_Request_HttpTest::main() if this source file is executed directly.
  3. if (!defined("PHPUnit_MAIN_METHOD")) {
  4. define("PHPUnit_MAIN_METHOD", "Zend_Controller_Request_HttpTest::main");
  5. }
  6. require_once dirname(__FILE__) . '/../../../TestHelper.php';
  7. require_once 'Zend/Controller/Request/Http.php';
  8. class Zend_Controller_Request_HttpTest extends PHPUnit_Framework_TestCase
  9. {
  10. /**
  11. * @var Zend_Controller_Request_Http
  12. */
  13. protected $_request;
  14. /**
  15. * Original $_SERVER
  16. * @var array
  17. */
  18. protected $_origServer;
  19. /**
  20. * Runs the test methods of this class.
  21. *
  22. * @access public
  23. * @static
  24. */
  25. public static function main()
  26. {
  27. $suite = new PHPUnit_Framework_TestSuite("Zend_Controller_Request_HttpTest");
  28. $result = PHPUnit_TextUI_TestRunner::run($suite);
  29. }
  30. public function setUp()
  31. {
  32. $this->_origServer = $_SERVER;
  33. $_GET = array();
  34. $_POST = array();
  35. $this->_request = new Zend_Controller_Request_Http('http://framework.zend.com/news/3?var1=val1&var2=val2#anchor');
  36. }
  37. public function tearDown()
  38. {
  39. unset($this->_request);
  40. $_SERVER = $this->_origServer;
  41. }
  42. public function testSetGetControllerKey()
  43. {
  44. $this->_request->setControllerKey('controller');
  45. $this->assertEquals('controller', $this->_request->getControllerKey());
  46. $this->_request->setControllerKey('foo');
  47. $this->assertEquals('foo', $this->_request->getControllerKey());
  48. }
  49. public function testSetGetActionKey()
  50. {
  51. $this->_request->setActionKey('action');
  52. $this->assertEquals('action', $this->_request->getActionKey());
  53. $this->_request->setActionKey('foo');
  54. $this->assertEquals('foo', $this->_request->getActionKey());
  55. }
  56. public function testSetGetControllerName()
  57. {
  58. $this->_request->setControllerName('foo');
  59. $this->assertEquals('foo', $this->_request->getControllerName());
  60. $this->_request->setControllerName('bar');
  61. $this->assertEquals('bar', $this->_request->getControllerName());
  62. }
  63. public function testSetGetActionName()
  64. {
  65. $this->_request->setActionName('foo');
  66. $this->assertEquals('foo', $this->_request->getActionName());
  67. $this->_request->setActionName('bar');
  68. $this->assertEquals('bar', $this->_request->getActionName());
  69. }
  70. public function test__Get()
  71. {
  72. $_POST['baz'] = 'boo';
  73. $_COOKIE['bal'] = 'peen';
  74. $this->_request->setParam('foo', 'bar');
  75. foreach ($_ENV as $envKey => $expected) {
  76. if (isset($_ENV[$envKey]) && !empty($_ENV[$envKey])) {
  77. $expEnvKey = $envKey;
  78. break;
  79. }
  80. }
  81. $this->assertEquals('bar', $this->_request->foo);
  82. $this->assertEquals('val1', $this->_request->var1);
  83. $this->assertEquals('boo', $this->_request->baz);
  84. $this->assertEquals('peen', $this->_request->bal);
  85. $this->assertEquals($_SERVER['REQUEST_TIME'], $this->_request->REQUEST_TIME);
  86. $this->assertEquals($this->_request->getPathInfo(), $this->_request->PATH_INFO, $this->_request->PATH_INFO);
  87. $this->assertEquals($this->_request->getRequestUri(), $this->_request->REQUEST_URI, $this->_request->REQUEST_URI);
  88. if (isset($expEnvKey)) {
  89. $this->assertEquals($expected, $this->_request->$expEnvKey);
  90. }
  91. }
  92. public function testGetIsAlias()
  93. {
  94. $this->assertEquals('val1', $this->_request->get('var1'));
  95. }
  96. public function testSetIsAlias()
  97. {
  98. try {
  99. $this->_request->set('foo', 'bar');
  100. $this->fail('set() should alias to __set(), and throw an exception');
  101. } catch (Exception $e) {
  102. // success
  103. }
  104. }
  105. public function test__Isset()
  106. {
  107. $_POST['baz'] = 'boo';
  108. $_COOKIE['bal'] = 'peen';
  109. $this->_request->setParam('foo', 'bar');
  110. foreach ($_ENV as $envKey => $expected) {
  111. if (isset($_ENV[$envKey]) && !empty($_ENV[$envKey])) {
  112. $expEnvKey = $envKey;
  113. break;
  114. }
  115. }
  116. $this->assertTrue(isset($this->_request->foo));
  117. $this->assertTrue(isset($this->_request->var1));
  118. $this->assertTrue(isset($this->_request->baz));
  119. $this->assertTrue(isset($this->_request->bal));
  120. $this->assertTrue(isset($this->_request->REQUEST_TIME));
  121. $this->assertFalse(isset($this->_request->bogosity));
  122. if (isset($expEnvKey)) {
  123. $this->assertTrue(isset($this->_request->$expEnvKey));
  124. }
  125. }
  126. public function testHasIsAlias()
  127. {
  128. $this->assertTrue($this->_request->has('var1'));
  129. }
  130. public function test__SetThrowsException()
  131. {
  132. try {
  133. $this->_request->foo = 'bar';
  134. $this->fail('__set() should throw an exception');
  135. } catch (Exception $e) {
  136. // success
  137. }
  138. }
  139. public function testSetGetParam()
  140. {
  141. $this->_request->setParam('foo', 'bar');
  142. $this->assertEquals('bar', $this->_request->getParam('foo'));
  143. }
  144. public function testSetGetParams()
  145. {
  146. $params = array(
  147. 'foo' => 'bar',
  148. 'boo' => 'bah',
  149. 'fee' => 'fi'
  150. );
  151. $this->_request->setParams($params);
  152. $received = $this->_request->getParams();
  153. $this->assertSame($params, array_intersect_assoc($params, $received));
  154. }
  155. public function testGetParamsWithNoGetOrPost()
  156. {
  157. unset($_GET, $_POST);
  158. $params = array(
  159. 'foo' => 'bar',
  160. 'boo' => 'bah',
  161. 'fee' => 'fi'
  162. );
  163. $this->_request->setParams($params);
  164. $received = $this->_request->getParams();
  165. $this->assertSame($params, array_intersect_assoc($params, $received));
  166. }
  167. public function testGetParamsWithGetAndPost()
  168. {
  169. $_GET = array(
  170. 'get' => true
  171. );
  172. $_POST = array(
  173. 'post' => true
  174. );
  175. $params = array(
  176. 'foo' => 'bar',
  177. 'boo' => 'bah',
  178. 'fee' => 'fi'
  179. );
  180. $this->_request->setParams($params);
  181. $expected = $params + $_GET + $_POST;
  182. $received = $this->_request->getParams();
  183. $this->assertSame($params, array_intersect_assoc($params, $received));
  184. }
  185. public function testConstructSetsRequestUri()
  186. {
  187. $_SERVER['REQUEST_URI'] = '/mycontroller/myaction?foo=bar';
  188. $request = new Zend_Controller_Request_Http();
  189. $this->assertEquals('/mycontroller/myaction?foo=bar', $request->getRequestUri());
  190. }
  191. public function testSetRequestUriDoesNotPassUriThroughUrldecode()
  192. {
  193. $request = new Zend_Controller_Request_Http();
  194. $request->setRequestUri('/foo/bar?foo=bar%20baz');
  195. $requestUri = $request->getRequestUri();
  196. $this->assertNotEquals('/foo/bar?foo=bar baz', $requestUri);
  197. $this->assertEquals('/foo/bar?foo=bar%20baz', $requestUri);
  198. }
  199. public function testGetMethod()
  200. {
  201. $_SERVER['REQUEST_METHOD'] = 'POST';
  202. $this->assertEquals('POST', $this->_request->getMethod());
  203. $_SERVER['REQUEST_METHOD'] = 'GET';
  204. $this->assertEquals('GET', $this->_request->getMethod());
  205. }
  206. public function testIsPost()
  207. {
  208. $_SERVER['REQUEST_METHOD'] = 'POST';
  209. $this->assertTrue($this->_request->isPost());
  210. $_SERVER['REQUEST_METHOD'] = 'GET';
  211. $this->assertFalse($this->_request->isPost());
  212. }
  213. public function testIsGet()
  214. {
  215. $_SERVER['REQUEST_METHOD'] = 'GET';
  216. $this->assertTrue($this->_request->isGet());
  217. $this->assertFalse($this->_request->isPost());
  218. }
  219. public function testIsPut()
  220. {
  221. $_SERVER['REQUEST_METHOD'] = 'PUT';
  222. $this->assertTrue($this->_request->isPut());
  223. $this->assertFalse($this->_request->isGet());
  224. }
  225. public function testIsDelete()
  226. {
  227. $_SERVER['REQUEST_METHOD'] = 'DELETE';
  228. $this->assertTrue($this->_request->isDelete());
  229. $this->assertFalse($this->_request->isGet());
  230. }
  231. public function testIsHead()
  232. {
  233. $_SERVER['REQUEST_METHOD'] = 'HEAD';
  234. $this->assertTrue($this->_request->isHead());
  235. $this->assertFalse($this->_request->isGet());
  236. }
  237. public function testIsOptions()
  238. {
  239. $_SERVER['REQUEST_METHOD'] = 'OPTIONS';
  240. $this->assertTrue($this->_request->isOptions());
  241. $this->assertFalse($this->_request->isGet());
  242. }
  243. public function testGetRawBodyReturnsFalseWithNoPost()
  244. {
  245. $this->assertFalse($this->_request->getRawBody());
  246. }
  247. public function testGetQuery()
  248. {
  249. $this->assertEquals('val1', $this->_request->getQuery('var1'));
  250. $this->assertEquals('foo', $this->_request->getQuery('BAR', 'foo'));
  251. $expected = array('var1' => 'val1', 'var2' => 'val2');
  252. $this->assertEquals( $expected, $this->_request->getQuery());
  253. }
  254. public function testGetPost()
  255. {
  256. $_POST['post1'] = 'val1';
  257. $this->assertEquals('val1', $this->_request->getPost('post1'));
  258. $this->assertEquals('foo', $this->_request->getPost('BAR', 'foo'));
  259. $_POST['post2'] = 'val2';
  260. $expected = array('post1' => 'val1', 'post2' => 'val2');
  261. $this->assertEquals($expected, $this->_request->getPost());
  262. }
  263. public function testGetPathInfo()
  264. {
  265. $this->assertEquals('/news/3', $this->_request->getPathInfo(), 'Base URL: ' . var_export($this->_request->getBaseUrl(), 1));
  266. }
  267. public function testSetPathInfo()
  268. {
  269. $this->_request->setPathInfo('/archives/past/4');
  270. $this->assertEquals('/archives/past/4', $this->_request->getPathInfo());
  271. }
  272. public function testPathInfoNeedingBaseUrl()
  273. {
  274. $request = new Zend_Controller_Request_Http('http://localhost/test/index.php/ctrl-name/act-name');
  275. $this->assertEquals('/test/index.php/ctrl-name/act-name', $request->getRequestUri());
  276. $request->setBaseUrl('/test/index.php');
  277. $this->assertEquals('/test/index.php', $request->getBaseUrl());
  278. $requestUri = $request->getRequestUri();
  279. $baseUrl = $request->getBaseUrl();
  280. $pathInfo = substr($requestUri, strlen($baseUrl));
  281. $this->assertTrue($pathInfo ? true : false);
  282. $this->assertEquals('/ctrl-name/act-name', $request->getPathInfo(), "Expected $pathInfo;");
  283. }
  284. public function testGetSetAlias()
  285. {
  286. $this->_request->setAlias('controller', 'var1');
  287. $this->assertEquals('var1', $this->_request->getAlias('controller'));
  288. }
  289. public function testGetAliases()
  290. {
  291. $this->_request->setAlias('controller', 'var1');
  292. $this->_request->setAlias('action', 'var2');
  293. $this->assertSame(array('controller' => 'var1', 'action' => 'var2'), $this->_request->getAliases());
  294. }
  295. public function testGetRequestUri()
  296. {
  297. $this->assertEquals('/news/3?var1=val1&var2=val2', $this->_request->getRequestUri());
  298. }
  299. public function testSetRequestUri()
  300. {
  301. $this->_request->setRequestUri('/archives/past/4?set=this&unset=that');
  302. $this->assertEquals('/archives/past/4?set=this&unset=that', $this->_request->getRequestUri());
  303. $this->assertEquals('this', $this->_request->getQuery('set'));
  304. $this->assertEquals('that', $this->_request->getQuery('unset'));
  305. }
  306. public function testGetBaseUrl()
  307. {
  308. $this->assertSame('', $this->_request->getBaseUrl());
  309. }
  310. /*
  311. * Tests if an empty string gets returned when no basepath is set on the request.
  312. * This is important on windows, where before this fix '\' was returned instead of an empty string.
  313. * @group ZF-4810
  314. */
  315. public function testGetBasePathIsEmptyStringIfNoneSet()
  316. {
  317. $request = new Zend_Controller_Request_Http();
  318. $this->assertEquals('', $request->getBasePath());
  319. }
  320. public function testSetBaseUrl()
  321. {
  322. $this->_request->setBaseUrl('/news');
  323. $this->assertEquals('/news', $this->_request->getBaseUrl());
  324. }
  325. public function testSetBaseUrlUsingPhpSelf()
  326. {
  327. $_SERVER['REQUEST_URI'] = '/index.php/news/3?var1=val1&var2=val2';
  328. $_SERVER['SCRIPT_NAME'] = '/home.php';
  329. $_SERVER['PHP_SELF'] = '/index.php/news/3';
  330. $_SERVER['SCRIPT_FILENAME'] = '/var/web/html/index.php';
  331. $_GET = array(
  332. 'var1' => 'val1',
  333. 'var2' => 'val2'
  334. );
  335. $request = new Zend_Controller_Request_Http();
  336. $this->assertEquals('/index.php', $request->getBaseUrl());
  337. }
  338. public function testSetBaseUrlUsingOrigScriptName()
  339. {
  340. $_SERVER['REQUEST_URI'] = '/index.php/news/3?var1=val1&var2=val2';
  341. $_SERVER['SCRIPT_NAME'] = '/home.php';
  342. $_SERVER['PHP_SELF'] = '/home.php';
  343. $_SERVER['ORIG_SCRIPT_NAME']= '/index.php';
  344. $_SERVER['SCRIPT_FILENAME'] = '/var/web/html/index.php';
  345. $_GET = array(
  346. 'var1' => 'val1',
  347. 'var2' => 'val2'
  348. );
  349. $request = new Zend_Controller_Request_Http();
  350. $this->assertEquals('/index.php', $request->getBaseUrl());
  351. }
  352. public function testSetBaseUrlAutoDiscoveryUsingRequestUri()
  353. {
  354. $_SERVER['REQUEST_URI'] = '/index.php/news/3?var1=val1&var2=val2';
  355. $_SERVER['PHP_SELF'] = '/index.php/news/3';
  356. $_SERVER['SCRIPT_FILENAME'] = '/var/web/html/index.php';
  357. $_GET = array(
  358. 'var1' => 'val1',
  359. 'var2' => 'val2'
  360. );
  361. $request = new Zend_Controller_Request_Http();
  362. $this->assertEquals('/index.php', $request->getBaseUrl());
  363. }
  364. public function testSetBaseUrlAutoDiscoveryUsingXRewriteUrl()
  365. {
  366. unset($_SERVER['REQUEST_URI']);
  367. $_SERVER['HTTP_X_REWRITE_URL'] = '/index.php/news/3?var1=val1&var2=val2';
  368. $_SERVER['PHP_SELF'] = '/index.php/news/3';
  369. $_SERVER['SCRIPT_FILENAME'] = '/var/web/html/index.php';
  370. $_GET = array(
  371. 'var1' => 'val1',
  372. 'var2' => 'val2'
  373. );
  374. $request = new Zend_Controller_Request_Http();
  375. $this->assertEquals('/index.php', $request->getBaseUrl());
  376. }
  377. public function testSetBaseUrlAutoDiscoveryUsingOrigPathInfo()
  378. {
  379. unset($_SERVER['REQUEST_URI']);
  380. $_SERVER['ORIG_PATH_INFO'] = '/index.php/news/3';
  381. $_SERVER['QUERY_STRING'] = 'var1=val1&var2=val2';
  382. $_SERVER['PHP_SELF'] = '/index.php/news/3';
  383. $_SERVER['SCRIPT_FILENAME'] = '/var/web/html/index.php';
  384. $_GET = array(
  385. 'var1' => 'val1',
  386. 'var2' => 'val2'
  387. );
  388. $request = new Zend_Controller_Request_Http();
  389. $this->assertEquals('/index.php', $request->getBaseUrl());
  390. }
  391. public function testGetSetBasePath()
  392. {
  393. $this->_request->setBasePath('/news');
  394. $this->assertEquals('/news', $this->_request->getBasePath());
  395. }
  396. public function testBasePathAutoDiscovery()
  397. {
  398. $_SERVER['REQUEST_URI'] = '/html/index.php/news/3?var1=val1&var2=val2';
  399. $_SERVER['PHP_SELF'] = '/html/index.php/news/3';
  400. $_SERVER['SCRIPT_FILENAME'] = '/var/web/html/index.php';
  401. $_GET = array(
  402. 'var1' => 'val1',
  403. 'var2' => 'val2'
  404. );
  405. $request = new Zend_Controller_Request_Http();
  406. $this->assertEquals('/html', $request->getBasePath(), $request->getBaseUrl());
  407. }
  408. public function testBasePathAutoDiscoveryWithPhpFile()
  409. {
  410. $_SERVER['REQUEST_URI'] = '/dir/action';
  411. $_SERVER['PHP_SELF'] = '/dir/index.php';
  412. $_SERVER['SCRIPT_FILENAME'] = '/var/web/dir/index.php';
  413. $request = new Zend_Controller_Request_Http();
  414. $this->assertEquals('/dir', $request->getBasePath(), $request->getBaseUrl());
  415. }
  416. public function testGetCookie()
  417. {
  418. $_COOKIE['foo'] = 'bar';
  419. $this->assertSame('bar', $this->_request->getCookie('foo'));
  420. $this->assertEquals('foo', $this->_request->getCookie('BAR', 'foo'));
  421. $this->assertEquals($_COOKIE, $this->_request->getCookie());
  422. }
  423. public function testGetServer()
  424. {
  425. if (isset($_SERVER['REQUEST_METHOD'])) {
  426. $this->assertEquals($_SERVER['REQUEST_METHOD'], $this->_request->getServer('REQUEST_METHOD'));
  427. }
  428. $this->assertEquals('foo', $this->_request->getServer('BAR', 'foo'));
  429. $this->assertEquals($_SERVER, $this->_request->getServer());
  430. }
  431. public function testGetEnv()
  432. {
  433. if (isset($_ENV['PATH'])) {
  434. $this->assertEquals($_ENV['PATH'], $this->_request->getEnv('PATH'));
  435. }
  436. $this->assertEquals('foo', $this->_request->getEnv('BAR', 'foo'));
  437. $this->assertEquals($_ENV, $this->_request->getEnv());
  438. }
  439. public function testGetHeader()
  440. {
  441. $_SERVER['HTTP_ACCEPT_ENCODING'] = 'UTF-8';
  442. $_SERVER['HTTP_CONTENT_TYPE'] = 'text/json';
  443. $this->assertEquals('UTF-8', $this->_request->getHeader('Accept-Encoding'));
  444. $this->assertEquals('text/json', $this->_request->getHeader('Content-Type'));
  445. $this->assertFalse($this->_request->getHeader('X-No-Such-Thing'));
  446. }
  447. public function testGetHeaderThrowsExceptionWithNoInput()
  448. {
  449. try {
  450. // Suppressing warning
  451. $header = @$this->_request->getHeader();
  452. $this->fail('getHeader() should fail with no arguments)');
  453. } catch (Exception $e) {
  454. // success
  455. }
  456. }
  457. public function testIsXmlHttpRequest()
  458. {
  459. $this->assertFalse($this->_request->isXmlHttpRequest());
  460. $_SERVER['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest';
  461. $this->assertTrue($this->_request->isXmlHttpRequest());
  462. }
  463. public function testSetNullParamUnsetsKey()
  464. {
  465. $this->_request->setParam('foo', 'bar');
  466. $this->assertEquals('bar', $this->_request->getParam('foo'));
  467. $this->_request->setParam('foo', null);
  468. $params = $this->_request->getParams();
  469. $this->assertFalse(isset($params['foo']));
  470. }
  471. public function testSetNullParamsUnsetsKeys()
  472. {
  473. $this->_request->setParams(array('foo' => 'bar', 'bar' => 'baz'));
  474. $this->assertEquals('bar', $this->_request->getParam('foo'));
  475. $this->assertEquals('baz', $this->_request->getParam('bar'));
  476. $this->_request->setParams(array('foo' => null));
  477. $params = $this->_request->getParams();
  478. $this->assertFalse(isset($params['foo']));
  479. $this->assertTrue(isset($params['bar']));
  480. }
  481. public function testGetAliasedParamZF2455()
  482. {
  483. $this->_request->setParam('controller', 'value');
  484. $this->_request->setAlias('var1', 'controller');
  485. $this->assertEquals('value', $this->_request->getParam('controller'));
  486. $this->assertEquals('value', $this->_request->getParam('var1'));
  487. }
  488. public function testCanDetectFlashRequests()
  489. {
  490. $this->assertFalse($this->_request->isFlashRequest());
  491. $_SERVER['HTTP_USER_AGENT'] = 'Shockwave Flash';
  492. $this->assertTrue($this->_request->isFlashRequest());
  493. $_SERVER['HTTP_USER_AGENT'] = 'Adobe Flash Player 10';
  494. $this->assertTrue($this->_request->isFlashRequest());
  495. }
  496. /**
  497. * @group ZF-1798
  498. */
  499. public function testGetAndPostBothInDefaultParamSources()
  500. {
  501. $this->assertEquals(array('_GET', '_POST'), $this->_request->getParamSources());
  502. }
  503. /**
  504. * @group ZF-1798
  505. */
  506. public function testCanSetParamSources()
  507. {
  508. $this->testGetAndPostBothInDefaultParamSources();
  509. $this->_request->setParamSources(array());
  510. $this->assertSame(array(), $this->_request->getParamSources());
  511. $this->_request->setParamSources(array('_GET'));
  512. $this->assertSame(array('_GET'), $this->_request->getParamSources());
  513. }
  514. /**
  515. * @group ZF-1798
  516. */
  517. public function testParamSourcesHonoredByGetParam()
  518. {
  519. $_GET = array('foo' => 'bar');
  520. $_POST = array('foo' => 'baz');
  521. $this->_request->setParamSources(array('_POST'));
  522. $this->assertEquals('baz', $this->_request->getParam('foo'));
  523. }
  524. /**
  525. * @group ZF-3161
  526. * @group ZFI-233
  527. * @group ZF-5818
  528. */
  529. public function testStrippingHttpProtocolAndHostFromRequestUriOnlyWhenPresentAtBeginningOfUri()
  530. {
  531. $_SERVER['REQUEST_URI'] = 'http://foo.example.com/foo/bar?r=http://foo.example.com/bar/baz';
  532. $_SERVER['HTTP_HOST'] = 'foo.example.com';
  533. $request = new Zend_Controller_Request_Http();
  534. $test = $request->getRequestUri();
  535. $this->assertEquals('/foo/bar?r=http://foo.example.com/bar/baz', $test);
  536. $_SERVER['REQUEST_URI'] = '/foo/bar?r=http://foo.example.com/bar/baz';
  537. $_SERVER['HTTP_HOST'] = 'foo.example.com';
  538. $request = new Zend_Controller_Request_Http();
  539. $test = $request->getRequestUri();
  540. $this->assertEquals('/foo/bar?r=http://foo.example.com/bar/baz', $test);
  541. }
  542. /**
  543. * @group ZF-3161
  544. * @group ZFI-233
  545. * @group ZF-5818
  546. */
  547. public function testStrippingHttpsProtocolAndHostFromRequestUriOnlyWhenPresentAtBeginningOfUri()
  548. {
  549. $_SERVER['REQUEST_URI'] = 'https://foo.example.com/foo/bar?r=https://foo.example.com/bar/baz';
  550. $_SERVER['HTTP_HOST'] = 'foo.example.com';
  551. $_SERVER['HTTPS'] = 'on';
  552. $request = new Zend_Controller_Request_Http();
  553. $test = $request->getRequestUri();
  554. $this->assertEquals('/foo/bar?r=https://foo.example.com/bar/baz', $test);
  555. $_SERVER['REQUEST_URI'] = '/foo/bar?r=https://foo.example.com/bar/baz';
  556. $_SERVER['HTTP_HOST'] = 'foo.example.com';
  557. $_SERVER['HTTPS'] = 'on';
  558. $request = new Zend_Controller_Request_Http();
  559. $test = $request->getRequestUri();
  560. $this->assertEquals('/foo/bar?r=https://foo.example.com/bar/baz', $test);
  561. }
  562. /**
  563. * @group ZF-3161
  564. * @group ZFI-233
  565. * @group ZF-5818
  566. */
  567. public function testStrippingHttpProtocolHostAndNonStandardPortFromRequestUriOnlyWhenPresentAtBeginningOfUri()
  568. {
  569. $_SERVER['REQUEST_URI'] = 'http://foo.example.com:8888/foo/bar?r=http://foo.example.com:8888/bar/baz';
  570. $_SERVER['HTTP_HOST'] = '';
  571. $_SERVER['SERVER_NAME'] = 'foo.example.com';
  572. $_SERVER['SERVER_PORT'] = '8888';
  573. $request = new Zend_Controller_Request_Http();
  574. $test = $request->getRequestUri();
  575. $this->assertEquals('/foo/bar?r=http://foo.example.com:8888/bar/baz', $test);
  576. $_SERVER['REQUEST_URI'] = '/foo/bar?r=https://foo.example.com:8888/bar/baz';
  577. $_SERVER['HTTP_HOST'] = '';
  578. $_SERVER['SERVER_NAME'] = 'foo.example.com';
  579. $_SERVER['SERVER_PORT'] = '8888';
  580. $request = new Zend_Controller_Request_Http();
  581. $test = $request->getRequestUri();
  582. $this->assertEquals('/foo/bar?r=https://foo.example.com:8888/bar/baz', $test);
  583. }
  584. /**
  585. * @group ZF-7092
  586. */
  587. public function testGetClientIp()
  588. {
  589. $request = new Zend_Controller_Request_Http();
  590. $_SERVER['HTTP_CLIENT_IP'] = '192.168.1.10';
  591. $_SERVER['HTTP_X_FORWARDED_FOR'] = '192.168.1.11';
  592. $_SERVER['REMOTE_ADDR'] = '192.168.1.12';
  593. $this->assertEquals('192.168.1.10', $request->getClientIp());
  594. $_SERVER['HTTP_CLIENT_IP'] = '';
  595. $_SERVER['HTTP_X_FORWARDED_FOR'] = '192.168.1.11';
  596. $_SERVER['REMOTE_ADDR'] = '192.168.1.12';
  597. $this->assertEquals('192.168.1.11', $request->getClientIp());
  598. $_SERVER['HTTP_CLIENT_IP'] = '';
  599. $_SERVER['HTTP_X_FORWARDED_FOR'] = '';
  600. $_SERVER['REMOTE_ADDR'] = '192.168.1.12';
  601. $this->assertEquals('192.168.1.12', $request->getClientIp());
  602. // public function getClientIp()
  603. //{
  604. // if (!empty($this->getServer('HTTP_CLIENT_IP'))) {
  605. // $ip = $this->getServer('HTTP_CLIENT_IP');
  606. // } else if (!empty($this->getServer('HTTP_X_FORWARDED_FOR'))) {
  607. // $ip = $this->getServer('HTTP_X_FORWARDED_FOR');
  608. // } else {
  609. // $ip = $this->getServer('REMOTE_ADDR');
  610. // }
  611. // return $ip;
  612. //}
  613. }
  614. }
  615. // Call Zend_Controller_Request_HttpTest::main() if this source file is executed directly.
  616. if (PHPUnit_MAIN_METHOD == "Zend_Controller_Request_HttpTest::main") {
  617. Zend_Controller_Request_HttpTest::main();
  618. }