Changeset View
Changeset View
Standalone View
Standalone View
src/infrastructure/util/__tests__/PhabricatorPreambleTestCase.php
- This file was added.
| <?php | |||||
| final class PhabricatorPreambleTestCase | |||||
| extends PhabricatorTestCase { | |||||
| /** | |||||
| * @phutil-external-symbol function preamble_get_x_forwarded_for_address | |||||
| */ | |||||
| public function testXForwardedForLayers() { | |||||
| $tests = array( | |||||
| // This is normal behavior with one load balancer. | |||||
| array( | |||||
| 'header' => '1.2.3.4', | |||||
| 'layers' => 1, | |||||
| 'expect' => '1.2.3.4', | |||||
| ), | |||||
| // In this case, the LB received a request which already had an | |||||
| // "X-Forwarded-For" header. This might be legitimate (in the case of | |||||
| // a CDN request) or illegitimate (in the case of a client making | |||||
| // things up). We don't want to trust it. | |||||
| array( | |||||
| 'header' => '9.9.9.9, 1.2.3.4', | |||||
| 'layers' => 1, | |||||
| 'expect' => '1.2.3.4', | |||||
| ), | |||||
| // Multiple layers of load balancers. | |||||
| array( | |||||
| 'header' => '9.9.9.9, 1.2.3.4', | |||||
| 'layers' => 2, | |||||
| 'expect' => '9.9.9.9', | |||||
| ), | |||||
| // Multiple layers of load balancers, plus a client-supplied value. | |||||
| array( | |||||
| 'header' => '8.8.8.8, 9.9.9.9, 1.2.3.4', | |||||
| 'layers' => 2, | |||||
| 'expect' => '9.9.9.9', | |||||
| ), | |||||
| // Multiple layers of load balancers, but this request came from | |||||
| // somewhere inside the network. | |||||
| array( | |||||
| 'header' => '1.2.3.4', | |||||
| 'layers' => 2, | |||||
| 'expect' => '1.2.3.4', | |||||
| ), | |||||
| array( | |||||
| 'header' => 'A, B, C, D, E, F, G, H, I', | |||||
| 'layers' => 7, | |||||
| 'expect' => 'C', | |||||
| ), | |||||
| ); | |||||
| foreach ($tests as $test) { | |||||
| $header = $test['header']; | |||||
| $layers = $test['layers']; | |||||
| $expect = $test['expect']; | |||||
| $actual = preamble_get_x_forwarded_for_address($header, $layers); | |||||
| $this->assertEqual( | |||||
| $expect, | |||||
| $actual, | |||||
| pht( | |||||
| 'Address after stripping %d layers from: %s', | |||||
| $layers, | |||||
| $header)); | |||||
| } | |||||
| } | |||||
| } | |||||