@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
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at recaptime-dev/main 262 lines 6.7 kB view raw
1<?php 2 3final class PhabricatorEnvTestCase extends PhabricatorTestCase { 4 5 public function testLocalURIForLink() { 6 $map = array( 7 array('/', true), 8 array('/D123', true), 9 array('/path/to/something/', true), 10 array("/path/to/\nHeader: x", false), 11 array('http://evil.com/', false), 12 array('//evil.com/evil/', false), 13 array('javascript:lol', false), 14 array(null, false), 15 array('', false), 16 array('/\\evil.com', false), 17 ); 18 19 foreach ($map as $entry) { 20 $this->assertEqual( 21 $entry[1], 22 PhabricatorEnv::isValidLocalURIForLink($entry[0]), 23 pht('Valid local resource: %s', $entry[0])); 24 } 25 } 26 27 public function testRemoteURIForLink() { 28 $map = array( 29 'http://example.com/' => true, 30 'derp://example.com/' => false, 31 'javascript:alert(1)' => false, 32 'http://127.0.0.1/' => true, 33 'http://169.254.169.254/latest/meta-data/hostname' => true, 34 ); 35 36 foreach ($map as $uri => $expect) { 37 $this->assertEqual( 38 $expect, 39 PhabricatorEnv::isValidRemoteURIForLink($uri), 40 pht('Valid linkable remote URI: %s', $uri)); 41 } 42 } 43 44 public function testRemoteURIForFetch() { 45 $map = array( 46 'http://example.com/' => true, 47 48 // No domain or protocol. 49 '' => false, 50 51 // No domain. 52 'http://' => false, 53 54 // No protocol. 55 'evil.com' => false, 56 57 // No protocol. 58 '//evil.com' => false, 59 60 // Bad protocol. 61 'javascript://evil.com/' => false, 62 'file:///etc/shadow' => false, 63 64 // Unresolvable hostname. 65 'http://u1VcxwUp368SIFzl7rkWWg23KM5JPB2kTHHngxjXCQc.zzz/' => false, 66 67 // Domains explicitly in blacklisted IP space. 68 'http://127.0.0.1/' => false, 69 'http://169.254.169.254/latest/meta-data/hostname' => false, 70 71 // Domain resolves into blacklisted IP space. 72 'http://localhost/' => false, 73 ); 74 75 $protocols = array('http', 'https'); 76 77 foreach ($map as $uri => $expect) { 78 $this->assertEqual( 79 $expect, 80 PhabricatorEnv::isValidRemoteURIForFetch($uri, $protocols), 81 pht('Valid fetchable remote URI: %s', $uri)); 82 } 83 } 84 85 public function testDictionarySource() { 86 $source = new PhabricatorConfigDictionarySource(array('x' => 1)); 87 88 $this->assertEqual( 89 array( 90 'x' => 1, 91 ), 92 $source->getKeys(array('x', 'z'))); 93 94 $source->setKeys(array('z' => 2)); 95 96 $this->assertEqual( 97 array( 98 'x' => 1, 99 'z' => 2, 100 ), 101 $source->getKeys(array('x', 'z'))); 102 103 $source->setKeys(array('x' => 3)); 104 105 $this->assertEqual( 106 array( 107 'x' => 3, 108 'z' => 2, 109 ), 110 $source->getKeys(array('x', 'z'))); 111 112 $source->deleteKeys(array('x')); 113 114 $this->assertEqual( 115 array( 116 'z' => 2, 117 ), 118 $source->getKeys(array('x', 'z'))); 119 } 120 121 public function testStackSource() { 122 $s1 = new PhabricatorConfigDictionarySource(array('x' => 1)); 123 $s2 = new PhabricatorConfigDictionarySource(array('x' => 2)); 124 125 $stack = new PhabricatorConfigStackSource(); 126 127 $this->assertEqual(array(), $stack->getKeys(array('x'))); 128 129 $stack->pushSource($s1); 130 $this->assertEqual(array('x' => 1), $stack->getKeys(array('x'))); 131 132 $stack->pushSource($s2); 133 $this->assertEqual(array('x' => 2), $stack->getKeys(array('x'))); 134 135 $stack->setKeys(array('x' => 3)); 136 $this->assertEqual(array('x' => 3), $stack->getKeys(array('x'))); 137 138 $stack->popSource(); 139 $this->assertEqual(array('x' => 1), $stack->getKeys(array('x'))); 140 141 $stack->popSource(); 142 $this->assertEqual(array(), $stack->getKeys(array('x'))); 143 144 $caught = null; 145 try { 146 $stack->popSource(); 147 } catch (Exception $ex) { 148 $caught = $ex; 149 } 150 151 $this->assertTrue($caught instanceof Exception); 152 } 153 154 public function testOverrides() { 155 $outer = PhabricatorEnv::beginScopedEnv(); 156 157 $outer->overrideEnvConfig('test.value', 1); 158 $this->assertEqual(1, PhabricatorEnv::getEnvConfig('test.value')); 159 160 $inner = PhabricatorEnv::beginScopedEnv(); 161 $inner->overrideEnvConfig('test.value', 2); 162 $this->assertEqual(2, PhabricatorEnv::getEnvConfig('test.value')); 163 if (phutil_is_hiphop_runtime()) { 164 $inner->__destruct(); 165 } 166 unset($inner); 167 168 $this->assertEqual(1, PhabricatorEnv::getEnvConfig('test.value')); 169 if (phutil_is_hiphop_runtime()) { 170 $outer->__destruct(); 171 } 172 unset($outer); 173 } 174 175 public function testOverrideOrder() { 176 $outer = PhabricatorEnv::beginScopedEnv(); 177 $inner = PhabricatorEnv::beginScopedEnv(); 178 179 $caught = null; 180 try { 181 $outer->__destruct(); 182 } catch (Exception $ex) { 183 $caught = $ex; 184 } 185 186 $this->assertTrue( 187 $caught instanceof Exception, 188 pht( 189 'Destroying a scoped environment which is not on the top of the '. 190 'stack should throw.')); 191 192 if (phutil_is_hiphop_runtime()) { 193 $inner->__destruct(); 194 } 195 unset($inner); 196 197 if (phutil_is_hiphop_runtime()) { 198 $outer->__destruct(); 199 } 200 unset($outer); 201 } 202 203 public function testGetEnvExceptions() { 204 $caught = null; 205 try { 206 PhabricatorEnv::getEnvConfig('not.a.real.config.option'); 207 } catch (Exception $ex) { 208 $caught = $ex; 209 } 210 $this->assertTrue($caught instanceof Exception); 211 212 $caught = null; 213 try { 214 PhabricatorEnv::getEnvConfig('test.value'); 215 } catch (Exception $ex) { 216 $caught = $ex; 217 } 218 $this->assertFalse($caught instanceof Exception); 219 } 220 221 public function testSelfURI() { 222 $base_uri = 'https://allowed.example.com/'; 223 224 $allowed_uris = array( 225 'https://old.example.com/', 226 ); 227 228 $env = PhabricatorEnv::beginScopedEnv(); 229 $env->overrideEnvConfig('phabricator.base-uri', $base_uri); 230 $env->overrideEnvConfig('phabricator.allowed-uris', $allowed_uris); 231 232 $map = array( 233 'https://allowed.example.com/' => true, 234 'https://allowed.example.com' => true, 235 'https://allowed.EXAMPLE.com' => true, 236 'http://allowed.example.com/' => true, 237 'https://allowed.example.com/path/to/resource.png' => true, 238 239 'https://old.example.com/' => true, 240 'https://old.example.com' => true, 241 'https://old.EXAMPLE.com' => true, 242 'http://old.example.com/' => true, 243 'https://old.example.com/path/to/resource.png' => true, 244 245 'https://other.example.com/' => false, 246 247 '/' => true, 248 '/self' => true, 249 '#self' => true, 250 '/#self' => true, 251 '/self/#self' => true, 252 ); 253 254 foreach ($map as $input => $expect) { 255 $this->assertEqual( 256 $expect, 257 PhabricatorEnv::isSelfURI($input), 258 pht('Is self URI? %s', $input)); 259 } 260 } 261 262}