Open Journal Systems  3.3.0
symfony/http-foundation/Tests/RequestTest.php
1 <?php
2 
3 /*
4  * This file is part of the Symfony package.
5  *
6  * (c) Fabien Potencier <fabien@symfony.com>
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11 
13 
14 use PHPUnit\Framework\TestCase;
19 
20 class RequestTest extends TestCase
21 {
22  protected function tearDown()
23  {
24  // reset
25  Request::setTrustedProxies(array(), -1);
26  }
27 
28  public function testInitialize()
29  {
30  $request = new Request();
31 
32  $request->initialize(array('foo' => 'bar'));
33  $this->assertEquals('bar', $request->query->get('foo'), '->initialize() takes an array of query parameters as its first argument');
34 
35  $request->initialize(array(), array('foo' => 'bar'));
36  $this->assertEquals('bar', $request->request->get('foo'), '->initialize() takes an array of request parameters as its second argument');
37 
38  $request->initialize(array(), array(), array('foo' => 'bar'));
39  $this->assertEquals('bar', $request->attributes->get('foo'), '->initialize() takes an array of attributes as its third argument');
40 
41  $request->initialize(array(), array(), array(), array(), array(), array('HTTP_FOO' => 'bar'));
42  $this->assertEquals('bar', $request->headers->get('FOO'), '->initialize() takes an array of HTTP headers as its sixth argument');
43  }
44 
45  public function testGetLocale()
46  {
47  $request = new Request();
48  $request->setLocale('pl');
49  $locale = $request->getLocale();
50  $this->assertEquals('pl', $locale);
51  }
52 
53  public function testGetUser()
54  {
55  $request = Request::create('http://user_test:password_test@test.com/');
56  $user = $request->getUser();
57 
58  $this->assertEquals('user_test', $user);
59  }
60 
61  public function testGetPassword()
62  {
63  $request = Request::create('http://user_test:password_test@test.com/');
64  $password = $request->getPassword();
65 
66  $this->assertEquals('password_test', $password);
67  }
68 
69  public function testIsNoCache()
70  {
71  $request = new Request();
72  $isNoCache = $request->isNoCache();
73 
74  $this->assertFalse($isNoCache);
75  }
76 
77  public function testGetContentType()
78  {
79  $request = new Request();
80  $contentType = $request->getContentType();
81 
82  $this->assertNull($contentType);
83  }
84 
85  public function testSetDefaultLocale()
86  {
87  $request = new Request();
88  $request->setDefaultLocale('pl');
89  $locale = $request->getLocale();
90 
91  $this->assertEquals('pl', $locale);
92  }
93 
94  public function testCreate()
95  {
96  $request = Request::create('http://test.com/foo?bar=baz');
97  $this->assertEquals('http://test.com/foo?bar=baz', $request->getUri());
98  $this->assertEquals('/foo', $request->getPathInfo());
99  $this->assertEquals('bar=baz', $request->getQueryString());
100  $this->assertEquals(80, $request->getPort());
101  $this->assertEquals('test.com', $request->getHttpHost());
102  $this->assertFalse($request->isSecure());
103 
104  $request = Request::create('http://test.com/foo', 'GET', array('bar' => 'baz'));
105  $this->assertEquals('http://test.com/foo?bar=baz', $request->getUri());
106  $this->assertEquals('/foo', $request->getPathInfo());
107  $this->assertEquals('bar=baz', $request->getQueryString());
108  $this->assertEquals(80, $request->getPort());
109  $this->assertEquals('test.com', $request->getHttpHost());
110  $this->assertFalse($request->isSecure());
111 
112  $request = Request::create('http://test.com/foo?bar=foo', 'GET', array('bar' => 'baz'));
113  $this->assertEquals('http://test.com/foo?bar=baz', $request->getUri());
114  $this->assertEquals('/foo', $request->getPathInfo());
115  $this->assertEquals('bar=baz', $request->getQueryString());
116  $this->assertEquals(80, $request->getPort());
117  $this->assertEquals('test.com', $request->getHttpHost());
118  $this->assertFalse($request->isSecure());
119 
120  $request = Request::create('https://test.com/foo?bar=baz');
121  $this->assertEquals('https://test.com/foo?bar=baz', $request->getUri());
122  $this->assertEquals('/foo', $request->getPathInfo());
123  $this->assertEquals('bar=baz', $request->getQueryString());
124  $this->assertEquals(443, $request->getPort());
125  $this->assertEquals('test.com', $request->getHttpHost());
126  $this->assertTrue($request->isSecure());
127 
128  $request = Request::create('test.com:90/foo');
129  $this->assertEquals('http://test.com:90/foo', $request->getUri());
130  $this->assertEquals('/foo', $request->getPathInfo());
131  $this->assertEquals('test.com', $request->getHost());
132  $this->assertEquals('test.com:90', $request->getHttpHost());
133  $this->assertEquals(90, $request->getPort());
134  $this->assertFalse($request->isSecure());
135 
136  $request = Request::create('https://test.com:90/foo');
137  $this->assertEquals('https://test.com:90/foo', $request->getUri());
138  $this->assertEquals('/foo', $request->getPathInfo());
139  $this->assertEquals('test.com', $request->getHost());
140  $this->assertEquals('test.com:90', $request->getHttpHost());
141  $this->assertEquals(90, $request->getPort());
142  $this->assertTrue($request->isSecure());
143 
144  $request = Request::create('https://127.0.0.1:90/foo');
145  $this->assertEquals('https://127.0.0.1:90/foo', $request->getUri());
146  $this->assertEquals('/foo', $request->getPathInfo());
147  $this->assertEquals('127.0.0.1', $request->getHost());
148  $this->assertEquals('127.0.0.1:90', $request->getHttpHost());
149  $this->assertEquals(90, $request->getPort());
150  $this->assertTrue($request->isSecure());
151 
152  $request = Request::create('https://[::1]:90/foo');
153  $this->assertEquals('https://[::1]:90/foo', $request->getUri());
154  $this->assertEquals('/foo', $request->getPathInfo());
155  $this->assertEquals('[::1]', $request->getHost());
156  $this->assertEquals('[::1]:90', $request->getHttpHost());
157  $this->assertEquals(90, $request->getPort());
158  $this->assertTrue($request->isSecure());
159 
160  $request = Request::create('https://[::1]/foo');
161  $this->assertEquals('https://[::1]/foo', $request->getUri());
162  $this->assertEquals('/foo', $request->getPathInfo());
163  $this->assertEquals('[::1]', $request->getHost());
164  $this->assertEquals('[::1]', $request->getHttpHost());
165  $this->assertEquals(443, $request->getPort());
166  $this->assertTrue($request->isSecure());
167 
168  $json = '{"jsonrpc":"2.0","method":"echo","id":7,"params":["Hello World"]}';
169  $request = Request::create('http://example.com/jsonrpc', 'POST', array(), array(), array(), array(), $json);
170  $this->assertEquals($json, $request->getContent());
171  $this->assertFalse($request->isSecure());
172 
173  $request = Request::create('http://test.com');
174  $this->assertEquals('http://test.com/', $request->getUri());
175  $this->assertEquals('/', $request->getPathInfo());
176  $this->assertEquals('', $request->getQueryString());
177  $this->assertEquals(80, $request->getPort());
178  $this->assertEquals('test.com', $request->getHttpHost());
179  $this->assertFalse($request->isSecure());
180 
181  $request = Request::create('http://test.com?test=1');
182  $this->assertEquals('http://test.com/?test=1', $request->getUri());
183  $this->assertEquals('/', $request->getPathInfo());
184  $this->assertEquals('test=1', $request->getQueryString());
185  $this->assertEquals(80, $request->getPort());
186  $this->assertEquals('test.com', $request->getHttpHost());
187  $this->assertFalse($request->isSecure());
188 
189  $request = Request::create('http://test.com:90/?test=1');
190  $this->assertEquals('http://test.com:90/?test=1', $request->getUri());
191  $this->assertEquals('/', $request->getPathInfo());
192  $this->assertEquals('test=1', $request->getQueryString());
193  $this->assertEquals(90, $request->getPort());
194  $this->assertEquals('test.com:90', $request->getHttpHost());
195  $this->assertFalse($request->isSecure());
196 
197  $request = Request::create('http://username:password@test.com');
198  $this->assertEquals('http://test.com/', $request->getUri());
199  $this->assertEquals('/', $request->getPathInfo());
200  $this->assertEquals('', $request->getQueryString());
201  $this->assertEquals(80, $request->getPort());
202  $this->assertEquals('test.com', $request->getHttpHost());
203  $this->assertEquals('username', $request->getUser());
204  $this->assertEquals('password', $request->getPassword());
205  $this->assertFalse($request->isSecure());
206 
207  $request = Request::create('http://username@test.com');
208  $this->assertEquals('http://test.com/', $request->getUri());
209  $this->assertEquals('/', $request->getPathInfo());
210  $this->assertEquals('', $request->getQueryString());
211  $this->assertEquals(80, $request->getPort());
212  $this->assertEquals('test.com', $request->getHttpHost());
213  $this->assertEquals('username', $request->getUser());
214  $this->assertSame('', $request->getPassword());
215  $this->assertFalse($request->isSecure());
216 
217  $request = Request::create('http://test.com/?foo');
218  $this->assertEquals('/?foo', $request->getRequestUri());
219  $this->assertEquals(array('foo' => ''), $request->query->all());
220 
221  // assume rewrite rule: (.*) --> app/app.php; app/ is a symlink to a symfony web/ directory
222  $request = Request::create('http://test.com/apparthotel-1234', 'GET', array(), array(), array(),
223  array(
224  'DOCUMENT_ROOT' => '/var/www/www.test.com',
225  'SCRIPT_FILENAME' => '/var/www/www.test.com/app/app.php',
226  'SCRIPT_NAME' => '/app/app.php',
227  'PHP_SELF' => '/app/app.php/apparthotel-1234',
228  ));
229  $this->assertEquals('http://test.com/apparthotel-1234', $request->getUri());
230  $this->assertEquals('/apparthotel-1234', $request->getPathInfo());
231  $this->assertEquals('', $request->getQueryString());
232  $this->assertEquals(80, $request->getPort());
233  $this->assertEquals('test.com', $request->getHttpHost());
234  $this->assertFalse($request->isSecure());
235  }
236 
237  public function testCreateCheckPrecedence()
238  {
239  // server is used by default
240  $request = Request::create('/', 'DELETE', array(), array(), array(), array(
241  'HTTP_HOST' => 'example.com',
242  'HTTPS' => 'on',
243  'SERVER_PORT' => 443,
244  'PHP_AUTH_USER' => 'fabien',
245  'PHP_AUTH_PW' => 'pa$$',
246  'QUERY_STRING' => 'foo=bar',
247  'CONTENT_TYPE' => 'application/json',
248  ));
249  $this->assertEquals('example.com', $request->getHost());
250  $this->assertEquals(443, $request->getPort());
251  $this->assertTrue($request->isSecure());
252  $this->assertEquals('fabien', $request->getUser());
253  $this->assertEquals('pa$$', $request->getPassword());
254  $this->assertEquals('', $request->getQueryString());
255  $this->assertEquals('application/json', $request->headers->get('CONTENT_TYPE'));
256 
257  // URI has precedence over server
258  $request = Request::create('http://thomas:pokemon@example.net:8080/?foo=bar', 'GET', array(), array(), array(), array(
259  'HTTP_HOST' => 'example.com',
260  'HTTPS' => 'on',
261  'SERVER_PORT' => 443,
262  ));
263  $this->assertEquals('example.net', $request->getHost());
264  $this->assertEquals(8080, $request->getPort());
265  $this->assertFalse($request->isSecure());
266  $this->assertEquals('thomas', $request->getUser());
267  $this->assertEquals('pokemon', $request->getPassword());
268  $this->assertEquals('foo=bar', $request->getQueryString());
269  }
270 
271  public function testDuplicate()
272  {
273  $request = new Request(array('foo' => 'bar'), array('foo' => 'bar'), array('foo' => 'bar'), array(), array(), array('HTTP_FOO' => 'bar'));
274  $dup = $request->duplicate();
275 
276  $this->assertEquals($request->query->all(), $dup->query->all(), '->duplicate() duplicates a request an copy the current query parameters');
277  $this->assertEquals($request->request->all(), $dup->request->all(), '->duplicate() duplicates a request an copy the current request parameters');
278  $this->assertEquals($request->attributes->all(), $dup->attributes->all(), '->duplicate() duplicates a request an copy the current attributes');
279  $this->assertEquals($request->headers->all(), $dup->headers->all(), '->duplicate() duplicates a request an copy the current HTTP headers');
280 
281  $dup = $request->duplicate(array('foo' => 'foobar'), array('foo' => 'foobar'), array('foo' => 'foobar'), array(), array(), array('HTTP_FOO' => 'foobar'));
282 
283  $this->assertEquals(array('foo' => 'foobar'), $dup->query->all(), '->duplicate() overrides the query parameters if provided');
284  $this->assertEquals(array('foo' => 'foobar'), $dup->request->all(), '->duplicate() overrides the request parameters if provided');
285  $this->assertEquals(array('foo' => 'foobar'), $dup->attributes->all(), '->duplicate() overrides the attributes if provided');
286  $this->assertEquals(array('foo' => array('foobar')), $dup->headers->all(), '->duplicate() overrides the HTTP header if provided');
287  }
288 
289  public function testDuplicateWithFormat()
290  {
291  $request = new Request(array(), array(), array('_format' => 'json'));
292  $dup = $request->duplicate();
293 
294  $this->assertEquals('json', $dup->getRequestFormat());
295  $this->assertEquals('json', $dup->attributes->get('_format'));
296 
297  $request = new Request();
298  $request->setRequestFormat('xml');
299  $dup = $request->duplicate();
300 
301  $this->assertEquals('xml', $dup->getRequestFormat());
302  }
303 
307  public function testGetFormatFromMimeType($format, $mimeTypes)
308  {
309  $request = new Request();
310  foreach ($mimeTypes as $mime) {
311  $this->assertEquals($format, $request->getFormat($mime));
312  }
313  $request->setFormat($format, $mimeTypes);
314  foreach ($mimeTypes as $mime) {
315  $this->assertEquals($format, $request->getFormat($mime));
316 
317  if (null !== $format) {
318  $this->assertEquals($mimeTypes[0], $request->getMimeType($format));
319  }
320  }
321  }
322 
324  {
325  return array_merge(
326  array(array(null, array(null, 'unexistent-mime-type'))),
328  );
329  }
330 
332  {
333  $request = new Request();
334  $this->assertEquals('json', $request->getFormat('application/json; charset=utf-8'));
335  }
336 
340  public function testGetMimeTypeFromFormat($format, $mimeTypes)
341  {
342  $request = new Request();
343  $this->assertEquals($mimeTypes[0], $request->getMimeType($format));
344  }
345 
349  public function testGetMimeTypesFromFormat($format, $mimeTypes)
350  {
351  $this->assertEquals($mimeTypes, Request::getMimeTypes($format));
352  }
353 
355  {
356  $request = new Request();
357  $this->assertNull($request->getMimeType('foo'));
358  $this->assertEquals(array(), Request::getMimeTypes('foo'));
359  }
360 
362  {
363  $request = new Request();
364  $request->setFormat('custom', 'application/vnd.foo.api;myversion=2.3');
365  $this->assertEquals('custom', $request->getFormat('application/vnd.foo.api;myversion=2.3'));
366  }
367 
369  {
370  return array(
371  array('txt', array('text/plain')),
372  array('js', array('application/javascript', 'application/x-javascript', 'text/javascript')),
373  array('css', array('text/css')),
374  array('json', array('application/json', 'application/x-json')),
375  array('xml', array('text/xml', 'application/xml', 'application/x-xml')),
376  array('rdf', array('application/rdf+xml')),
377  array('atom', array('application/atom+xml')),
378  );
379  }
380 
381  public function testGetUri()
382  {
383  $server = array();
384 
385  // Standard Request on non default PORT
386  // http://host:8080/index.php/path/info?query=string
387 
388  $server['HTTP_HOST'] = 'host:8080';
389  $server['SERVER_NAME'] = 'servername';
390  $server['SERVER_PORT'] = '8080';
391 
392  $server['QUERY_STRING'] = 'query=string';
393  $server['REQUEST_URI'] = '/index.php/path/info?query=string';
394  $server['SCRIPT_NAME'] = '/index.php';
395  $server['PATH_INFO'] = '/path/info';
396  $server['PATH_TRANSLATED'] = 'redirect:/index.php/path/info';
397  $server['PHP_SELF'] = '/index_dev.php/path/info';
398  $server['SCRIPT_FILENAME'] = '/some/where/index.php';
399 
400  $request = new Request();
401 
402  $request->initialize(array(), array(), array(), array(), array(), $server);
403 
404  $this->assertEquals('http://host:8080/index.php/path/info?query=string', $request->getUri(), '->getUri() with non default port');
405 
406  // Use std port number
407  $server['HTTP_HOST'] = 'host';
408  $server['SERVER_NAME'] = 'servername';
409  $server['SERVER_PORT'] = '80';
410 
411  $request->initialize(array(), array(), array(), array(), array(), $server);
412 
413  $this->assertEquals('http://host/index.php/path/info?query=string', $request->getUri(), '->getUri() with default port');
414 
415  // Without HOST HEADER
416  unset($server['HTTP_HOST']);
417  $server['SERVER_NAME'] = 'servername';
418  $server['SERVER_PORT'] = '80';
419 
420  $request->initialize(array(), array(), array(), array(), array(), $server);
421 
422  $this->assertEquals('http://servername/index.php/path/info?query=string', $request->getUri(), '->getUri() with default port without HOST_HEADER');
423 
424  // Request with URL REWRITING (hide index.php)
425  // RewriteCond %{REQUEST_FILENAME} !-f
426  // RewriteRule ^(.*)$ index.php [QSA,L]
427  // http://host:8080/path/info?query=string
428  $server = array();
429  $server['HTTP_HOST'] = 'host:8080';
430  $server['SERVER_NAME'] = 'servername';
431  $server['SERVER_PORT'] = '8080';
432 
433  $server['REDIRECT_QUERY_STRING'] = 'query=string';
434  $server['REDIRECT_URL'] = '/path/info';
435  $server['SCRIPT_NAME'] = '/index.php';
436  $server['QUERY_STRING'] = 'query=string';
437  $server['REQUEST_URI'] = '/path/info?toto=test&1=1';
438  $server['SCRIPT_NAME'] = '/index.php';
439  $server['PHP_SELF'] = '/index.php';
440  $server['SCRIPT_FILENAME'] = '/some/where/index.php';
441 
442  $request->initialize(array(), array(), array(), array(), array(), $server);
443  $this->assertEquals('http://host:8080/path/info?query=string', $request->getUri(), '->getUri() with rewrite');
444 
445  // Use std port number
446  // http://host/path/info?query=string
447  $server['HTTP_HOST'] = 'host';
448  $server['SERVER_NAME'] = 'servername';
449  $server['SERVER_PORT'] = '80';
450 
451  $request->initialize(array(), array(), array(), array(), array(), $server);
452 
453  $this->assertEquals('http://host/path/info?query=string', $request->getUri(), '->getUri() with rewrite and default port');
454 
455  // Without HOST HEADER
456  unset($server['HTTP_HOST']);
457  $server['SERVER_NAME'] = 'servername';
458  $server['SERVER_PORT'] = '80';
459 
460  $request->initialize(array(), array(), array(), array(), array(), $server);
461 
462  $this->assertEquals('http://servername/path/info?query=string', $request->getUri(), '->getUri() with rewrite, default port without HOST_HEADER');
463 
464  // With encoded characters
465 
466  $server = array(
467  'HTTP_HOST' => 'host:8080',
468  'SERVER_NAME' => 'servername',
469  'SERVER_PORT' => '8080',
470  'QUERY_STRING' => 'query=string',
471  'REQUEST_URI' => '/ba%20se/index_dev.php/foo%20bar/in+fo?query=string',
472  'SCRIPT_NAME' => '/ba se/index_dev.php',
473  'PATH_TRANSLATED' => 'redirect:/index.php/foo bar/in+fo',
474  'PHP_SELF' => '/ba se/index_dev.php/path/info',
475  'SCRIPT_FILENAME' => '/some/where/ba se/index_dev.php',
476  );
477 
478  $request->initialize(array(), array(), array(), array(), array(), $server);
479 
480  $this->assertEquals(
481  'http://host:8080/ba%20se/index_dev.php/foo%20bar/in+fo?query=string',
482  $request->getUri()
483  );
484 
485  // with user info
486 
487  $server['PHP_AUTH_USER'] = 'fabien';
488  $request->initialize(array(), array(), array(), array(), array(), $server);
489  $this->assertEquals('http://host:8080/ba%20se/index_dev.php/foo%20bar/in+fo?query=string', $request->getUri());
490 
491  $server['PHP_AUTH_PW'] = 'symfony';
492  $request->initialize(array(), array(), array(), array(), array(), $server);
493  $this->assertEquals('http://host:8080/ba%20se/index_dev.php/foo%20bar/in+fo?query=string', $request->getUri());
494  }
495 
496  public function testGetUriForPath()
497  {
498  $request = Request::create('http://test.com/foo?bar=baz');
499  $this->assertEquals('http://test.com/some/path', $request->getUriForPath('/some/path'));
500 
501  $request = Request::create('http://test.com:90/foo?bar=baz');
502  $this->assertEquals('http://test.com:90/some/path', $request->getUriForPath('/some/path'));
503 
504  $request = Request::create('https://test.com/foo?bar=baz');
505  $this->assertEquals('https://test.com/some/path', $request->getUriForPath('/some/path'));
506 
507  $request = Request::create('https://test.com:90/foo?bar=baz');
508  $this->assertEquals('https://test.com:90/some/path', $request->getUriForPath('/some/path'));
509 
510  $server = array();
511 
512  // Standard Request on non default PORT
513  // http://host:8080/index.php/path/info?query=string
514 
515  $server['HTTP_HOST'] = 'host:8080';
516  $server['SERVER_NAME'] = 'servername';
517  $server['SERVER_PORT'] = '8080';
518 
519  $server['QUERY_STRING'] = 'query=string';
520  $server['REQUEST_URI'] = '/index.php/path/info?query=string';
521  $server['SCRIPT_NAME'] = '/index.php';
522  $server['PATH_INFO'] = '/path/info';
523  $server['PATH_TRANSLATED'] = 'redirect:/index.php/path/info';
524  $server['PHP_SELF'] = '/index_dev.php/path/info';
525  $server['SCRIPT_FILENAME'] = '/some/where/index.php';
526 
527  $request = new Request();
528 
529  $request->initialize(array(), array(), array(), array(), array(), $server);
530 
531  $this->assertEquals('http://host:8080/index.php/some/path', $request->getUriForPath('/some/path'), '->getUriForPath() with non default port');
532 
533  // Use std port number
534  $server['HTTP_HOST'] = 'host';
535  $server['SERVER_NAME'] = 'servername';
536  $server['SERVER_PORT'] = '80';
537 
538  $request->initialize(array(), array(), array(), array(), array(), $server);
539 
540  $this->assertEquals('http://host/index.php/some/path', $request->getUriForPath('/some/path'), '->getUriForPath() with default port');
541 
542  // Without HOST HEADER
543  unset($server['HTTP_HOST']);
544  $server['SERVER_NAME'] = 'servername';
545  $server['SERVER_PORT'] = '80';
546 
547  $request->initialize(array(), array(), array(), array(), array(), $server);
548 
549  $this->assertEquals('http://servername/index.php/some/path', $request->getUriForPath('/some/path'), '->getUriForPath() with default port without HOST_HEADER');
550 
551  // Request with URL REWRITING (hide index.php)
552  // RewriteCond %{REQUEST_FILENAME} !-f
553  // RewriteRule ^(.*)$ index.php [QSA,L]
554  // http://host:8080/path/info?query=string
555  $server = array();
556  $server['HTTP_HOST'] = 'host:8080';
557  $server['SERVER_NAME'] = 'servername';
558  $server['SERVER_PORT'] = '8080';
559 
560  $server['REDIRECT_QUERY_STRING'] = 'query=string';
561  $server['REDIRECT_URL'] = '/path/info';
562  $server['SCRIPT_NAME'] = '/index.php';
563  $server['QUERY_STRING'] = 'query=string';
564  $server['REQUEST_URI'] = '/path/info?toto=test&1=1';
565  $server['SCRIPT_NAME'] = '/index.php';
566  $server['PHP_SELF'] = '/index.php';
567  $server['SCRIPT_FILENAME'] = '/some/where/index.php';
568 
569  $request->initialize(array(), array(), array(), array(), array(), $server);
570  $this->assertEquals('http://host:8080/some/path', $request->getUriForPath('/some/path'), '->getUri() with rewrite');
571 
572  // Use std port number
573  // http://host/path/info?query=string
574  $server['HTTP_HOST'] = 'host';
575  $server['SERVER_NAME'] = 'servername';
576  $server['SERVER_PORT'] = '80';
577 
578  $request->initialize(array(), array(), array(), array(), array(), $server);
579 
580  $this->assertEquals('http://host/some/path', $request->getUriForPath('/some/path'), '->getUriForPath() with rewrite and default port');
581 
582  // Without HOST HEADER
583  unset($server['HTTP_HOST']);
584  $server['SERVER_NAME'] = 'servername';
585  $server['SERVER_PORT'] = '80';
586 
587  $request->initialize(array(), array(), array(), array(), array(), $server);
588 
589  $this->assertEquals('http://servername/some/path', $request->getUriForPath('/some/path'), '->getUriForPath() with rewrite, default port without HOST_HEADER');
590  $this->assertEquals('servername', $request->getHttpHost());
591 
592  // with user info
593 
594  $server['PHP_AUTH_USER'] = 'fabien';
595  $request->initialize(array(), array(), array(), array(), array(), $server);
596  $this->assertEquals('http://servername/some/path', $request->getUriForPath('/some/path'));
597 
598  $server['PHP_AUTH_PW'] = 'symfony';
599  $request->initialize(array(), array(), array(), array(), array(), $server);
600  $this->assertEquals('http://servername/some/path', $request->getUriForPath('/some/path'));
601  }
602 
606  public function testGetRelativeUriForPath($expected, $pathinfo, $path)
607  {
608  $this->assertEquals($expected, Request::create($pathinfo)->getRelativeUriForPath($path));
609  }
610 
611  public function getRelativeUriForPathData()
612  {
613  return array(
614  array('me.png', '/foo', '/me.png'),
615  array('../me.png', '/foo/bar', '/me.png'),
616  array('me.png', '/foo/bar', '/foo/me.png'),
617  array('../baz/me.png', '/foo/bar/b', '/foo/baz/me.png'),
618  array('../../fooz/baz/me.png', '/foo/bar/b', '/fooz/baz/me.png'),
619  array('baz/me.png', '/foo/bar/b', 'baz/me.png'),
620  );
621  }
622 
623  public function testGetUserInfo()
624  {
625  $request = new Request();
626 
627  $server = array('PHP_AUTH_USER' => 'fabien');
628  $request->initialize(array(), array(), array(), array(), array(), $server);
629  $this->assertEquals('fabien', $request->getUserInfo());
630 
631  $server['PHP_AUTH_USER'] = '0';
632  $request->initialize(array(), array(), array(), array(), array(), $server);
633  $this->assertEquals('0', $request->getUserInfo());
634 
635  $server['PHP_AUTH_PW'] = '0';
636  $request->initialize(array(), array(), array(), array(), array(), $server);
637  $this->assertEquals('0:0', $request->getUserInfo());
638  }
639 
640  public function testGetSchemeAndHttpHost()
641  {
642  $request = new Request();
643 
644  $server = array();
645  $server['SERVER_NAME'] = 'servername';
646  $server['SERVER_PORT'] = '90';
647  $request->initialize(array(), array(), array(), array(), array(), $server);
648  $this->assertEquals('http://servername:90', $request->getSchemeAndHttpHost());
649 
650  $server['PHP_AUTH_USER'] = 'fabien';
651  $request->initialize(array(), array(), array(), array(), array(), $server);
652  $this->assertEquals('http://servername:90', $request->getSchemeAndHttpHost());
653 
654  $server['PHP_AUTH_USER'] = '0';
655  $request->initialize(array(), array(), array(), array(), array(), $server);
656  $this->assertEquals('http://servername:90', $request->getSchemeAndHttpHost());
657 
658  $server['PHP_AUTH_PW'] = '0';
659  $request->initialize(array(), array(), array(), array(), array(), $server);
660  $this->assertEquals('http://servername:90', $request->getSchemeAndHttpHost());
661  }
662 
666  public function testGetQueryString($query, $expectedQuery, $msg)
667  {
668  $request = new Request();
669 
670  $request->server->set('QUERY_STRING', $query);
671  $this->assertSame($expectedQuery, $request->getQueryString(), $msg);
672  }
673 
675  {
676  return array(
677  array('foo', 'foo', 'works with valueless parameters'),
678  array('foo=', 'foo=', 'includes a dangling equal sign'),
679  array('bar=&foo=bar', 'bar=&foo=bar', '->works with empty parameters'),
680  array('foo=bar&bar=', 'bar=&foo=bar', 'sorts keys alphabetically'),
681 
682  // GET parameters, that are submitted from a HTML form, encode spaces as "+" by default (as defined in enctype application/x-www-form-urlencoded).
683  // PHP also converts "+" to spaces when filling the global _GET or when using the function parse_str.
684  array('him=John%20Doe&her=Jane+Doe', 'her=Jane%20Doe&him=John%20Doe', 'normalizes spaces in both encodings "%20" and "+"'),
685 
686  array('foo[]=1&foo[]=2', 'foo%5B%5D=1&foo%5B%5D=2', 'allows array notation'),
687  array('foo=1&foo=2', 'foo=1&foo=2', 'allows repeated parameters'),
688  array('pa%3Dram=foo%26bar%3Dbaz&test=test', 'pa%3Dram=foo%26bar%3Dbaz&test=test', 'works with encoded delimiters'),
689  array('0', '0', 'allows "0"'),
690  array('Jane Doe&John%20Doe', 'Jane%20Doe&John%20Doe', 'normalizes encoding in keys'),
691  array('her=Jane Doe&him=John%20Doe', 'her=Jane%20Doe&him=John%20Doe', 'normalizes encoding in values'),
692  array('foo=bar&&&test&&', 'foo=bar&test', 'removes unneeded delimiters'),
693  array('formula=e=m*c^2', 'formula=e%3Dm%2Ac%5E2', 'correctly treats only the first "=" as delimiter and the next as value'),
694 
695  // Ignore pairs with empty key, even if there was a value, e.g. "=value", as such nameless values cannot be retrieved anyway.
696  // PHP also does not include them when building _GET.
697  array('foo=bar&=a=b&=x=y', 'foo=bar', 'removes params with empty key'),
698  );
699  }
700 
702  {
703  $request = new Request();
704 
705  $this->assertNull($request->getQueryString(), '->getQueryString() returns null for non-existent query string');
706 
707  $request->server->set('QUERY_STRING', '');
708  $this->assertNull($request->getQueryString(), '->getQueryString() returns null for empty query string');
709  }
710 
711  public function testGetHost()
712  {
713  $request = new Request();
714 
715  $request->initialize(array('foo' => 'bar'));
716  $this->assertEquals('', $request->getHost(), '->getHost() return empty string if not initialized');
717 
718  $request->initialize(array(), array(), array(), array(), array(), array('HTTP_HOST' => 'www.example.com'));
719  $this->assertEquals('www.example.com', $request->getHost(), '->getHost() from Host Header');
720 
721  // Host header with port number
722  $request->initialize(array(), array(), array(), array(), array(), array('HTTP_HOST' => 'www.example.com:8080'));
723  $this->assertEquals('www.example.com', $request->getHost(), '->getHost() from Host Header with port number');
724 
725  // Server values
726  $request->initialize(array(), array(), array(), array(), array(), array('SERVER_NAME' => 'www.example.com'));
727  $this->assertEquals('www.example.com', $request->getHost(), '->getHost() from server name');
728 
729  $request->initialize(array(), array(), array(), array(), array(), array('SERVER_NAME' => 'www.example.com', 'HTTP_HOST' => 'www.host.com'));
730  $this->assertEquals('www.host.com', $request->getHost(), '->getHost() value from Host header has priority over SERVER_NAME ');
731  }
732 
733  public function testGetPort()
734  {
735  $request = Request::create('http://example.com', 'GET', array(), array(), array(), array(
736  'HTTP_X_FORWARDED_PROTO' => 'https',
737  'HTTP_X_FORWARDED_PORT' => '443',
738  ));
739  $port = $request->getPort();
740 
741  $this->assertEquals(80, $port, 'Without trusted proxies FORWARDED_PROTO and FORWARDED_PORT are ignored.');
742 
744  $request = Request::create('http://example.com', 'GET', array(), array(), array(), array(
745  'HTTP_X_FORWARDED_PROTO' => 'https',
746  'HTTP_X_FORWARDED_PORT' => '8443',
747  ));
748  $this->assertEquals(80, $request->getPort(), 'With PROTO and PORT on untrusted connection server value takes precedence.');
749  $request->server->set('REMOTE_ADDR', '1.1.1.1');
750  $this->assertEquals(8443, $request->getPort(), 'With PROTO and PORT set PORT takes precedence.');
751 
752  $request = Request::create('http://example.com', 'GET', array(), array(), array(), array(
753  'HTTP_X_FORWARDED_PROTO' => 'https',
754  ));
755  $this->assertEquals(80, $request->getPort(), 'With only PROTO set getPort() ignores trusted headers on untrusted connection.');
756  $request->server->set('REMOTE_ADDR', '1.1.1.1');
757  $this->assertEquals(443, $request->getPort(), 'With only PROTO set getPort() defaults to 443.');
758 
759  $request = Request::create('http://example.com', 'GET', array(), array(), array(), array(
760  'HTTP_X_FORWARDED_PROTO' => 'http',
761  ));
762  $this->assertEquals(80, $request->getPort(), 'If X_FORWARDED_PROTO is set to HTTP getPort() ignores trusted headers on untrusted connection.');
763  $request->server->set('REMOTE_ADDR', '1.1.1.1');
764  $this->assertEquals(80, $request->getPort(), 'If X_FORWARDED_PROTO is set to HTTP getPort() returns port of the original request.');
765 
766  $request = Request::create('http://example.com', 'GET', array(), array(), array(), array(
767  'HTTP_X_FORWARDED_PROTO' => 'On',
768  ));
769  $this->assertEquals(80, $request->getPort(), 'With only PROTO set and value is On, getPort() ignores trusted headers on untrusted connection.');
770  $request->server->set('REMOTE_ADDR', '1.1.1.1');
771  $this->assertEquals(443, $request->getPort(), 'With only PROTO set and value is On, getPort() defaults to 443.');
772 
773  $request = Request::create('http://example.com', 'GET', array(), array(), array(), array(
774  'HTTP_X_FORWARDED_PROTO' => '1',
775  ));
776  $this->assertEquals(80, $request->getPort(), 'With only PROTO set and value is 1, getPort() ignores trusted headers on untrusted connection.');
777  $request->server->set('REMOTE_ADDR', '1.1.1.1');
778  $this->assertEquals(443, $request->getPort(), 'With only PROTO set and value is 1, getPort() defaults to 443.');
779 
780  $request = Request::create('http://example.com', 'GET', array(), array(), array(), array(
781  'HTTP_X_FORWARDED_PROTO' => 'something-else',
782  ));
783  $port = $request->getPort();
784  $this->assertEquals(80, $port, 'With only PROTO set and value is not recognized, getPort() defaults to 80.');
785  }
786 
791  {
792  $request = new Request();
793  $request->initialize(array(), array(), array(), array(), array(), array('HTTP_HOST' => 'www.host.com?query=string'));
794  $request->getHost();
795  }
796 
797  public function testGetSetMethod()
798  {
799  $request = new Request();
800 
801  $this->assertEquals('GET', $request->getMethod(), '->getMethod() returns GET if no method is defined');
802 
803  $request->setMethod('get');
804  $this->assertEquals('GET', $request->getMethod(), '->getMethod() returns an uppercased string');
805 
806  $request->setMethod('PURGE');
807  $this->assertEquals('PURGE', $request->getMethod(), '->getMethod() returns the method even if it is not a standard one');
808 
809  $request->setMethod('POST');
810  $this->assertEquals('POST', $request->getMethod(), '->getMethod() returns the method POST if no _method is defined');
811 
812  $request->setMethod('POST');
813  $request->request->set('_method', 'purge');
814  $this->assertEquals('POST', $request->getMethod(), '->getMethod() does not return the method from _method if defined and POST but support not enabled');
815 
816  $request = new Request();
817  $request->setMethod('POST');
818  $request->request->set('_method', 'purge');
819 
820  $this->assertFalse(Request::getHttpMethodParameterOverride(), 'httpMethodParameterOverride should be disabled by default');
821 
823 
824  $this->assertTrue(Request::getHttpMethodParameterOverride(), 'httpMethodParameterOverride should be enabled now but it is not');
825 
826  $this->assertEquals('PURGE', $request->getMethod(), '->getMethod() returns the method from _method if defined and POST');
827  $this->disableHttpMethodParameterOverride();
828 
829  $request = new Request();
830  $request->setMethod('POST');
831  $request->query->set('_method', 'purge');
832  $this->assertEquals('POST', $request->getMethod(), '->getMethod() does not return the method from _method if defined and POST but support not enabled');
833 
834  $request = new Request();
835  $request->setMethod('POST');
836  $request->query->set('_method', 'purge');
838  $this->assertEquals('PURGE', $request->getMethod(), '->getMethod() returns the method from _method if defined and POST');
839  $this->disableHttpMethodParameterOverride();
840 
841  $request = new Request();
842  $request->setMethod('POST');
843  $request->headers->set('X-HTTP-METHOD-OVERRIDE', 'delete');
844  $this->assertEquals('DELETE', $request->getMethod(), '->getMethod() returns the method from X-HTTP-Method-Override even though _method is set if defined and POST');
845 
846  $request = new Request();
847  $request->setMethod('POST');
848  $request->headers->set('X-HTTP-METHOD-OVERRIDE', 'delete');
849  $this->assertEquals('DELETE', $request->getMethod(), '->getMethod() returns the method from X-HTTP-Method-Override if defined and POST');
850  }
851 
855  public function testGetClientIp($expected, $remoteAddr, $httpForwardedFor, $trustedProxies)
856  {
857  $request = $this->getRequestInstanceForClientIpTests($remoteAddr, $httpForwardedFor, $trustedProxies);
858 
859  $this->assertEquals($expected[0], $request->getClientIp());
860  }
861 
865  public function testGetClientIps($expected, $remoteAddr, $httpForwardedFor, $trustedProxies)
866  {
867  $request = $this->getRequestInstanceForClientIpTests($remoteAddr, $httpForwardedFor, $trustedProxies);
868 
869  $this->assertEquals($expected, $request->getClientIps());
870  }
871 
875  public function testGetClientIpsForwarded($expected, $remoteAddr, $httpForwarded, $trustedProxies)
876  {
877  $request = $this->getRequestInstanceForClientIpsForwardedTests($remoteAddr, $httpForwarded, $trustedProxies);
878 
879  $this->assertEquals($expected, $request->getClientIps());
880  }
881 
883  {
884  // $expected $remoteAddr $httpForwarded $trustedProxies
885  return array(
886  array(array('127.0.0.1'), '127.0.0.1', 'for="_gazonk"', null),
887  array(array('127.0.0.1'), '127.0.0.1', 'for="_gazonk"', array('127.0.0.1')),
888  array(array('88.88.88.88'), '127.0.0.1', 'for="88.88.88.88:80"', array('127.0.0.1')),
889  array(array('192.0.2.60'), '::1', 'for=192.0.2.60;proto=http;by=203.0.113.43', array('::1')),
890  array(array('2620:0:1cfe:face:b00c::3', '192.0.2.43'), '::1', 'for=192.0.2.43, for=2620:0:1cfe:face:b00c::3', array('::1')),
891  array(array('2001:db8:cafe::17'), '::1', 'for="[2001:db8:cafe::17]:4711', array('::1')),
892  );
893  }
894 
895  public function getClientIpsProvider()
896  {
897  // $expected $remoteAddr $httpForwardedFor $trustedProxies
898  return array(
899  // simple IPv4
900  array(array('88.88.88.88'), '88.88.88.88', null, null),
901  // trust the IPv4 remote addr
902  array(array('88.88.88.88'), '88.88.88.88', null, array('88.88.88.88')),
903 
904  // simple IPv6
905  array(array('::1'), '::1', null, null),
906  // trust the IPv6 remote addr
907  array(array('::1'), '::1', null, array('::1')),
908 
909  // forwarded for with remote IPv4 addr not trusted
910  array(array('127.0.0.1'), '127.0.0.1', '88.88.88.88', null),
911  // forwarded for with remote IPv4 addr trusted
912  array(array('88.88.88.88'), '127.0.0.1', '88.88.88.88', array('127.0.0.1')),
913  // forwarded for with remote IPv4 and all FF addrs trusted
914  array(array('88.88.88.88'), '127.0.0.1', '88.88.88.88', array('127.0.0.1', '88.88.88.88')),
915  // forwarded for with remote IPv4 range trusted
916  array(array('88.88.88.88'), '123.45.67.89', '88.88.88.88', array('123.45.67.0/24')),
917 
918  // forwarded for with remote IPv6 addr not trusted
919  array(array('1620:0:1cfe:face:b00c::3'), '1620:0:1cfe:face:b00c::3', '2620:0:1cfe:face:b00c::3', null),
920  // forwarded for with remote IPv6 addr trusted
921  array(array('2620:0:1cfe:face:b00c::3'), '1620:0:1cfe:face:b00c::3', '2620:0:1cfe:face:b00c::3', array('1620:0:1cfe:face:b00c::3')),
922  // forwarded for with remote IPv6 range trusted
923  array(array('88.88.88.88'), '2a01:198:603:0:396e:4789:8e99:890f', '88.88.88.88', array('2a01:198:603:0::/65')),
924 
925  // multiple forwarded for with remote IPv4 addr trusted
926  array(array('88.88.88.88', '87.65.43.21', '127.0.0.1'), '123.45.67.89', '127.0.0.1, 87.65.43.21, 88.88.88.88', array('123.45.67.89')),
927  // multiple forwarded for with remote IPv4 addr and some reverse proxies trusted
928  array(array('87.65.43.21', '127.0.0.1'), '123.45.67.89', '127.0.0.1, 87.65.43.21, 88.88.88.88', array('123.45.67.89', '88.88.88.88')),
929  // multiple forwarded for with remote IPv4 addr and some reverse proxies trusted but in the middle
930  array(array('88.88.88.88', '127.0.0.1'), '123.45.67.89', '127.0.0.1, 87.65.43.21, 88.88.88.88', array('123.45.67.89', '87.65.43.21')),
931  // multiple forwarded for with remote IPv4 addr and all reverse proxies trusted
932  array(array('127.0.0.1'), '123.45.67.89', '127.0.0.1, 87.65.43.21, 88.88.88.88', array('123.45.67.89', '87.65.43.21', '88.88.88.88', '127.0.0.1')),
933 
934  // multiple forwarded for with remote IPv6 addr trusted
935  array(array('2620:0:1cfe:face:b00c::3', '3620:0:1cfe:face:b00c::3'), '1620:0:1cfe:face:b00c::3', '3620:0:1cfe:face:b00c::3,2620:0:1cfe:face:b00c::3', array('1620:0:1cfe:face:b00c::3')),
936  // multiple forwarded for with remote IPv6 addr and some reverse proxies trusted
937  array(array('3620:0:1cfe:face:b00c::3'), '1620:0:1cfe:face:b00c::3', '3620:0:1cfe:face:b00c::3,2620:0:1cfe:face:b00c::3', array('1620:0:1cfe:face:b00c::3', '2620:0:1cfe:face:b00c::3')),
938  // multiple forwarded for with remote IPv4 addr and some reverse proxies trusted but in the middle
939  array(array('2620:0:1cfe:face:b00c::3', '4620:0:1cfe:face:b00c::3'), '1620:0:1cfe:face:b00c::3', '4620:0:1cfe:face:b00c::3,3620:0:1cfe:face:b00c::3,2620:0:1cfe:face:b00c::3', array('1620:0:1cfe:face:b00c::3', '3620:0:1cfe:face:b00c::3')),
940 
941  // client IP with port
942  array(array('88.88.88.88'), '127.0.0.1', '88.88.88.88:12345, 127.0.0.1', array('127.0.0.1')),
943 
944  // invalid forwarded IP is ignored
945  array(array('88.88.88.88'), '127.0.0.1', 'unknown,88.88.88.88', array('127.0.0.1')),
946  array(array('88.88.88.88'), '127.0.0.1', '}__test|O:21:&quot;JDatabaseDriverMysqli&quot;:3:{s:2,88.88.88.88', array('127.0.0.1')),
947  );
948  }
949 
954  public function testGetClientIpsWithConflictingHeaders($httpForwarded, $httpXForwardedFor)
955  {
956  $request = new Request();
957 
958  $server = array(
959  'REMOTE_ADDR' => '88.88.88.88',
960  'HTTP_FORWARDED' => $httpForwarded,
961  'HTTP_X_FORWARDED_FOR' => $httpXForwardedFor,
962  );
963 
965 
966  $request->initialize(array(), array(), array(), array(), array(), $server);
967 
968  $request->getClientIps();
969  }
970 
972  {
973  // $httpForwarded $httpXForwardedFor
974  return array(
975  array('for=87.65.43.21', '192.0.2.60'),
976  array('for=87.65.43.21, for=192.0.2.60', '192.0.2.60'),
977  array('for=192.0.2.60', '192.0.2.60,87.65.43.21'),
978  array('for="::face", for=192.0.2.60', '192.0.2.60,192.0.2.43'),
979  array('for=87.65.43.21, for=192.0.2.60', '192.0.2.60,87.65.43.21'),
980  );
981  }
982 
986  public function testGetClientIpsWithAgreeingHeaders($httpForwarded, $httpXForwardedFor, $expectedIps)
987  {
988  $request = new Request();
989 
990  $server = array(
991  'REMOTE_ADDR' => '88.88.88.88',
992  'HTTP_FORWARDED' => $httpForwarded,
993  'HTTP_X_FORWARDED_FOR' => $httpXForwardedFor,
994  );
995 
997 
998  $request->initialize(array(), array(), array(), array(), array(), $server);
999 
1000  $clientIps = $request->getClientIps();
1001 
1002  $this->assertSame($expectedIps, $clientIps);
1003  }
1004 
1006  {
1007  // $httpForwarded $httpXForwardedFor
1008  return array(
1009  array('for="192.0.2.60"', '192.0.2.60', array('192.0.2.60')),
1010  array('for=192.0.2.60, for=87.65.43.21', '192.0.2.60,87.65.43.21', array('87.65.43.21', '192.0.2.60')),
1011  array('for="[::face]", for=192.0.2.60', '::face,192.0.2.60', array('192.0.2.60', '::face')),
1012  array('for="192.0.2.60:80"', '192.0.2.60', array('192.0.2.60')),
1013  array('for=192.0.2.60;proto=http;by=203.0.113.43', '192.0.2.60', array('192.0.2.60')),
1014  array('for="[2001:db8:cafe::17]:4711"', '2001:db8:cafe::17', array('2001:db8:cafe::17')),
1015  );
1016  }
1017 
1019  {
1020  $req = new Request();
1021  $this->assertEquals('', $req->getContent());
1022  $this->assertEquals('', $req->getContent());
1023  }
1024 
1026  {
1027  $req = new Request();
1028  $retval = $req->getContent(true);
1029  $this->assertInternalType('resource', $retval);
1030  $this->assertEquals('', fread($retval, 1));
1031  $this->assertTrue(feof($retval));
1032  }
1033 
1035  {
1036  $req = new Request(array(), array(), array(), array(), array(), array(), 'MyContent');
1037  $resource = $req->getContent(true);
1038 
1039  $this->assertInternalType('resource', $resource);
1040  $this->assertEquals('MyContent', stream_get_contents($resource));
1041  }
1042 
1043  public function testContentAsResource()
1044  {
1045  $resource = fopen('php://memory', 'r+');
1046  fwrite($resource, 'My other content');
1047  rewind($resource);
1048 
1049  $req = new Request(array(), array(), array(), array(), array(), array(), $resource);
1050  $this->assertEquals('My other content', stream_get_contents($req->getContent(true)));
1051  $this->assertEquals('My other content', $req->getContent());
1052  }
1053 
1058  public function testGetContentCantBeCalledTwiceWithResources($first, $second)
1059  {
1060  if (\PHP_VERSION_ID >= 50600) {
1061  $this->markTestSkipped('PHP >= 5.6 allows to open php://input several times.');
1062  }
1063 
1064  $req = new Request();
1065  $req->getContent($first);
1066  $req->getContent($second);
1067  }
1068 
1070  {
1071  return array(
1072  'Resource then fetch' => array(true, false),
1073  'Resource then resource' => array(true, true),
1074  );
1075  }
1076 
1081  public function testGetContentCanBeCalledTwiceWithResources($first, $second)
1082  {
1083  $req = new Request();
1084  $a = $req->getContent($first);
1085  $b = $req->getContent($second);
1086 
1087  if ($first) {
1088  $a = stream_get_contents($a);
1089  }
1090 
1091  if ($second) {
1092  $b = stream_get_contents($b);
1093  }
1094 
1095  $this->assertSame($a, $b);
1096  }
1097 
1099  {
1100  return array(
1101  'Fetch then fetch' => array(false, false),
1102  'Fetch then resource' => array(false, true),
1103  'Resource then fetch' => array(true, false),
1104  'Resource then resource' => array(true, true),
1105  );
1106  }
1107 
1108  public function provideOverloadedMethods()
1109  {
1110  return array(
1111  array('PUT'),
1112  array('DELETE'),
1113  array('PATCH'),
1114  array('put'),
1115  array('delete'),
1116  array('patch'),
1117  );
1118  }
1119 
1123  public function testCreateFromGlobals($method)
1124  {
1125  $normalizedMethod = strtoupper($method);
1126 
1127  $_GET['foo1'] = 'bar1';
1128  $_POST['foo2'] = 'bar2';
1129  $_COOKIE['foo3'] = 'bar3';
1130  $_FILES['foo4'] = array('bar4');
1131  $_SERVER['foo5'] = 'bar5';
1132 
1133  $request = Request::createFromGlobals();
1134  $this->assertEquals('bar1', $request->query->get('foo1'), '::fromGlobals() uses values from $_GET');
1135  $this->assertEquals('bar2', $request->request->get('foo2'), '::fromGlobals() uses values from $_POST');
1136  $this->assertEquals('bar3', $request->cookies->get('foo3'), '::fromGlobals() uses values from $_COOKIE');
1137  $this->assertEquals(array('bar4'), $request->files->get('foo4'), '::fromGlobals() uses values from $_FILES');
1138  $this->assertEquals('bar5', $request->server->get('foo5'), '::fromGlobals() uses values from $_SERVER');
1139 
1140  unset($_GET['foo1'], $_POST['foo2'], $_COOKIE['foo3'], $_FILES['foo4'], $_SERVER['foo5']);
1141 
1142  $_SERVER['REQUEST_METHOD'] = $method;
1143  $_SERVER['CONTENT_TYPE'] = 'application/x-www-form-urlencoded';
1145  $this->assertEquals($normalizedMethod, $request->getMethod());
1146  $this->assertEquals('mycontent', $request->request->get('content'));
1147 
1148  unset($_SERVER['REQUEST_METHOD'], $_SERVER['CONTENT_TYPE']);
1149 
1152  $_POST['_method'] = $method;
1153  $_POST['foo6'] = 'bar6';
1154  $_SERVER['REQUEST_METHOD'] = 'PoSt';
1155  $request = Request::createFromGlobals();
1156  $this->assertEquals($normalizedMethod, $request->getMethod());
1157  $this->assertEquals('POST', $request->getRealMethod());
1158  $this->assertEquals('bar6', $request->request->get('foo6'));
1159 
1160  unset($_POST['_method'], $_POST['foo6'], $_SERVER['REQUEST_METHOD']);
1161  $this->disableHttpMethodParameterOverride();
1162  }
1163 
1164  public function testOverrideGlobals()
1165  {
1166  $request = new Request();
1167  $request->initialize(array('foo' => 'bar'));
1168 
1169  // as the Request::overrideGlobals really work, it erase $_SERVER, so we must backup it
1170  $server = $_SERVER;
1171 
1172  $request->overrideGlobals();
1173 
1174  $this->assertEquals(array('foo' => 'bar'), $_GET);
1175 
1176  $request->initialize(array(), array('foo' => 'bar'));
1177  $request->overrideGlobals();
1178 
1179  $this->assertEquals(array('foo' => 'bar'), $_POST);
1180 
1181  $this->assertArrayNotHasKey('HTTP_X_FORWARDED_PROTO', $_SERVER);
1182 
1183  $request->headers->set('X_FORWARDED_PROTO', 'https');
1184 
1186  $this->assertFalse($request->isSecure());
1187  $request->server->set('REMOTE_ADDR', '1.1.1.1');
1188  $this->assertTrue($request->isSecure());
1189 
1190  $request->overrideGlobals();
1191 
1192  $this->assertArrayHasKey('HTTP_X_FORWARDED_PROTO', $_SERVER);
1193 
1194  $request->headers->set('CONTENT_TYPE', 'multipart/form-data');
1195  $request->headers->set('CONTENT_LENGTH', 12345);
1196 
1197  $request->overrideGlobals();
1198 
1199  $this->assertArrayHasKey('CONTENT_TYPE', $_SERVER);
1200  $this->assertArrayHasKey('CONTENT_LENGTH', $_SERVER);
1201 
1202  $request->initialize(array('foo' => 'bar', 'baz' => 'foo'));
1203  $request->query->remove('baz');
1204 
1205  $request->overrideGlobals();
1206 
1207  $this->assertEquals(array('foo' => 'bar'), $_GET);
1208  $this->assertEquals('foo=bar', $_SERVER['QUERY_STRING']);
1209  $this->assertEquals('foo=bar', $request->server->get('QUERY_STRING'));
1210 
1211  // restore initial $_SERVER array
1212  $_SERVER = $server;
1213  }
1214 
1215  public function testGetScriptName()
1216  {
1217  $request = new Request();
1218  $this->assertEquals('', $request->getScriptName());
1219 
1220  $server = array();
1221  $server['SCRIPT_NAME'] = '/index.php';
1222 
1223  $request->initialize(array(), array(), array(), array(), array(), $server);
1224 
1225  $this->assertEquals('/index.php', $request->getScriptName());
1226 
1227  $server = array();
1228  $server['ORIG_SCRIPT_NAME'] = '/frontend.php';
1229  $request->initialize(array(), array(), array(), array(), array(), $server);
1230 
1231  $this->assertEquals('/frontend.php', $request->getScriptName());
1232 
1233  $server = array();
1234  $server['SCRIPT_NAME'] = '/index.php';
1235  $server['ORIG_SCRIPT_NAME'] = '/frontend.php';
1236  $request->initialize(array(), array(), array(), array(), array(), $server);
1237 
1238  $this->assertEquals('/index.php', $request->getScriptName());
1239  }
1240 
1241  public function testGetBasePath()
1242  {
1243  $request = new Request();
1244  $this->assertEquals('', $request->getBasePath());
1245 
1246  $server = array();
1247  $server['SCRIPT_FILENAME'] = '/some/where/index.php';
1248  $request->initialize(array(), array(), array(), array(), array(), $server);
1249  $this->assertEquals('', $request->getBasePath());
1250 
1251  $server = array();
1252  $server['SCRIPT_FILENAME'] = '/some/where/index.php';
1253  $server['SCRIPT_NAME'] = '/index.php';
1254  $request->initialize(array(), array(), array(), array(), array(), $server);
1255 
1256  $this->assertEquals('', $request->getBasePath());
1257 
1258  $server = array();
1259  $server['SCRIPT_FILENAME'] = '/some/where/index.php';
1260  $server['PHP_SELF'] = '/index.php';
1261  $request->initialize(array(), array(), array(), array(), array(), $server);
1262 
1263  $this->assertEquals('', $request->getBasePath());
1264 
1265  $server = array();
1266  $server['SCRIPT_FILENAME'] = '/some/where/index.php';
1267  $server['ORIG_SCRIPT_NAME'] = '/index.php';
1268  $request->initialize(array(), array(), array(), array(), array(), $server);
1269 
1270  $this->assertEquals('', $request->getBasePath());
1271  }
1272 
1273  public function testGetPathInfo()
1274  {
1275  $request = new Request();
1276  $this->assertEquals('/', $request->getPathInfo());
1277 
1278  $server = array();
1279  $server['REQUEST_URI'] = '/path/info';
1280  $request->initialize(array(), array(), array(), array(), array(), $server);
1281 
1282  $this->assertEquals('/path/info', $request->getPathInfo());
1283 
1284  $server = array();
1285  $server['REQUEST_URI'] = '/path%20test/info';
1286  $request->initialize(array(), array(), array(), array(), array(), $server);
1287 
1288  $this->assertEquals('/path%20test/info', $request->getPathInfo());
1289  }
1290 
1291  public function testGetParameterPrecedence()
1292  {
1293  $request = new Request();
1294  $request->attributes->set('foo', 'attr');
1295  $request->query->set('foo', 'query');
1296  $request->request->set('foo', 'body');
1297 
1298  $this->assertSame('attr', $request->get('foo'));
1299 
1300  $request->attributes->remove('foo');
1301  $this->assertSame('query', $request->get('foo'));
1302 
1303  $request->query->remove('foo');
1304  $this->assertSame('body', $request->get('foo'));
1305 
1306  $request->request->remove('foo');
1307  $this->assertNull($request->get('foo'));
1308  }
1309 
1310  public function testGetPreferredLanguage()
1311  {
1312  $request = new Request();
1313  $this->assertNull($request->getPreferredLanguage());
1314  $this->assertNull($request->getPreferredLanguage(array()));
1315  $this->assertEquals('fr', $request->getPreferredLanguage(array('fr')));
1316  $this->assertEquals('fr', $request->getPreferredLanguage(array('fr', 'en')));
1317  $this->assertEquals('en', $request->getPreferredLanguage(array('en', 'fr')));
1318  $this->assertEquals('fr-ch', $request->getPreferredLanguage(array('fr-ch', 'fr-fr')));
1319 
1320  $request = new Request();
1321  $request->headers->set('Accept-language', 'zh, en-us; q=0.8, en; q=0.6');
1322  $this->assertEquals('en', $request->getPreferredLanguage(array('en', 'en-us')));
1323 
1324  $request = new Request();
1325  $request->headers->set('Accept-language', 'zh, en-us; q=0.8, en; q=0.6');
1326  $this->assertEquals('en', $request->getPreferredLanguage(array('fr', 'en')));
1327 
1328  $request = new Request();
1329  $request->headers->set('Accept-language', 'zh, en-us; q=0.8');
1330  $this->assertEquals('en', $request->getPreferredLanguage(array('fr', 'en')));
1331 
1332  $request = new Request();
1333  $request->headers->set('Accept-language', 'zh, en-us; q=0.8, fr-fr; q=0.6, fr; q=0.5');
1334  $this->assertEquals('en', $request->getPreferredLanguage(array('fr', 'en')));
1335  }
1336 
1337  public function testIsXmlHttpRequest()
1338  {
1339  $request = new Request();
1340  $this->assertFalse($request->isXmlHttpRequest());
1341 
1342  $request->headers->set('X-Requested-With', 'XMLHttpRequest');
1343  $this->assertTrue($request->isXmlHttpRequest());
1344 
1345  $request->headers->remove('X-Requested-With');
1346  $this->assertFalse($request->isXmlHttpRequest());
1347  }
1348 
1352  public function testIntlLocale()
1353  {
1354  $request = new Request();
1355 
1356  $request->setDefaultLocale('fr');
1357  $this->assertEquals('fr', $request->getLocale());
1358  $this->assertEquals('fr', \Locale::getDefault());
1359 
1360  $request->setLocale('en');
1361  $this->assertEquals('en', $request->getLocale());
1362  $this->assertEquals('en', \Locale::getDefault());
1363 
1364  $request->setDefaultLocale('de');
1365  $this->assertEquals('en', $request->getLocale());
1366  $this->assertEquals('en', \Locale::getDefault());
1367  }
1368 
1369  public function testGetCharsets()
1370  {
1371  $request = new Request();
1372  $this->assertEquals(array(), $request->getCharsets());
1373  $request->headers->set('Accept-Charset', 'ISO-8859-1, US-ASCII, UTF-8; q=0.8, ISO-10646-UCS-2; q=0.6');
1374  $this->assertEquals(array(), $request->getCharsets()); // testing caching
1375 
1376  $request = new Request();
1377  $request->headers->set('Accept-Charset', 'ISO-8859-1, US-ASCII, UTF-8; q=0.8, ISO-10646-UCS-2; q=0.6');
1378  $this->assertEquals(array('ISO-8859-1', 'US-ASCII', 'UTF-8', 'ISO-10646-UCS-2'), $request->getCharsets());
1379 
1380  $request = new Request();
1381  $request->headers->set('Accept-Charset', 'ISO-8859-1,utf-8;q=0.7,*;q=0.7');
1382  $this->assertEquals(array('ISO-8859-1', 'utf-8', '*'), $request->getCharsets());
1383  }
1384 
1385  public function testGetEncodings()
1386  {
1387  $request = new Request();
1388  $this->assertEquals(array(), $request->getEncodings());
1389  $request->headers->set('Accept-Encoding', 'gzip,deflate,sdch');
1390  $this->assertEquals(array(), $request->getEncodings()); // testing caching
1391 
1392  $request = new Request();
1393  $request->headers->set('Accept-Encoding', 'gzip,deflate,sdch');
1394  $this->assertEquals(array('gzip', 'deflate', 'sdch'), $request->getEncodings());
1395 
1396  $request = new Request();
1397  $request->headers->set('Accept-Encoding', 'gzip;q=0.4,deflate;q=0.9,compress;q=0.7');
1398  $this->assertEquals(array('deflate', 'compress', 'gzip'), $request->getEncodings());
1399  }
1400 
1402  {
1403  $request = new Request();
1404  $this->assertEquals(array(), $request->getAcceptableContentTypes());
1405  $request->headers->set('Accept', 'application/vnd.wap.wmlscriptc, text/vnd.wap.wml, application/vnd.wap.xhtml+xml, application/xhtml+xml, text/html, multipart/mixed, */*');
1406  $this->assertEquals(array(), $request->getAcceptableContentTypes()); // testing caching
1407 
1408  $request = new Request();
1409  $request->headers->set('Accept', 'application/vnd.wap.wmlscriptc, text/vnd.wap.wml, application/vnd.wap.xhtml+xml, application/xhtml+xml, text/html, multipart/mixed, */*');
1410  $this->assertEquals(array('application/vnd.wap.wmlscriptc', 'text/vnd.wap.wml', 'application/vnd.wap.xhtml+xml', 'application/xhtml+xml', 'text/html', 'multipart/mixed', '*/*'), $request->getAcceptableContentTypes());
1411  }
1412 
1413  public function testGetLanguages()
1414  {
1415  $request = new Request();
1416  $this->assertEquals(array(), $request->getLanguages());
1417 
1418  $request = new Request();
1419  $request->headers->set('Accept-language', 'zh, en-us; q=0.8, en; q=0.6');
1420  $this->assertEquals(array('zh', 'en_US', 'en'), $request->getLanguages());
1421  $this->assertEquals(array('zh', 'en_US', 'en'), $request->getLanguages());
1422 
1423  $request = new Request();
1424  $request->headers->set('Accept-language', 'zh, en-us; q=0.6, en; q=0.8');
1425  $this->assertEquals(array('zh', 'en', 'en_US'), $request->getLanguages()); // Test out of order qvalues
1426 
1427  $request = new Request();
1428  $request->headers->set('Accept-language', 'zh, en, en-us');
1429  $this->assertEquals(array('zh', 'en', 'en_US'), $request->getLanguages()); // Test equal weighting without qvalues
1430 
1431  $request = new Request();
1432  $request->headers->set('Accept-language', 'zh; q=0.6, en, en-us; q=0.6');
1433  $this->assertEquals(array('en', 'zh', 'en_US'), $request->getLanguages()); // Test equal weighting with qvalues
1434 
1435  $request = new Request();
1436  $request->headers->set('Accept-language', 'zh, i-cherokee; q=0.6');
1437  $this->assertEquals(array('zh', 'cherokee'), $request->getLanguages());
1438  }
1439 
1440  public function testGetRequestFormat()
1441  {
1442  $request = new Request();
1443  $this->assertEquals('html', $request->getRequestFormat());
1444 
1445  // Ensure that setting different default values over time is possible,
1446  // aka. setRequestFormat determines the state.
1447  $this->assertEquals('json', $request->getRequestFormat('json'));
1448  $this->assertEquals('html', $request->getRequestFormat('html'));
1449 
1450  $request = new Request();
1451  $this->assertNull($request->getRequestFormat(null));
1452 
1453  $request = new Request();
1454  $this->assertNull($request->setRequestFormat('foo'));
1455  $this->assertEquals('foo', $request->getRequestFormat(null));
1456 
1457  $request = new Request(array('_format' => 'foo'));
1458  $this->assertEquals('html', $request->getRequestFormat());
1459  }
1460 
1461  public function testHasSession()
1462  {
1463  $request = new Request();
1464 
1465  $this->assertFalse($request->hasSession());
1466  $request->setSession(new Session(new MockArraySessionStorage()));
1467  $this->assertTrue($request->hasSession());
1468  }
1469 
1470  public function testGetSession()
1471  {
1472  $request = new Request();
1473 
1474  $request->setSession(new Session(new MockArraySessionStorage()));
1475  $this->assertTrue($request->hasSession());
1476 
1477  $session = $request->getSession();
1478  $this->assertObjectHasAttribute('storage', $session);
1479  $this->assertObjectHasAttribute('flashName', $session);
1480  $this->assertObjectHasAttribute('attributeName', $session);
1481  }
1482 
1483  public function testHasPreviousSession()
1484  {
1485  $request = new Request();
1486 
1487  $this->assertFalse($request->hasPreviousSession());
1488  $request->cookies->set('MOCKSESSID', 'foo');
1489  $this->assertFalse($request->hasPreviousSession());
1490  $request->setSession(new Session(new MockArraySessionStorage()));
1491  $this->assertTrue($request->hasPreviousSession());
1492  }
1493 
1494  public function testToString()
1495  {
1496  $request = new Request();
1497 
1498  $request->headers->set('Accept-language', 'zh, en-us; q=0.8, en; q=0.6');
1499 
1500  $this->assertContains('Accept-Language: zh, en-us; q=0.8, en; q=0.6', $request->__toString());
1501  }
1502 
1503  public function testIsMethod()
1504  {
1505  $request = new Request();
1506  $request->setMethod('POST');
1507  $this->assertTrue($request->isMethod('POST'));
1508  $this->assertTrue($request->isMethod('post'));
1509  $this->assertFalse($request->isMethod('GET'));
1510  $this->assertFalse($request->isMethod('get'));
1511 
1512  $request->setMethod('GET');
1513  $this->assertTrue($request->isMethod('GET'));
1514  $this->assertTrue($request->isMethod('get'));
1515  $this->assertFalse($request->isMethod('POST'));
1516  $this->assertFalse($request->isMethod('post'));
1517  }
1518 
1522  public function testGetBaseUrl($uri, $server, $expectedBaseUrl, $expectedPathInfo)
1523  {
1524  $request = Request::create($uri, 'GET', array(), array(), array(), $server);
1525 
1526  $this->assertSame($expectedBaseUrl, $request->getBaseUrl(), 'baseUrl');
1527  $this->assertSame($expectedPathInfo, $request->getPathInfo(), 'pathInfo');
1528  }
1529 
1530  public function getBaseUrlData()
1531  {
1532  return array(
1533  array(
1534  '/fruit/strawberry/1234index.php/blah',
1535  array(
1536  'SCRIPT_FILENAME' => 'E:/Sites/cc-new/public_html/fruit/index.php',
1537  'SCRIPT_NAME' => '/fruit/index.php',
1538  'PHP_SELF' => '/fruit/index.php',
1539  ),
1540  '/fruit',
1541  '/strawberry/1234index.php/blah',
1542  ),
1543  array(
1544  '/fruit/strawberry/1234index.php/blah',
1545  array(
1546  'SCRIPT_FILENAME' => 'E:/Sites/cc-new/public_html/index.php',
1547  'SCRIPT_NAME' => '/index.php',
1548  'PHP_SELF' => '/index.php',
1549  ),
1550  '',
1551  '/fruit/strawberry/1234index.php/blah',
1552  ),
1553  array(
1554  '/foo%20bar/',
1555  array(
1556  'SCRIPT_FILENAME' => '/home/John Doe/public_html/foo bar/app.php',
1557  'SCRIPT_NAME' => '/foo bar/app.php',
1558  'PHP_SELF' => '/foo bar/app.php',
1559  ),
1560  '/foo%20bar',
1561  '/',
1562  ),
1563  array(
1564  '/foo%20bar/home',
1565  array(
1566  'SCRIPT_FILENAME' => '/home/John Doe/public_html/foo bar/app.php',
1567  'SCRIPT_NAME' => '/foo bar/app.php',
1568  'PHP_SELF' => '/foo bar/app.php',
1569  ),
1570  '/foo%20bar',
1571  '/home',
1572  ),
1573  array(
1574  '/foo%20bar/app.php/home',
1575  array(
1576  'SCRIPT_FILENAME' => '/home/John Doe/public_html/foo bar/app.php',
1577  'SCRIPT_NAME' => '/foo bar/app.php',
1578  'PHP_SELF' => '/foo bar/app.php',
1579  ),
1580  '/foo%20bar/app.php',
1581  '/home',
1582  ),
1583  array(
1584  '/foo%20bar/app.php/home%3Dbaz',
1585  array(
1586  'SCRIPT_FILENAME' => '/home/John Doe/public_html/foo bar/app.php',
1587  'SCRIPT_NAME' => '/foo bar/app.php',
1588  'PHP_SELF' => '/foo bar/app.php',
1589  ),
1590  '/foo%20bar/app.php',
1591  '/home%3Dbaz',
1592  ),
1593  array(
1594  '/foo/bar+baz',
1595  array(
1596  'SCRIPT_FILENAME' => '/home/John Doe/public_html/foo/app.php',
1597  'SCRIPT_NAME' => '/foo/app.php',
1598  'PHP_SELF' => '/foo/app.php',
1599  ),
1600  '/foo',
1601  '/bar+baz',
1602  ),
1603  );
1604  }
1605 
1609  public function testUrlencodedStringPrefix($string, $prefix, $expect)
1610  {
1611  $request = new Request();
1612 
1613  $me = new \ReflectionMethod($request, 'getUrlencodedPrefix');
1614  $me->setAccessible(true);
1615 
1616  $this->assertSame($expect, $me->invoke($request, $string, $prefix));
1617  }
1618 
1619  public function urlencodedStringPrefixData()
1620  {
1621  return array(
1622  array('foo', 'foo', 'foo'),
1623  array('fo%6f', 'foo', 'fo%6f'),
1624  array('foo/bar', 'foo', 'foo'),
1625  array('fo%6f/bar', 'foo', 'fo%6f'),
1626  array('f%6f%6f/bar', 'foo', 'f%6f%6f'),
1627  array('%66%6F%6F/bar', 'foo', '%66%6F%6F'),
1628  array('fo+o/bar', 'fo+o', 'fo+o'),
1629  array('fo%2Bo/bar', 'fo+o', 'fo%2Bo'),
1630  );
1631  }
1632 
1633  private function disableHttpMethodParameterOverride()
1634  {
1635  $class = new \ReflectionClass('Symfony\\Component\\HttpFoundation\\Request');
1636  $property = $class->getProperty('httpMethodParameterOverride');
1637  $property->setAccessible(true);
1638  $property->setValue(false);
1639  }
1640 
1641  private function getRequestInstanceForClientIpTests($remoteAddr, $httpForwardedFor, $trustedProxies)
1642  {
1643  $request = new Request();
1644 
1645  $server = array('REMOTE_ADDR' => $remoteAddr);
1646  if (null !== $httpForwardedFor) {
1647  $server['HTTP_X_FORWARDED_FOR'] = $httpForwardedFor;
1648  }
1649 
1650  if ($trustedProxies) {
1652  }
1653 
1654  $request->initialize(array(), array(), array(), array(), array(), $server);
1655 
1656  return $request;
1657  }
1658 
1659  private function getRequestInstanceForClientIpsForwardedTests($remoteAddr, $httpForwarded, $trustedProxies)
1660  {
1661  $request = new Request();
1662 
1663  $server = array('REMOTE_ADDR' => $remoteAddr);
1664 
1665  if (null !== $httpForwarded) {
1666  $server['HTTP_FORWARDED'] = $httpForwarded;
1667  }
1668 
1669  if ($trustedProxies) {
1671  }
1672 
1673  $request->initialize(array(), array(), array(), array(), array(), $server);
1674 
1675  return $request;
1676  }
1677 
1679  {
1680  $request = Request::create('http://example.com/');
1681  $request->server->set('REMOTE_ADDR', '3.3.3.3');
1682  $request->headers->set('X_FORWARDED_FOR', '1.1.1.1, 2.2.2.2');
1683  $request->headers->set('X_FORWARDED_HOST', 'foo.example.com:1234, real.example.com:8080');
1684  $request->headers->set('X_FORWARDED_PROTO', 'https');
1685  $request->headers->set('X_FORWARDED_PORT', 443);
1686 
1687  // no trusted proxies
1688  $this->assertEquals('3.3.3.3', $request->getClientIp());
1689  $this->assertEquals('example.com', $request->getHost());
1690  $this->assertEquals(80, $request->getPort());
1691  $this->assertFalse($request->isSecure());
1692 
1693  // disabling proxy trusting
1695  $this->assertEquals('3.3.3.3', $request->getClientIp());
1696  $this->assertEquals('example.com', $request->getHost());
1697  $this->assertEquals(80, $request->getPort());
1698  $this->assertFalse($request->isSecure());
1699 
1700  // request is forwarded by a non-trusted proxy
1702  $this->assertEquals('3.3.3.3', $request->getClientIp());
1703  $this->assertEquals('example.com', $request->getHost());
1704  $this->assertEquals(80, $request->getPort());
1705  $this->assertFalse($request->isSecure());
1706 
1707  // trusted proxy via setTrustedProxies()
1708  Request::setTrustedProxies(array('3.3.3.3', '2.2.2.2'), Request::HEADER_X_FORWARDED_ALL);
1709  $this->assertEquals('1.1.1.1', $request->getClientIp());
1710  $this->assertEquals('foo.example.com', $request->getHost());
1711  $this->assertEquals(443, $request->getPort());
1712  $this->assertTrue($request->isSecure());
1713 
1714  // trusted proxy via setTrustedProxies()
1715  Request::setTrustedProxies(array('3.3.3.4', '2.2.2.2'), Request::HEADER_X_FORWARDED_ALL);
1716  $this->assertEquals('3.3.3.3', $request->getClientIp());
1717  $this->assertEquals('example.com', $request->getHost());
1718  $this->assertEquals(80, $request->getPort());
1719  $this->assertFalse($request->isSecure());
1720 
1721  // check various X_FORWARDED_PROTO header values
1722  Request::setTrustedProxies(array('3.3.3.3', '2.2.2.2'), Request::HEADER_X_FORWARDED_ALL);
1723  $request->headers->set('X_FORWARDED_PROTO', 'ssl');
1724  $this->assertTrue($request->isSecure());
1725 
1726  $request->headers->set('X_FORWARDED_PROTO', 'https, http');
1727  $this->assertTrue($request->isSecure());
1728  }
1729 
1734  public function testLegacyTrustedProxies()
1735  {
1736  $request = Request::create('http://example.com/');
1737  $request->server->set('REMOTE_ADDR', '3.3.3.3');
1738  $request->headers->set('X_FORWARDED_FOR', '1.1.1.1, 2.2.2.2');
1739  $request->headers->set('X_FORWARDED_HOST', 'foo.example.com, real.example.com:8080');
1740  $request->headers->set('X_FORWARDED_PROTO', 'https');
1741  $request->headers->set('X_FORWARDED_PORT', 443);
1742  $request->headers->set('X_MY_FOR', '3.3.3.3, 4.4.4.4');
1743  $request->headers->set('X_MY_HOST', 'my.example.com');
1744  $request->headers->set('X_MY_PROTO', 'http');
1745  $request->headers->set('X_MY_PORT', 81);
1746 
1747  Request::setTrustedProxies(array('3.3.3.3', '2.2.2.2'), Request::HEADER_X_FORWARDED_ALL);
1748 
1749  // custom header names
1754  $this->assertEquals('4.4.4.4', $request->getClientIp());
1755  $this->assertEquals('my.example.com', $request->getHost());
1756  $this->assertEquals(81, $request->getPort());
1757  $this->assertFalse($request->isSecure());
1758 
1759  // disabling via empty header names
1764  $this->assertEquals('3.3.3.3', $request->getClientIp());
1765  $this->assertEquals('example.com', $request->getHost());
1766  $this->assertEquals(80, $request->getPort());
1767  $this->assertFalse($request->isSecure());
1768 
1769  //reset
1775  }
1776 
1778  {
1779  $request = Request::create('http://example.com/');
1780  $request->server->set('REMOTE_ADDR', '3.3.3.3');
1781  $request->headers->set('FORWARDED', 'for=1.1.1.1, host=foo.example.com:8080, proto=https, for=2.2.2.2, host=real.example.com:8080');
1782 
1783  // no trusted proxies
1784  $this->assertEquals('3.3.3.3', $request->getClientIp());
1785  $this->assertEquals('example.com', $request->getHost());
1786  $this->assertEquals(80, $request->getPort());
1787  $this->assertFalse($request->isSecure());
1788 
1789  // disabling proxy trusting
1791  $this->assertEquals('3.3.3.3', $request->getClientIp());
1792  $this->assertEquals('example.com', $request->getHost());
1793  $this->assertEquals(80, $request->getPort());
1794  $this->assertFalse($request->isSecure());
1795 
1796  // request is forwarded by a non-trusted proxy
1798  $this->assertEquals('3.3.3.3', $request->getClientIp());
1799  $this->assertEquals('example.com', $request->getHost());
1800  $this->assertEquals(80, $request->getPort());
1801  $this->assertFalse($request->isSecure());
1802 
1803  // trusted proxy via setTrustedProxies()
1804  Request::setTrustedProxies(array('3.3.3.3', '2.2.2.2'), Request::HEADER_FORWARDED);
1805  $this->assertEquals('1.1.1.1', $request->getClientIp());
1806  $this->assertEquals('foo.example.com', $request->getHost());
1807  $this->assertEquals(8080, $request->getPort());
1808  $this->assertTrue($request->isSecure());
1809 
1810  // trusted proxy via setTrustedProxies()
1811  Request::setTrustedProxies(array('3.3.3.4', '2.2.2.2'), Request::HEADER_FORWARDED);
1812  $this->assertEquals('3.3.3.3', $request->getClientIp());
1813  $this->assertEquals('example.com', $request->getHost());
1814  $this->assertEquals(80, $request->getPort());
1815  $this->assertFalse($request->isSecure());
1816 
1817  // check various X_FORWARDED_PROTO header values
1818  Request::setTrustedProxies(array('3.3.3.3', '2.2.2.2'), Request::HEADER_FORWARDED);
1819  $request->headers->set('FORWARDED', 'proto=ssl');
1820  $this->assertTrue($request->isSecure());
1821 
1822  $request->headers->set('FORWARDED', 'proto=https, proto=http');
1823  $this->assertTrue($request->isSecure());
1824  }
1825 
1831  {
1832  Request::create('http://example.com/');
1833  Request::setTrustedHeaderName('bogus name', 'X_MY_FOR');
1834  }
1835 
1841  {
1842  Request::create('http://example.com/');
1843  Request::getTrustedHeaderName('bogus name');
1844  }
1845 
1849  public function testIISRequestUri($headers, $server, $expectedRequestUri)
1850  {
1851  $request = new Request();
1852  $request->headers->replace($headers);
1853  $request->server->replace($server);
1854 
1855  $this->assertEquals($expectedRequestUri, $request->getRequestUri(), '->getRequestUri() is correct');
1856 
1857  $subRequestUri = '/bar/foo';
1858  $subRequest = Request::create($subRequestUri, 'get', array(), array(), array(), $request->server->all());
1859  $this->assertEquals($subRequestUri, $subRequest->getRequestUri(), '->getRequestUri() is correct in sub request');
1860  }
1861 
1862  public function iisRequestUriProvider()
1863  {
1864  return array(
1865  array(
1866  array(
1867  'X_ORIGINAL_URL' => '/foo/bar',
1868  ),
1869  array(),
1870  '/foo/bar',
1871  ),
1872  array(
1873  array(
1874  'X_REWRITE_URL' => '/foo/bar',
1875  ),
1876  array(),
1877  '/foo/bar',
1878  ),
1879  array(
1880  array(),
1881  array(
1882  'IIS_WasUrlRewritten' => '1',
1883  'UNENCODED_URL' => '/foo/bar',
1884  ),
1885  '/foo/bar',
1886  ),
1887  array(
1888  array(
1889  'X_ORIGINAL_URL' => '/foo/bar',
1890  ),
1891  array(
1892  'HTTP_X_ORIGINAL_URL' => '/foo/bar',
1893  ),
1894  '/foo/bar',
1895  ),
1896  array(
1897  array(
1898  'X_ORIGINAL_URL' => '/foo/bar',
1899  ),
1900  array(
1901  'IIS_WasUrlRewritten' => '1',
1902  'UNENCODED_URL' => '/foo/bar',
1903  ),
1904  '/foo/bar',
1905  ),
1906  array(
1907  array(
1908  'X_ORIGINAL_URL' => '/foo/bar',
1909  ),
1910  array(
1911  'HTTP_X_ORIGINAL_URL' => '/foo/bar',
1912  'IIS_WasUrlRewritten' => '1',
1913  'UNENCODED_URL' => '/foo/bar',
1914  ),
1915  '/foo/bar',
1916  ),
1917  array(
1918  array(),
1919  array(
1920  'ORIG_PATH_INFO' => '/foo/bar',
1921  ),
1922  '/foo/bar',
1923  ),
1924  array(
1925  array(),
1926  array(
1927  'ORIG_PATH_INFO' => '/foo/bar',
1928  'QUERY_STRING' => 'foo=bar',
1929  ),
1930  '/foo/bar?foo=bar',
1931  ),
1932  );
1933  }
1934 
1935  public function testTrustedHosts()
1936  {
1937  // create a request
1938  $request = Request::create('/');
1939 
1940  // no trusted host set -> no host check
1941  $request->headers->set('host', 'evil.com');
1942  $this->assertEquals('evil.com', $request->getHost());
1943 
1944  // add a trusted domain and all its subdomains
1945  Request::setTrustedHosts(array('^([a-z]{9}\.)?trusted\.com$'));
1946 
1947  // untrusted host
1948  $request->headers->set('host', 'evil.com');
1949  try {
1950  $request->getHost();
1951  $this->fail('Request::getHost() should throw an exception when host is not trusted.');
1952  } catch (SuspiciousOperationException $e) {
1953  $this->assertEquals('Untrusted Host "evil.com".', $e->getMessage());
1954  }
1955 
1956  // trusted hosts
1957  $request->headers->set('host', 'trusted.com');
1958  $this->assertEquals('trusted.com', $request->getHost());
1959  $this->assertEquals(80, $request->getPort());
1960 
1961  $request->server->set('HTTPS', true);
1962  $request->headers->set('host', 'trusted.com');
1963  $this->assertEquals('trusted.com', $request->getHost());
1964  $this->assertEquals(443, $request->getPort());
1965  $request->server->set('HTTPS', false);
1966 
1967  $request->headers->set('host', 'trusted.com:8000');
1968  $this->assertEquals('trusted.com', $request->getHost());
1969  $this->assertEquals(8000, $request->getPort());
1970 
1971  $request->headers->set('host', 'subdomain.trusted.com');
1972  $this->assertEquals('subdomain.trusted.com', $request->getHost());
1973 
1974  // reset request for following tests
1975  Request::setTrustedHosts(array());
1976  }
1977 
1978  public function testFactory()
1979  {
1980  Request::setFactory(function (array $query = array(), array $request = array(), array $attributes = array(), array $cookies = array(), array $files = array(), array $server = array(), $content = null) {
1981  return new NewRequest();
1982  });
1983 
1984  $this->assertEquals('foo', Request::create('/')->getFoo());
1985 
1986  Request::setFactory(null);
1987  }
1988 
1992  public function testVeryLongHosts($host)
1993  {
1994  $start = microtime(true);
1995 
1996  $request = Request::create('/');
1997  $request->headers->set('host', $host);
1998  $this->assertEquals($host, $request->getHost());
1999  $this->assertLessThan(5, microtime(true) - $start);
2000  }
2001 
2005  public function testHostValidity($host, $isValid, $expectedHost = null, $expectedPort = null)
2006  {
2007  $request = Request::create('/');
2008  $request->headers->set('host', $host);
2009 
2010  if ($isValid) {
2011  $this->assertSame($expectedHost ?: $host, $request->getHost());
2012  if ($expectedPort) {
2013  $this->assertSame($expectedPort, $request->getPort());
2014  }
2015  } else {
2016  if (method_exists($this, 'expectException')) {
2017  $this->expectException(SuspiciousOperationException::class);
2018  $this->expectExceptionMessage('Invalid Host');
2019  } else {
2020  $this->setExpectedException(SuspiciousOperationException::class, 'Invalid Host');
2021  }
2022 
2023  $request->getHost();
2024  }
2025  }
2026 
2027  public function getHostValidities()
2028  {
2029  return array(
2030  array('.a', false),
2031  array('a..', false),
2032  array('a.', true),
2033  array("\xE9", false),
2034  array('[::1]', true),
2035  array('[::1]:80', true, '[::1]', 80),
2036  array(str_repeat('.', 101), false),
2037  );
2038  }
2039 
2040  public function getLongHostNames()
2041  {
2042  return array(
2043  array('a'.str_repeat('.a', 40000)),
2044  array(str_repeat(':', 101)),
2045  );
2046  }
2047 
2051  public function testMethodIdempotent($method, $idempotent)
2052  {
2053  $request = new Request();
2054  $request->setMethod($method);
2055  $this->assertEquals($idempotent, $request->isMethodIdempotent());
2056  }
2057 
2058  public function methodIdempotentProvider()
2059  {
2060  return array(
2061  array('HEAD', true),
2062  array('GET', true),
2063  array('POST', false),
2064  array('PUT', true),
2065  array('PATCH', false),
2066  array('DELETE', true),
2067  array('PURGE', true),
2068  array('OPTIONS', true),
2069  array('TRACE', true),
2070  array('CONNECT', false),
2071  );
2072  }
2073 
2077  public function testMethodSafe($method, $safe)
2078  {
2079  $request = new Request();
2080  $request->setMethod($method);
2081  $this->assertEquals($safe, $request->isMethodSafe(false));
2082  }
2083 
2084  public function methodSafeProvider()
2085  {
2086  return array(
2087  array('HEAD', true),
2088  array('GET', true),
2089  array('POST', false),
2090  array('PUT', false),
2091  array('PATCH', false),
2092  array('DELETE', false),
2093  array('PURGE', false),
2094  array('OPTIONS', true),
2095  array('TRACE', true),
2096  array('CONNECT', false),
2097  );
2098  }
2099 
2105  {
2106  $request = new Request();
2107  $request->setMethod('OPTIONS');
2108  $this->assertFalse($request->isMethodSafe());
2109  }
2110 
2114  public function testMethodCacheable($method, $chacheable)
2115  {
2116  $request = new Request();
2117  $request->setMethod($method);
2118  $this->assertEquals($chacheable, $request->isMethodCacheable());
2119  }
2120 
2121  public function methodCacheableProvider()
2122  {
2123  return array(
2124  array('HEAD', true),
2125  array('GET', true),
2126  array('POST', false),
2127  array('PUT', false),
2128  array('PATCH', false),
2129  array('DELETE', false),
2130  array('PURGE', false),
2131  array('OPTIONS', false),
2132  array('TRACE', false),
2133  array('CONNECT', false),
2134  );
2135  }
2136 
2140  public function testGetTrustedHeaderName()
2141  {
2143 
2145  $this->assertSame('X_FORWARDED_FOR', Request::getTrustedHeaderName(Request::HEADER_CLIENT_IP));
2146  $this->assertSame('X_FORWARDED_HOST', Request::getTrustedHeaderName(Request::HEADER_CLIENT_HOST));
2147  $this->assertSame('X_FORWARDED_PORT', Request::getTrustedHeaderName(Request::HEADER_CLIENT_PORT));
2148  $this->assertSame('X_FORWARDED_PROTO', Request::getTrustedHeaderName(Request::HEADER_CLIENT_PROTO));
2149 
2151 
2152  $this->assertSame('FORWARDED', Request::getTrustedHeaderName(Request::HEADER_FORWARDED));
2157 
2163 
2165 
2171 
2173 
2179 
2181 
2183 
2184  //reset
2190  }
2191 }
2192 
2194 {
2195  public function getContent($asResource = false)
2196  {
2197  return http_build_query(array('_method' => 'PUT', 'content' => 'mycontent'));
2198  }
2199 }
2200 
2201 class NewRequest extends Request
2202 {
2203  public function getFoo()
2204  {
2205  return 'foo';
2206  }
2207 }
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetFormatWithCustomMimeType
testGetFormatWithCustomMimeType()
Definition: symfony/http-foundation/Tests/RequestTest.php:361
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetContentReturnsResourceWhenContentSetInConstructor
testGetContentReturnsResourceWhenContentSetInConstructor()
Definition: symfony/http-foundation/Tests/RequestTest.php:1034
Symfony\Component\HttpFoundation\Tests\RequestTest\testCreate
testCreate()
Definition: symfony/http-foundation/Tests/RequestTest.php:94
Symfony\Component\HttpFoundation\Tests\RequestTest\testMethodIdempotent
testMethodIdempotent($method, $idempotent)
Definition: symfony/http-foundation/Tests/RequestTest.php:2051
Symfony\Component\HttpFoundation\Request\enableHttpMethodParameterOverride
static enableHttpMethodParameterOverride()
Definition: lib/vendor/symfony/http-foundation/Request.php:840
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetClientIpsForwarded
testGetClientIpsForwarded($expected, $remoteAddr, $httpForwarded, $trustedProxies)
Definition: symfony/http-foundation/Tests/RequestTest.php:875
Symfony\Component\HttpFoundation\Tests\RequestTest\testIsXmlHttpRequest
testIsXmlHttpRequest()
Definition: symfony/http-foundation/Tests/RequestTest.php:1337
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetFormatFromMimeType
testGetFormatFromMimeType($format, $mimeTypes)
Definition: symfony/http-foundation/Tests/RequestTest.php:307
Symfony\Component\HttpFoundation\Tests\RequestContentProxy\getContent
getContent($asResource=false)
Definition: symfony/http-foundation/Tests/RequestTest.php:2195
Symfony\Component\HttpFoundation\Tests\RequestTest\provideOverloadedMethods
provideOverloadedMethods()
Definition: symfony/http-foundation/Tests/RequestTest.php:1108
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetQueryString
testGetQueryString($query, $expectedQuery, $msg)
Definition: symfony/http-foundation/Tests/RequestTest.php:666
Symfony\Component\HttpFoundation\Tests\NewRequest
Definition: symfony/http-foundation/Tests/RequestTest.php:2201
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetClientIpsWithConflictingHeaders
testGetClientIpsWithConflictingHeaders($httpForwarded, $httpXForwardedFor)
Definition: symfony/http-foundation/Tests/RequestTest.php:954
Symfony\Component\HttpFoundation\Request\setFactory
static setFactory($callable)
Definition: lib/vendor/symfony/http-foundation/Request.php:509
Symfony\Component\HttpFoundation\Tests\RequestTest\getFormatToMimeTypeMapProvider
getFormatToMimeTypeMapProvider()
Definition: symfony/http-foundation/Tests/RequestTest.php:368
Symfony\Component\HttpFoundation\Tests\RequestTest\iisRequestUriProvider
iisRequestUriProvider()
Definition: symfony/http-foundation/Tests/RequestTest.php:1862
Symfony\Component\HttpFoundation\Tests\RequestTest\testCreateCheckPrecedence
testCreateCheckPrecedence()
Definition: symfony/http-foundation/Tests/RequestTest.php:237
Symfony\Component\HttpFoundation\Request\HEADER_FORWARDED
const HEADER_FORWARDED
Definition: lib/vendor/symfony/http-foundation/Request.php:33
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetScriptName
testGetScriptName()
Definition: symfony/http-foundation/Tests/RequestTest.php:1215
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetHostWithFakeHttpHostValue
testGetHostWithFakeHttpHostValue()
Definition: symfony/http-foundation/Tests/RequestTest.php:790
Symfony\Component\HttpFoundation\Tests\RequestTest\getQueryStringNormalizationData
getQueryStringNormalizationData()
Definition: symfony/http-foundation/Tests/RequestTest.php:674
Symfony\Component\HttpFoundation\Tests\RequestTest\testVeryLongHosts
testVeryLongHosts($host)
Definition: symfony/http-foundation/Tests/RequestTest.php:1992
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetCharsets
testGetCharsets()
Definition: symfony/http-foundation/Tests/RequestTest.php:1369
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetUser
testGetUser()
Definition: symfony/http-foundation/Tests/RequestTest.php:53
Symfony\Component\HttpFoundation\Tests\RequestTest\getContentCantBeCalledTwiceWithResourcesProvider
getContentCantBeCalledTwiceWithResourcesProvider()
Definition: symfony/http-foundation/Tests/RequestTest.php:1069
Symfony\Component\HttpFoundation\Tests\RequestTest\testUrlencodedStringPrefix
testUrlencodedStringPrefix($string, $prefix, $expect)
Definition: symfony/http-foundation/Tests/RequestTest.php:1609
Symfony\Component\HttpFoundation\Tests\RequestTest\testSetDefaultLocale
testSetDefaultLocale()
Definition: symfony/http-foundation/Tests/RequestTest.php:85
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetQueryStringReturnsNull
testGetQueryStringReturnsNull()
Definition: symfony/http-foundation/Tests/RequestTest.php:701
Symfony\Component\HttpFoundation\Tests\RequestTest\methodSafeProvider
methodSafeProvider()
Definition: symfony/http-foundation/Tests/RequestTest.php:2084
Symfony\Component\HttpFoundation\Tests\RequestTest\getClientIpsWithConflictingHeadersProvider
getClientIpsWithConflictingHeadersProvider()
Definition: symfony/http-foundation/Tests/RequestTest.php:971
Symfony\Component\HttpFoundation\Tests\RequestTest\testContentAsResource
testContentAsResource()
Definition: symfony/http-foundation/Tests/RequestTest.php:1043
Symfony\Component\HttpFoundation\Session\Storage\MockArraySessionStorage
Definition: lib/vendor/symfony/http-foundation/Session/Storage/MockArraySessionStorage.php:28
Symfony\Component\HttpFoundation\Tests\RequestTest\testCreateFromGlobals
testCreateFromGlobals($method)
Definition: symfony/http-foundation/Tests/RequestTest.php:1123
Symfony\Component\HttpFoundation\Request\HEADER_X_FORWARDED_ALL
const HEADER_X_FORWARDED_ALL
Definition: lib/vendor/symfony/http-foundation/Request.php:38
Symfony\Component\HttpFoundation\Request\getTrustedHeaderName
static getTrustedHeaderName($key)
Definition: lib/vendor/symfony/http-foundation/Request.php:773
Symfony\Component\HttpFoundation\Tests\RequestTest\testTrustedProxiesXForwardedFor
testTrustedProxiesXForwardedFor()
Definition: symfony/http-foundation/Tests/RequestTest.php:1678
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetTrustedHeaderName
testGetTrustedHeaderName()
Definition: symfony/http-foundation/Tests/RequestTest.php:2140
Symfony\Component\HttpFoundation\Tests\RequestTest\getClientIpsWithAgreeingHeadersProvider
getClientIpsWithAgreeingHeadersProvider()
Definition: symfony/http-foundation/Tests/RequestTest.php:1005
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetUserInfo
testGetUserInfo()
Definition: symfony/http-foundation/Tests/RequestTest.php:623
Symfony\Component\HttpFoundation\Tests\RequestTest\urlencodedStringPrefixData
urlencodedStringPrefixData()
Definition: symfony/http-foundation/Tests/RequestTest.php:1619
Symfony\Component\HttpFoundation\Request
Definition: lib/vendor/symfony/http-foundation/Request.php:31
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetTrustedProxiesInvalidHeaderName
testGetTrustedProxiesInvalidHeaderName()
Definition: symfony/http-foundation/Tests/RequestTest.php:1840
Symfony\Component\HttpFoundation\Tests\RequestTest\getHostValidities
getHostValidities()
Definition: symfony/http-foundation/Tests/RequestTest.php:2027
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetSetMethod
testGetSetMethod()
Definition: symfony/http-foundation/Tests/RequestTest.php:797
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetPreferredLanguage
testGetPreferredLanguage()
Definition: symfony/http-foundation/Tests/RequestTest.php:1310
Symfony\Component\HttpFoundation\Request\HEADER_CLIENT_PORT
const HEADER_CLIENT_PORT
Definition: lib/vendor/symfony/http-foundation/Request.php:48
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetLocale
testGetLocale()
Definition: symfony/http-foundation/Tests/RequestTest.php:45
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetContentCanBeCalledTwiceWithResources
testGetContentCanBeCalledTwiceWithResources($first, $second)
Definition: symfony/http-foundation/Tests/RequestTest.php:1081
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetAcceptableContentTypes
testGetAcceptableContentTypes()
Definition: symfony/http-foundation/Tests/RequestTest.php:1401
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetRelativeUriForPath
testGetRelativeUriForPath($expected, $pathinfo, $path)
Definition: symfony/http-foundation/Tests/RequestTest.php:606
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetPathInfo
testGetPathInfo()
Definition: symfony/http-foundation/Tests/RequestTest.php:1273
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetSchemeAndHttpHost
testGetSchemeAndHttpHost()
Definition: symfony/http-foundation/Tests/RequestTest.php:640
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetBaseUrl
testGetBaseUrl($uri, $server, $expectedBaseUrl, $expectedPathInfo)
Definition: symfony/http-foundation/Tests/RequestTest.php:1522
Symfony\Component\HttpFoundation\Tests\RequestTest\getContentCanBeCalledTwiceWithResourcesProvider
getContentCanBeCalledTwiceWithResourcesProvider()
Definition: symfony/http-foundation/Tests/RequestTest.php:1098
Symfony\Component\HttpFoundation\Tests\RequestTest\testLegacyTrustedProxies
testLegacyTrustedProxies()
Definition: symfony/http-foundation/Tests/RequestTest.php:1734
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetMimeTypesFromInexistentFormat
testGetMimeTypesFromInexistentFormat()
Definition: symfony/http-foundation/Tests/RequestTest.php:354
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetContentWorksTwiceInDefaultMode
testGetContentWorksTwiceInDefaultMode()
Definition: symfony/http-foundation/Tests/RequestTest.php:1018
Symfony\Component\HttpFoundation\Tests\RequestTest\tearDown
tearDown()
Definition: symfony/http-foundation/Tests/RequestTest.php:22
Symfony\Component\HttpFoundation\Tests\RequestTest\testFactory
testFactory()
Definition: symfony/http-foundation/Tests/RequestTest.php:1978
Symfony\Component\HttpFoundation\Tests\RequestTest\testInitialize
testInitialize()
Definition: symfony/http-foundation/Tests/RequestTest.php:28
Symfony\Component\HttpFoundation\Request\setTrustedProxies
static setTrustedProxies(array $proxies)
Definition: lib/vendor/symfony/http-foundation/Request.php:651
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetRequestFormat
testGetRequestFormat()
Definition: symfony/http-foundation/Tests/RequestTest.php:1440
Symfony\Component\HttpFoundation\Tests\RequestTest\getBaseUrlData
getBaseUrlData()
Definition: symfony/http-foundation/Tests/RequestTest.php:1530
Symfony\Component\HttpFoundation\Tests\RequestTest\testOverrideGlobals
testOverrideGlobals()
Definition: symfony/http-foundation/Tests/RequestTest.php:1164
Symfony\Component\HttpFoundation\Tests\RequestTest\testTrustedProxiesForwarded
testTrustedProxiesForwarded()
Definition: symfony/http-foundation/Tests/RequestTest.php:1777
Symfony\Component\HttpFoundation\Tests\RequestTest\methodCacheableProvider
methodCacheableProvider()
Definition: symfony/http-foundation/Tests/RequestTest.php:2121
Symfony\Component\HttpFoundation\Tests\RequestTest\getRelativeUriForPathData
getRelativeUriForPathData()
Definition: symfony/http-foundation/Tests/RequestTest.php:611
Symfony\Component\HttpFoundation\Tests\RequestTest\methodIdempotentProvider
methodIdempotentProvider()
Definition: symfony/http-foundation/Tests/RequestTest.php:2058
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetPassword
testGetPassword()
Definition: symfony/http-foundation/Tests/RequestTest.php:61
Symfony\Component\HttpFoundation\Tests\RequestTest\getFormatToMimeTypeMapProviderWithAdditionalNullFormat
getFormatToMimeTypeMapProviderWithAdditionalNullFormat()
Definition: symfony/http-foundation/Tests/RequestTest.php:323
Symfony\Component\HttpFoundation\Request\getHttpMethodParameterOverride
static getHttpMethodParameterOverride()
Definition: lib/vendor/symfony/http-foundation/Request.php:850
Symfony\Component\HttpFoundation\Request\setTrustedHeaderName
static setTrustedHeaderName($key, $value)
Definition: lib/vendor/symfony/http-foundation/Request.php:734
Symfony\Component\HttpFoundation\Tests\RequestTest\testMethodSafeChecksCacheable
testMethodSafeChecksCacheable()
Definition: symfony/http-foundation/Tests/RequestTest.php:2104
Symfony\Component\HttpFoundation\Request\HEADER_CLIENT_IP
const HEADER_CLIENT_IP
Definition: lib/vendor/symfony/http-foundation/Request.php:42
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetClientIp
testGetClientIp($expected, $remoteAddr, $httpForwardedFor, $trustedProxies)
Definition: symfony/http-foundation/Tests/RequestTest.php:855
Symfony\Component\HttpFoundation\Tests\RequestTest\testToString
testToString()
Definition: symfony/http-foundation/Tests/RequestTest.php:1494
Symfony\Component\HttpFoundation\Request\getMimeTypes
static getMimeTypes($format)
Definition: lib/vendor/symfony/http-foundation/Request.php:1453
Symfony\Component\HttpFoundation\Tests\RequestTest\getClientIpsProvider
getClientIpsProvider()
Definition: symfony/http-foundation/Tests/RequestTest.php:895
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetUriForPath
testGetUriForPath()
Definition: symfony/http-foundation/Tests/RequestTest.php:496
Symfony\Component\HttpFoundation\Tests\RequestTest\getLongHostNames
getLongHostNames()
Definition: symfony/http-foundation/Tests/RequestTest.php:2040
Symfony\Component\HttpFoundation\Request\createFromGlobals
static createFromGlobals()
Definition: lib/vendor/symfony/http-foundation/Request.php:365
Symfony\Component\HttpFoundation\Tests\NewRequest\getFoo
getFoo()
Definition: symfony/http-foundation/Tests/RequestTest.php:2203
Symfony\Component\HttpFoundation\Tests\RequestTest\testHostValidity
testHostValidity($host, $isValid, $expectedHost=null, $expectedPort=null)
Definition: symfony/http-foundation/Tests/RequestTest.php:2005
Symfony\Component\HttpFoundation\Tests\RequestTest\testHasPreviousSession
testHasPreviousSession()
Definition: symfony/http-foundation/Tests/RequestTest.php:1483
Symfony\Component\HttpFoundation\Tests\RequestTest
Definition: symfony/http-foundation/Tests/RequestTest.php:20
Symfony\Component\HttpFoundation\Tests\RequestTest\testSetTrustedProxiesInvalidHeaderName
testSetTrustedProxiesInvalidHeaderName()
Definition: symfony/http-foundation/Tests/RequestTest.php:1830
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetHost
testGetHost()
Definition: symfony/http-foundation/Tests/RequestTest.php:711
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetBasePath
testGetBasePath()
Definition: symfony/http-foundation/Tests/RequestTest.php:1241
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetUri
testGetUri()
Definition: symfony/http-foundation/Tests/RequestTest.php:381
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetPort
testGetPort()
Definition: symfony/http-foundation/Tests/RequestTest.php:733
Symfony\Component\HttpFoundation\Tests\RequestTest\testDuplicate
testDuplicate()
Definition: symfony/http-foundation/Tests/RequestTest.php:271
Symfony\Component\HttpFoundation\Tests\RequestTest\testIsMethod
testIsMethod()
Definition: symfony/http-foundation/Tests/RequestTest.php:1503
Symfony\Component\HttpFoundation\Session\Session
Definition: lib/vendor/symfony/http-foundation/Session/Session.php:27
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetContentType
testGetContentType()
Definition: symfony/http-foundation/Tests/RequestTest.php:77
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetMimeTypeFromFormat
testGetMimeTypeFromFormat($format, $mimeTypes)
Definition: symfony/http-foundation/Tests/RequestTest.php:340
Symfony\Component\HttpFoundation\Tests\RequestTest\testHasSession
testHasSession()
Definition: symfony/http-foundation/Tests/RequestTest.php:1461
Symfony\Component\HttpFoundation\Tests\RequestTest\getClientIpsForwardedProvider
getClientIpsForwardedProvider()
Definition: symfony/http-foundation/Tests/RequestTest.php:882
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetLanguages
testGetLanguages()
Definition: symfony/http-foundation/Tests/RequestTest.php:1413
Symfony\Component\HttpFoundation\Request\HEADER_CLIENT_HOST
const HEADER_CLIENT_HOST
Definition: lib/vendor/symfony/http-foundation/Request.php:44
Symfony\Component\HttpFoundation\Tests\RequestContentProxy
Definition: symfony/http-foundation/Tests/RequestTest.php:2193
Symfony\Component\HttpFoundation\Tests\RequestTest\testMethodCacheable
testMethodCacheable($method, $chacheable)
Definition: symfony/http-foundation/Tests/RequestTest.php:2114
Symfony\Component\HttpFoundation\Tests\RequestTest\testIISRequestUri
testIISRequestUri($headers, $server, $expectedRequestUri)
Definition: symfony/http-foundation/Tests/RequestTest.php:1849
Symfony\Component\HttpFoundation\Tests
Definition: AcceptHeaderItemTest.php:12
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetParameterPrecedence
testGetParameterPrecedence()
Definition: symfony/http-foundation/Tests/RequestTest.php:1291
Symfony\Component\HttpFoundation\Request\HEADER_CLIENT_PROTO
const HEADER_CLIENT_PROTO
Definition: lib/vendor/symfony/http-foundation/Request.php:46
Symfony\Component\HttpFoundation\Tests\RequestTest\testTrustedHosts
testTrustedHosts()
Definition: symfony/http-foundation/Tests/RequestTest.php:1935
Symfony\Component\HttpFoundation\Tests\RequestTest\testDuplicateWithFormat
testDuplicateWithFormat()
Definition: symfony/http-foundation/Tests/RequestTest.php:289
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetFormatFromMimeTypeWithParameters
testGetFormatFromMimeTypeWithParameters()
Definition: symfony/http-foundation/Tests/RequestTest.php:331
Symfony\Component\HttpFoundation\Request\setTrustedHosts
static setTrustedHosts(array $hostPatterns)
Definition: lib/vendor/symfony/http-foundation/Request.php:695
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetClientIps
testGetClientIps($expected, $remoteAddr, $httpForwardedFor, $trustedProxies)
Definition: symfony/http-foundation/Tests/RequestTest.php:865
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetContentCantBeCalledTwiceWithResources
testGetContentCantBeCalledTwiceWithResources($first, $second)
Definition: symfony/http-foundation/Tests/RequestTest.php:1058
Symfony\Component\HttpFoundation\Exception\SuspiciousOperationException
Definition: lib/vendor/symfony/http-foundation/Exception/SuspiciousOperationException.php:18
Symfony\Component\HttpFoundation\Tests\RequestTest\testMethodSafe
testMethodSafe($method, $safe)
Definition: symfony/http-foundation/Tests/RequestTest.php:2077
Symfony\Component\HttpFoundation\Tests\RequestTest\testIntlLocale
testIntlLocale()
Definition: symfony/http-foundation/Tests/RequestTest.php:1352
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetContentReturnsResource
testGetContentReturnsResource()
Definition: symfony/http-foundation/Tests/RequestTest.php:1025
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetClientIpsWithAgreeingHeaders
testGetClientIpsWithAgreeingHeaders($httpForwarded, $httpXForwardedFor, $expectedIps)
Definition: symfony/http-foundation/Tests/RequestTest.php:986
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetMimeTypesFromFormat
testGetMimeTypesFromFormat($format, $mimeTypes)
Definition: symfony/http-foundation/Tests/RequestTest.php:349
Symfony\Component\HttpFoundation\Request\create
static create($uri, $method='GET', $parameters=array(), $cookies=array(), $files=array(), $server=array(), $content=null)
Definition: lib/vendor/symfony/http-foundation/Request.php:408
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetEncodings
testGetEncodings()
Definition: symfony/http-foundation/Tests/RequestTest.php:1385
Symfony\Component\HttpFoundation\Tests\RequestTest\testIsNoCache
testIsNoCache()
Definition: symfony/http-foundation/Tests/RequestTest.php:69
Symfony\Component\HttpFoundation\Tests\RequestTest\testGetSession
testGetSession()
Definition: symfony/http-foundation/Tests/RequestTest.php:1470