Something went wrong. Try again.
@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
Something went wrong. Try again.
PHP
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124#!/usr/bin/env php<?php
/** * /startup/ is not a Phutil library, so it can't use the phutil test fixture. * This script will just run the tests directly. * * NOTE: This test file will not run as part of `arc unit` run! */
final class PreambleUtilsTestCase {
public function testTrustXForwardValues() { // For specific values of `$_SERVER['HTTP_X_FORWARDED_FOR']`, // `$_SERVER['REMOTE_ADDR']` will be updated with the result.
$undefined = 'SPECIAL::UNDEFINED'; $null_value = 'SPECIAL::NULL';
$test_cases = array( 'abc' => 'abc', $null_value => $undefined, '' => $undefined,
// Strange, unexpected cases: 144 => '144', );
foreach ($test_cases as $input => $expected) { switch ($input) { case $undefined: unset($_SERVER['HTTP_X_FORWARDED_FOR']); break;
case $null_value: $_SERVER['HTTP_X_FORWARDED_FOR'] = null; break;
default: $_SERVER['HTTP_X_FORWARDED_FOR'] = $input; break; }
unset($_SERVER['REMOTE_ADDR']);
preamble_trust_x_forwarded_for_header();
if (!isset($_SERVER['REMOTE_ADDR'])) { if ($expected === $undefined) { // test pass continue; } else { $this->failTest("Failed for input {$input} - result is not defined!"); } }
$actual = $_SERVER['REMOTE_ADDR'];
if ($actual !== $expected) { var_dump($actual);
$this->failTest( "Failed for input {$input} - actual output is {$actual}"); }
}
}
private function failTest($message = null) { echo $message; echo "\n"; throw new Exception(); }
/** * Run all tests in this class. * * Return: True if all tests passed; False if any test failed. */ final public function run() { $reflection = new ReflectionClass($this); $methods = $reflection->getMethods();
$any_fail = false;
// Try to ensure that poorly-written tests which depend on execution order // (and are thus not properly isolated) will fail. shuffle($methods);
foreach ($methods as $method) { $name = $method->getName(); if (!preg_match('/^test/', $name)) { continue; }
try { call_user_func_array( array($this, $name), array()); echo "Test passed: {$name}\n"; } catch (Throwable $ex) { $any_fail = true; echo "Failed test: {$name}\n"; } } return !$any_fail; }
}
require_once dirname(__DIR__).'/preamble-utils.php';
$test_case = new PreambleUtilsTestCase();$good = $test_case->run();
if (!$good) { exit(3);}