Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/aphront/sink/__tests__/AphrontHTTPSinkTestCase.php
12256 views
1
<?php
2
3
final class AphrontHTTPSinkTestCase extends PhabricatorTestCase {
4
5
public function testHTTPSinkBasics() {
6
$sink = new AphrontIsolatedHTTPSink();
7
$sink->writeHTTPStatus(200);
8
$sink->writeHeaders(array(array('X-Test', 'test')));
9
$sink->writeData('test');
10
11
$this->assertEqual(200, $sink->getEmittedHTTPStatus());
12
$this->assertEqual(
13
array(array('X-Test', 'test')),
14
$sink->getEmittedHeaders());
15
$this->assertEqual('test', $sink->getEmittedData());
16
}
17
18
public function testHTTPSinkStatusCode() {
19
$input = $this->tryTestCaseMap(
20
array(
21
200 => true,
22
'201' => true,
23
1 => false,
24
1000 => false,
25
'apple' => false,
26
'' => false,
27
),
28
array($this, 'tryHTTPSinkStatusCode'));
29
}
30
31
protected function tryHTTPSinkStatusCode($input) {
32
$sink = new AphrontIsolatedHTTPSink();
33
$sink->writeHTTPStatus($input);
34
}
35
36
public function testHTTPSinkResponseSplitting() {
37
$input = $this->tryTestCaseMap(
38
array(
39
'test' => true,
40
"test\nx" => false,
41
"test\rx" => false,
42
"test\0x" => false,
43
),
44
array($this, 'tryHTTPSinkResponseSplitting'));
45
}
46
47
protected function tryHTTPSinkResponseSplitting($input) {
48
$sink = new AphrontIsolatedHTTPSink();
49
$sink->writeHeaders(array(array('X-Test', $input)));
50
}
51
52
public function testHTTPHeaderNames() {
53
$input = $this->tryTestCaseMap(
54
array(
55
'test' => true,
56
'test:' => false,
57
),
58
array($this, 'tryHTTPHeaderNames'));
59
}
60
61
protected function tryHTTPHeaderNames($input) {
62
$sink = new AphrontIsolatedHTTPSink();
63
$sink->writeHeaders(array(array($input, 'value')));
64
}
65
66
public function testJSONContentSniff() {
67
$response = id(new AphrontJSONResponse())
68
->setContent(
69
array(
70
'x' => '<iframe>',
71
));
72
$sink = new AphrontIsolatedHTTPSink();
73
$sink->writeResponse($response);
74
75
$this->assertEqual(
76
'for (;;);{"x":"\u003ciframe\u003e"}',
77
$sink->getEmittedData(),
78
pht(
79
'%s should prevent content-sniffing attacks.',
80
'JSONResponse'));
81
}
82
83
84
}
85
86