Path: blob/master/src/aphront/sink/__tests__/AphrontHTTPSinkTestCase.php
12256 views
<?php12final class AphrontHTTPSinkTestCase extends PhabricatorTestCase {34public function testHTTPSinkBasics() {5$sink = new AphrontIsolatedHTTPSink();6$sink->writeHTTPStatus(200);7$sink->writeHeaders(array(array('X-Test', 'test')));8$sink->writeData('test');910$this->assertEqual(200, $sink->getEmittedHTTPStatus());11$this->assertEqual(12array(array('X-Test', 'test')),13$sink->getEmittedHeaders());14$this->assertEqual('test', $sink->getEmittedData());15}1617public function testHTTPSinkStatusCode() {18$input = $this->tryTestCaseMap(19array(20200 => true,21'201' => true,221 => false,231000 => false,24'apple' => false,25'' => false,26),27array($this, 'tryHTTPSinkStatusCode'));28}2930protected function tryHTTPSinkStatusCode($input) {31$sink = new AphrontIsolatedHTTPSink();32$sink->writeHTTPStatus($input);33}3435public function testHTTPSinkResponseSplitting() {36$input = $this->tryTestCaseMap(37array(38'test' => true,39"test\nx" => false,40"test\rx" => false,41"test\0x" => false,42),43array($this, 'tryHTTPSinkResponseSplitting'));44}4546protected function tryHTTPSinkResponseSplitting($input) {47$sink = new AphrontIsolatedHTTPSink();48$sink->writeHeaders(array(array('X-Test', $input)));49}5051public function testHTTPHeaderNames() {52$input = $this->tryTestCaseMap(53array(54'test' => true,55'test:' => false,56),57array($this, 'tryHTTPHeaderNames'));58}5960protected function tryHTTPHeaderNames($input) {61$sink = new AphrontIsolatedHTTPSink();62$sink->writeHeaders(array(array($input, 'value')));63}6465public function testJSONContentSniff() {66$response = id(new AphrontJSONResponse())67->setContent(68array(69'x' => '<iframe>',70));71$sink = new AphrontIsolatedHTTPSink();72$sink->writeResponse($response);7374$this->assertEqual(75'for (;;);{"x":"\u003ciframe\u003e"}',76$sink->getEmittedData(),77pht(78'%s should prevent content-sniffing attacks.',79'JSONResponse'));80}818283}848586