1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\DAV; 4*a1a3b679SAndreas Boehler 5*a1a3b679SAndreas Boehleruse Sabre\HTTP; 6*a1a3b679SAndreas Boehler 7*a1a3b679SAndreas Boehlerclass ServerSimpleTest extends AbstractServer{ 8*a1a3b679SAndreas Boehler 9*a1a3b679SAndreas Boehler function testConstructArray() { 10*a1a3b679SAndreas Boehler 11*a1a3b679SAndreas Boehler $nodes = [ 12*a1a3b679SAndreas Boehler new SimpleCollection('hello') 13*a1a3b679SAndreas Boehler ]; 14*a1a3b679SAndreas Boehler 15*a1a3b679SAndreas Boehler $server = new Server($nodes); 16*a1a3b679SAndreas Boehler $this->assertEquals($nodes[0], $server->tree->getNodeForPath('hello')); 17*a1a3b679SAndreas Boehler 18*a1a3b679SAndreas Boehler } 19*a1a3b679SAndreas Boehler 20*a1a3b679SAndreas Boehler /** 21*a1a3b679SAndreas Boehler * @expectedException Sabre\DAV\Exception 22*a1a3b679SAndreas Boehler */ 23*a1a3b679SAndreas Boehler function testConstructIncorrectObj() { 24*a1a3b679SAndreas Boehler 25*a1a3b679SAndreas Boehler $nodes = [ 26*a1a3b679SAndreas Boehler new SimpleCollection('hello'), 27*a1a3b679SAndreas Boehler new \STDClass(), 28*a1a3b679SAndreas Boehler ]; 29*a1a3b679SAndreas Boehler 30*a1a3b679SAndreas Boehler $server = new Server($nodes); 31*a1a3b679SAndreas Boehler 32*a1a3b679SAndreas Boehler } 33*a1a3b679SAndreas Boehler 34*a1a3b679SAndreas Boehler /** 35*a1a3b679SAndreas Boehler * @expectedException Sabre\DAV\Exception 36*a1a3b679SAndreas Boehler */ 37*a1a3b679SAndreas Boehler function testConstructInvalidArg() { 38*a1a3b679SAndreas Boehler 39*a1a3b679SAndreas Boehler $server = new Server(1); 40*a1a3b679SAndreas Boehler 41*a1a3b679SAndreas Boehler } 42*a1a3b679SAndreas Boehler 43*a1a3b679SAndreas Boehler function testOptions() { 44*a1a3b679SAndreas Boehler 45*a1a3b679SAndreas Boehler $request = new HTTP\Request('OPTIONS', '/'); 46*a1a3b679SAndreas Boehler $this->server->httpRequest = $request; 47*a1a3b679SAndreas Boehler $this->server->exec(); 48*a1a3b679SAndreas Boehler 49*a1a3b679SAndreas Boehler $this->assertEquals([ 50*a1a3b679SAndreas Boehler 'DAV' => ['1, 3, extended-mkcol'], 51*a1a3b679SAndreas Boehler 'MS-Author-Via' => ['DAV'], 52*a1a3b679SAndreas Boehler 'Allow' => ['OPTIONS, GET, HEAD, DELETE, PROPFIND, PUT, PROPPATCH, COPY, MOVE, REPORT'], 53*a1a3b679SAndreas Boehler 'Accept-Ranges' => ['bytes'], 54*a1a3b679SAndreas Boehler 'Content-Length' => ['0'], 55*a1a3b679SAndreas Boehler 'X-Sabre-Version' => [Version::VERSION], 56*a1a3b679SAndreas Boehler ],$this->response->getHeaders()); 57*a1a3b679SAndreas Boehler 58*a1a3b679SAndreas Boehler $this->assertEquals(200, $this->response->status); 59*a1a3b679SAndreas Boehler $this->assertEquals('', $this->response->body); 60*a1a3b679SAndreas Boehler 61*a1a3b679SAndreas Boehler } 62*a1a3b679SAndreas Boehler 63*a1a3b679SAndreas Boehler function testOptionsUnmapped() { 64*a1a3b679SAndreas Boehler 65*a1a3b679SAndreas Boehler $request = new HTTP\Request('OPTIONS', '/unmapped'); 66*a1a3b679SAndreas Boehler $this->server->httpRequest = $request; 67*a1a3b679SAndreas Boehler 68*a1a3b679SAndreas Boehler $this->server->exec(); 69*a1a3b679SAndreas Boehler 70*a1a3b679SAndreas Boehler $this->assertEquals([ 71*a1a3b679SAndreas Boehler 'DAV' => ['1, 3, extended-mkcol'], 72*a1a3b679SAndreas Boehler 'MS-Author-Via' => ['DAV'], 73*a1a3b679SAndreas Boehler 'Allow' => ['OPTIONS, GET, HEAD, DELETE, PROPFIND, PUT, PROPPATCH, COPY, MOVE, REPORT, MKCOL'], 74*a1a3b679SAndreas Boehler 'Accept-Ranges' => ['bytes'], 75*a1a3b679SAndreas Boehler 'Content-Length' => ['0'], 76*a1a3b679SAndreas Boehler 'X-Sabre-Version' => [Version::VERSION], 77*a1a3b679SAndreas Boehler ],$this->response->getHeaders()); 78*a1a3b679SAndreas Boehler 79*a1a3b679SAndreas Boehler $this->assertEquals(200, $this->response->status); 80*a1a3b679SAndreas Boehler $this->assertEquals('', $this->response->body); 81*a1a3b679SAndreas Boehler 82*a1a3b679SAndreas Boehler } 83*a1a3b679SAndreas Boehler 84*a1a3b679SAndreas Boehler function testNonExistantMethod() { 85*a1a3b679SAndreas Boehler 86*a1a3b679SAndreas Boehler $serverVars = [ 87*a1a3b679SAndreas Boehler 'REQUEST_URI' => '/', 88*a1a3b679SAndreas Boehler 'REQUEST_METHOD' => 'BLABLA', 89*a1a3b679SAndreas Boehler ]; 90*a1a3b679SAndreas Boehler 91*a1a3b679SAndreas Boehler $request = HTTP\Sapi::createFromServerArray($serverVars); 92*a1a3b679SAndreas Boehler $this->server->httpRequest = ($request); 93*a1a3b679SAndreas Boehler $this->server->exec(); 94*a1a3b679SAndreas Boehler 95*a1a3b679SAndreas Boehler $this->assertEquals([ 96*a1a3b679SAndreas Boehler 'X-Sabre-Version' => [Version::VERSION], 97*a1a3b679SAndreas Boehler 'Content-Type' => ['application/xml; charset=utf-8'], 98*a1a3b679SAndreas Boehler ],$this->response->getHeaders()); 99*a1a3b679SAndreas Boehler 100*a1a3b679SAndreas Boehler $this->assertEquals(501, $this->response->status); 101*a1a3b679SAndreas Boehler 102*a1a3b679SAndreas Boehler 103*a1a3b679SAndreas Boehler } 104*a1a3b679SAndreas Boehler 105*a1a3b679SAndreas Boehler function testBaseUri() { 106*a1a3b679SAndreas Boehler 107*a1a3b679SAndreas Boehler $serverVars = [ 108*a1a3b679SAndreas Boehler 'REQUEST_URI' => '/blabla/test.txt', 109*a1a3b679SAndreas Boehler 'REQUEST_METHOD' => 'GET', 110*a1a3b679SAndreas Boehler ]; 111*a1a3b679SAndreas Boehler $filename = $this->tempDir . '/test.txt'; 112*a1a3b679SAndreas Boehler 113*a1a3b679SAndreas Boehler $request = HTTP\Sapi::createFromServerArray($serverVars); 114*a1a3b679SAndreas Boehler $this->server->setBaseUri('/blabla/'); 115*a1a3b679SAndreas Boehler $this->assertEquals('/blabla/',$this->server->getBaseUri()); 116*a1a3b679SAndreas Boehler $this->server->httpRequest = ($request); 117*a1a3b679SAndreas Boehler $this->server->exec(); 118*a1a3b679SAndreas Boehler 119*a1a3b679SAndreas Boehler $this->assertEquals([ 120*a1a3b679SAndreas Boehler 'X-Sabre-Version' => [Version::VERSION], 121*a1a3b679SAndreas Boehler 'Content-Type' => ['application/octet-stream'], 122*a1a3b679SAndreas Boehler 'Content-Length' => [13], 123*a1a3b679SAndreas Boehler 'Last-Modified' => [HTTP\Util::toHTTPDate(new \DateTime('@' . filemtime($this->tempDir . '/test.txt')))], 124*a1a3b679SAndreas Boehler 'ETag' => ['"' . sha1(fileinode($filename) . filesize($filename) . filemtime($filename)) . '"'], 125*a1a3b679SAndreas Boehler ], 126*a1a3b679SAndreas Boehler $this->response->getHeaders() 127*a1a3b679SAndreas Boehler ); 128*a1a3b679SAndreas Boehler 129*a1a3b679SAndreas Boehler $this->assertEquals(200, $this->response->status); 130*a1a3b679SAndreas Boehler $this->assertEquals('Test contents', stream_get_contents($this->response->body)); 131*a1a3b679SAndreas Boehler 132*a1a3b679SAndreas Boehler } 133*a1a3b679SAndreas Boehler 134*a1a3b679SAndreas Boehler function testBaseUriAddSlash() { 135*a1a3b679SAndreas Boehler 136*a1a3b679SAndreas Boehler $tests = [ 137*a1a3b679SAndreas Boehler '/' => '/', 138*a1a3b679SAndreas Boehler '/foo' => '/foo/', 139*a1a3b679SAndreas Boehler '/foo/' => '/foo/', 140*a1a3b679SAndreas Boehler '/foo/bar' => '/foo/bar/', 141*a1a3b679SAndreas Boehler '/foo/bar/' => '/foo/bar/', 142*a1a3b679SAndreas Boehler ]; 143*a1a3b679SAndreas Boehler 144*a1a3b679SAndreas Boehler foreach($tests as $test=>$result) { 145*a1a3b679SAndreas Boehler $this->server->setBaseUri($test); 146*a1a3b679SAndreas Boehler 147*a1a3b679SAndreas Boehler $this->assertEquals($result, $this->server->getBaseUri()); 148*a1a3b679SAndreas Boehler 149*a1a3b679SAndreas Boehler } 150*a1a3b679SAndreas Boehler 151*a1a3b679SAndreas Boehler } 152*a1a3b679SAndreas Boehler 153*a1a3b679SAndreas Boehler function testCalculateUri() { 154*a1a3b679SAndreas Boehler 155*a1a3b679SAndreas Boehler $uris = [ 156*a1a3b679SAndreas Boehler 'http://www.example.org/root/somepath', 157*a1a3b679SAndreas Boehler '/root/somepath', 158*a1a3b679SAndreas Boehler '/root/somepath/', 159*a1a3b679SAndreas Boehler ]; 160*a1a3b679SAndreas Boehler 161*a1a3b679SAndreas Boehler $this->server->setBaseUri('/root/'); 162*a1a3b679SAndreas Boehler 163*a1a3b679SAndreas Boehler foreach($uris as $uri) { 164*a1a3b679SAndreas Boehler 165*a1a3b679SAndreas Boehler $this->assertEquals('somepath',$this->server->calculateUri($uri)); 166*a1a3b679SAndreas Boehler 167*a1a3b679SAndreas Boehler } 168*a1a3b679SAndreas Boehler 169*a1a3b679SAndreas Boehler $this->server->setBaseUri('/root'); 170*a1a3b679SAndreas Boehler 171*a1a3b679SAndreas Boehler foreach($uris as $uri) { 172*a1a3b679SAndreas Boehler 173*a1a3b679SAndreas Boehler $this->assertEquals('somepath',$this->server->calculateUri($uri)); 174*a1a3b679SAndreas Boehler 175*a1a3b679SAndreas Boehler } 176*a1a3b679SAndreas Boehler 177*a1a3b679SAndreas Boehler $this->assertEquals('', $this->server->calculateUri('/root')); 178*a1a3b679SAndreas Boehler 179*a1a3b679SAndreas Boehler } 180*a1a3b679SAndreas Boehler 181*a1a3b679SAndreas Boehler function testCalculateUriSpecialChars() { 182*a1a3b679SAndreas Boehler 183*a1a3b679SAndreas Boehler $uris = [ 184*a1a3b679SAndreas Boehler 'http://www.example.org/root/%C3%A0fo%C3%B3', 185*a1a3b679SAndreas Boehler '/root/%C3%A0fo%C3%B3', 186*a1a3b679SAndreas Boehler '/root/%C3%A0fo%C3%B3/' 187*a1a3b679SAndreas Boehler ]; 188*a1a3b679SAndreas Boehler 189*a1a3b679SAndreas Boehler $this->server->setBaseUri('/root/'); 190*a1a3b679SAndreas Boehler 191*a1a3b679SAndreas Boehler foreach($uris as $uri) { 192*a1a3b679SAndreas Boehler 193*a1a3b679SAndreas Boehler $this->assertEquals("\xc3\xa0fo\xc3\xb3",$this->server->calculateUri($uri)); 194*a1a3b679SAndreas Boehler 195*a1a3b679SAndreas Boehler } 196*a1a3b679SAndreas Boehler 197*a1a3b679SAndreas Boehler $this->server->setBaseUri('/root'); 198*a1a3b679SAndreas Boehler 199*a1a3b679SAndreas Boehler foreach($uris as $uri) { 200*a1a3b679SAndreas Boehler 201*a1a3b679SAndreas Boehler $this->assertEquals("\xc3\xa0fo\xc3\xb3",$this->server->calculateUri($uri)); 202*a1a3b679SAndreas Boehler 203*a1a3b679SAndreas Boehler } 204*a1a3b679SAndreas Boehler 205*a1a3b679SAndreas Boehler $this->server->setBaseUri('/'); 206*a1a3b679SAndreas Boehler 207*a1a3b679SAndreas Boehler foreach($uris as $uri) { 208*a1a3b679SAndreas Boehler 209*a1a3b679SAndreas Boehler $this->assertEquals("root/\xc3\xa0fo\xc3\xb3",$this->server->calculateUri($uri)); 210*a1a3b679SAndreas Boehler 211*a1a3b679SAndreas Boehler } 212*a1a3b679SAndreas Boehler 213*a1a3b679SAndreas Boehler } 214*a1a3b679SAndreas Boehler 215*a1a3b679SAndreas Boehler /** 216*a1a3b679SAndreas Boehler * @expectedException \Sabre\DAV\Exception\Forbidden 217*a1a3b679SAndreas Boehler */ 218*a1a3b679SAndreas Boehler function testCalculateUriBreakout() { 219*a1a3b679SAndreas Boehler 220*a1a3b679SAndreas Boehler $uri = '/path1/'; 221*a1a3b679SAndreas Boehler 222*a1a3b679SAndreas Boehler $this->server->setBaseUri('/path2/'); 223*a1a3b679SAndreas Boehler $this->server->calculateUri($uri); 224*a1a3b679SAndreas Boehler 225*a1a3b679SAndreas Boehler } 226*a1a3b679SAndreas Boehler 227*a1a3b679SAndreas Boehler /** 228*a1a3b679SAndreas Boehler */ 229*a1a3b679SAndreas Boehler function testGuessBaseUri() { 230*a1a3b679SAndreas Boehler 231*a1a3b679SAndreas Boehler $serverVars = [ 232*a1a3b679SAndreas Boehler 'REQUEST_URI' => '/index.php/root', 233*a1a3b679SAndreas Boehler 'PATH_INFO' => '/root', 234*a1a3b679SAndreas Boehler ]; 235*a1a3b679SAndreas Boehler 236*a1a3b679SAndreas Boehler $httpRequest = HTTP\Sapi::createFromServerArray($serverVars); 237*a1a3b679SAndreas Boehler $server = new Server(); 238*a1a3b679SAndreas Boehler $server->httpRequest = $httpRequest; 239*a1a3b679SAndreas Boehler 240*a1a3b679SAndreas Boehler $this->assertEquals('/index.php/', $server->guessBaseUri()); 241*a1a3b679SAndreas Boehler 242*a1a3b679SAndreas Boehler } 243*a1a3b679SAndreas Boehler 244*a1a3b679SAndreas Boehler /** 245*a1a3b679SAndreas Boehler * @depends testGuessBaseUri 246*a1a3b679SAndreas Boehler */ 247*a1a3b679SAndreas Boehler function testGuessBaseUriPercentEncoding() { 248*a1a3b679SAndreas Boehler 249*a1a3b679SAndreas Boehler $serverVars = [ 250*a1a3b679SAndreas Boehler 'REQUEST_URI' => '/index.php/dir/path2/path%20with%20spaces', 251*a1a3b679SAndreas Boehler 'PATH_INFO' => '/dir/path2/path with spaces', 252*a1a3b679SAndreas Boehler ]; 253*a1a3b679SAndreas Boehler 254*a1a3b679SAndreas Boehler $httpRequest = HTTP\Sapi::createFromServerArray($serverVars); 255*a1a3b679SAndreas Boehler $server = new Server(); 256*a1a3b679SAndreas Boehler $server->httpRequest = $httpRequest; 257*a1a3b679SAndreas Boehler 258*a1a3b679SAndreas Boehler $this->assertEquals('/index.php/', $server->guessBaseUri()); 259*a1a3b679SAndreas Boehler 260*a1a3b679SAndreas Boehler } 261*a1a3b679SAndreas Boehler 262*a1a3b679SAndreas Boehler /** 263*a1a3b679SAndreas Boehler * @depends testGuessBaseUri 264*a1a3b679SAndreas Boehler */ 265*a1a3b679SAndreas Boehler /* 266*a1a3b679SAndreas Boehler function testGuessBaseUriPercentEncoding2() { 267*a1a3b679SAndreas Boehler 268*a1a3b679SAndreas Boehler $this->markTestIncomplete('This behaviour is not yet implemented'); 269*a1a3b679SAndreas Boehler $serverVars = [ 270*a1a3b679SAndreas Boehler 'REQUEST_URI' => '/some%20directory+mixed/index.php/dir/path2/path%20with%20spaces', 271*a1a3b679SAndreas Boehler 'PATH_INFO' => '/dir/path2/path with spaces', 272*a1a3b679SAndreas Boehler ]; 273*a1a3b679SAndreas Boehler 274*a1a3b679SAndreas Boehler $httpRequest = HTTP\Sapi::createFromServerArray($serverVars); 275*a1a3b679SAndreas Boehler $server = new Server(); 276*a1a3b679SAndreas Boehler $server->httpRequest = $httpRequest; 277*a1a3b679SAndreas Boehler 278*a1a3b679SAndreas Boehler $this->assertEquals('/some%20directory+mixed/index.php/', $server->guessBaseUri()); 279*a1a3b679SAndreas Boehler 280*a1a3b679SAndreas Boehler }*/ 281*a1a3b679SAndreas Boehler 282*a1a3b679SAndreas Boehler function testGuessBaseUri2() { 283*a1a3b679SAndreas Boehler 284*a1a3b679SAndreas Boehler $serverVars = [ 285*a1a3b679SAndreas Boehler 'REQUEST_URI' => '/index.php/root/', 286*a1a3b679SAndreas Boehler 'PATH_INFO' => '/root/', 287*a1a3b679SAndreas Boehler ]; 288*a1a3b679SAndreas Boehler 289*a1a3b679SAndreas Boehler $httpRequest = HTTP\Sapi::createFromServerArray($serverVars); 290*a1a3b679SAndreas Boehler $server = new Server(); 291*a1a3b679SAndreas Boehler $server->httpRequest = $httpRequest; 292*a1a3b679SAndreas Boehler 293*a1a3b679SAndreas Boehler $this->assertEquals('/index.php/', $server->guessBaseUri()); 294*a1a3b679SAndreas Boehler 295*a1a3b679SAndreas Boehler } 296*a1a3b679SAndreas Boehler 297*a1a3b679SAndreas Boehler function testGuessBaseUriNoPathInfo() { 298*a1a3b679SAndreas Boehler 299*a1a3b679SAndreas Boehler $serverVars = [ 300*a1a3b679SAndreas Boehler 'REQUEST_URI' => '/index.php/root', 301*a1a3b679SAndreas Boehler ]; 302*a1a3b679SAndreas Boehler 303*a1a3b679SAndreas Boehler $httpRequest = HTTP\Sapi::createFromServerArray($serverVars); 304*a1a3b679SAndreas Boehler $server = new Server(); 305*a1a3b679SAndreas Boehler $server->httpRequest = $httpRequest; 306*a1a3b679SAndreas Boehler 307*a1a3b679SAndreas Boehler $this->assertEquals('/', $server->guessBaseUri()); 308*a1a3b679SAndreas Boehler 309*a1a3b679SAndreas Boehler } 310*a1a3b679SAndreas Boehler 311*a1a3b679SAndreas Boehler function testGuessBaseUriNoPathInfo2() { 312*a1a3b679SAndreas Boehler 313*a1a3b679SAndreas Boehler $serverVars = [ 314*a1a3b679SAndreas Boehler 'REQUEST_URI' => '/a/b/c/test.php', 315*a1a3b679SAndreas Boehler ]; 316*a1a3b679SAndreas Boehler 317*a1a3b679SAndreas Boehler $httpRequest = HTTP\Sapi::createFromServerArray($serverVars); 318*a1a3b679SAndreas Boehler $server = new Server(); 319*a1a3b679SAndreas Boehler $server->httpRequest = $httpRequest; 320*a1a3b679SAndreas Boehler 321*a1a3b679SAndreas Boehler $this->assertEquals('/', $server->guessBaseUri()); 322*a1a3b679SAndreas Boehler 323*a1a3b679SAndreas Boehler } 324*a1a3b679SAndreas Boehler 325*a1a3b679SAndreas Boehler 326*a1a3b679SAndreas Boehler /** 327*a1a3b679SAndreas Boehler * @depends testGuessBaseUri 328*a1a3b679SAndreas Boehler */ 329*a1a3b679SAndreas Boehler function testGuessBaseUriQueryString() { 330*a1a3b679SAndreas Boehler 331*a1a3b679SAndreas Boehler $serverVars = [ 332*a1a3b679SAndreas Boehler 'REQUEST_URI' => '/index.php/root?query_string=blabla', 333*a1a3b679SAndreas Boehler 'PATH_INFO' => '/root', 334*a1a3b679SAndreas Boehler ]; 335*a1a3b679SAndreas Boehler 336*a1a3b679SAndreas Boehler $httpRequest = HTTP\Sapi::createFromServerArray($serverVars); 337*a1a3b679SAndreas Boehler $server = new Server(); 338*a1a3b679SAndreas Boehler $server->httpRequest = $httpRequest; 339*a1a3b679SAndreas Boehler 340*a1a3b679SAndreas Boehler $this->assertEquals('/index.php/', $server->guessBaseUri()); 341*a1a3b679SAndreas Boehler 342*a1a3b679SAndreas Boehler } 343*a1a3b679SAndreas Boehler 344*a1a3b679SAndreas Boehler /** 345*a1a3b679SAndreas Boehler * @depends testGuessBaseUri 346*a1a3b679SAndreas Boehler * @expectedException \Sabre\DAV\Exception 347*a1a3b679SAndreas Boehler */ 348*a1a3b679SAndreas Boehler function testGuessBaseUriBadConfig() { 349*a1a3b679SAndreas Boehler 350*a1a3b679SAndreas Boehler $serverVars = [ 351*a1a3b679SAndreas Boehler 'REQUEST_URI' => '/index.php/root/heyyy', 352*a1a3b679SAndreas Boehler 'PATH_INFO' => '/root', 353*a1a3b679SAndreas Boehler ]; 354*a1a3b679SAndreas Boehler 355*a1a3b679SAndreas Boehler $httpRequest = HTTP\Sapi::createFromServerArray($serverVars); 356*a1a3b679SAndreas Boehler $server = new Server(); 357*a1a3b679SAndreas Boehler $server->httpRequest = $httpRequest; 358*a1a3b679SAndreas Boehler 359*a1a3b679SAndreas Boehler $server->guessBaseUri(); 360*a1a3b679SAndreas Boehler 361*a1a3b679SAndreas Boehler } 362*a1a3b679SAndreas Boehler 363*a1a3b679SAndreas Boehler function testTriggerException() { 364*a1a3b679SAndreas Boehler 365*a1a3b679SAndreas Boehler $serverVars = [ 366*a1a3b679SAndreas Boehler 'REQUEST_URI' => '/', 367*a1a3b679SAndreas Boehler 'REQUEST_METHOD' => 'FOO', 368*a1a3b679SAndreas Boehler ]; 369*a1a3b679SAndreas Boehler 370*a1a3b679SAndreas Boehler $httpRequest = HTTP\Sapi::createFromServerArray($serverVars); 371*a1a3b679SAndreas Boehler $this->server->httpRequest = $httpRequest; 372*a1a3b679SAndreas Boehler $this->server->on('beforeMethod', [$this,'exceptionTrigger']); 373*a1a3b679SAndreas Boehler $this->server->exec(); 374*a1a3b679SAndreas Boehler 375*a1a3b679SAndreas Boehler $this->assertEquals([ 376*a1a3b679SAndreas Boehler 'Content-Type' => ['application/xml; charset=utf-8'], 377*a1a3b679SAndreas Boehler ],$this->response->getHeaders()); 378*a1a3b679SAndreas Boehler 379*a1a3b679SAndreas Boehler $this->assertEquals(500, $this->response->status); 380*a1a3b679SAndreas Boehler 381*a1a3b679SAndreas Boehler } 382*a1a3b679SAndreas Boehler 383*a1a3b679SAndreas Boehler function exceptionTrigger() { 384*a1a3b679SAndreas Boehler 385*a1a3b679SAndreas Boehler throw new Exception('Hola'); 386*a1a3b679SAndreas Boehler 387*a1a3b679SAndreas Boehler } 388*a1a3b679SAndreas Boehler 389*a1a3b679SAndreas Boehler function testReportNotFound() { 390*a1a3b679SAndreas Boehler 391*a1a3b679SAndreas Boehler $serverVars = [ 392*a1a3b679SAndreas Boehler 'REQUEST_URI' => '/', 393*a1a3b679SAndreas Boehler 'REQUEST_METHOD' => 'REPORT', 394*a1a3b679SAndreas Boehler ]; 395*a1a3b679SAndreas Boehler 396*a1a3b679SAndreas Boehler $request = HTTP\Sapi::createFromServerArray($serverVars); 397*a1a3b679SAndreas Boehler $this->server->httpRequest = ($request); 398*a1a3b679SAndreas Boehler $this->server->httpRequest->setBody('<?xml version="1.0"?><bla:myreport xmlns:bla="http://www.rooftopsolutions.nl/NS"></bla:myreport>'); 399*a1a3b679SAndreas Boehler $this->server->exec(); 400*a1a3b679SAndreas Boehler 401*a1a3b679SAndreas Boehler $this->assertEquals([ 402*a1a3b679SAndreas Boehler 'X-Sabre-Version' => [Version::VERSION], 403*a1a3b679SAndreas Boehler 'Content-Type' => ['application/xml; charset=utf-8'], 404*a1a3b679SAndreas Boehler ], 405*a1a3b679SAndreas Boehler $this->response->getHeaders() 406*a1a3b679SAndreas Boehler ); 407*a1a3b679SAndreas Boehler 408*a1a3b679SAndreas Boehler $this->assertEquals(415, $this->response->status, 'We got an incorrect status back. Full response body follows: ' . $this->response->body); 409*a1a3b679SAndreas Boehler 410*a1a3b679SAndreas Boehler } 411*a1a3b679SAndreas Boehler 412*a1a3b679SAndreas Boehler function testReportIntercepted() { 413*a1a3b679SAndreas Boehler 414*a1a3b679SAndreas Boehler $serverVars = [ 415*a1a3b679SAndreas Boehler 'REQUEST_URI' => '/', 416*a1a3b679SAndreas Boehler 'REQUEST_METHOD' => 'REPORT', 417*a1a3b679SAndreas Boehler ]; 418*a1a3b679SAndreas Boehler 419*a1a3b679SAndreas Boehler $request = HTTP\Sapi::createFromServerArray($serverVars); 420*a1a3b679SAndreas Boehler $this->server->httpRequest = ($request); 421*a1a3b679SAndreas Boehler $this->server->httpRequest->setBody('<?xml version="1.0"?><bla:myreport xmlns:bla="http://www.rooftopsolutions.nl/NS"></bla:myreport>'); 422*a1a3b679SAndreas Boehler $this->server->on('report', [$this,'reportHandler']); 423*a1a3b679SAndreas Boehler $this->server->exec(); 424*a1a3b679SAndreas Boehler 425*a1a3b679SAndreas Boehler $this->assertEquals([ 426*a1a3b679SAndreas Boehler 'X-Sabre-Version' => [Version::VERSION], 427*a1a3b679SAndreas Boehler 'testheader' => ['testvalue'], 428*a1a3b679SAndreas Boehler ], 429*a1a3b679SAndreas Boehler $this->response->getHeaders() 430*a1a3b679SAndreas Boehler ); 431*a1a3b679SAndreas Boehler 432*a1a3b679SAndreas Boehler $this->assertEquals(418, $this->response->status,'We got an incorrect status back. Full response body follows: ' . $this->response->body); 433*a1a3b679SAndreas Boehler 434*a1a3b679SAndreas Boehler } 435*a1a3b679SAndreas Boehler 436*a1a3b679SAndreas Boehler function reportHandler($reportName) { 437*a1a3b679SAndreas Boehler 438*a1a3b679SAndreas Boehler if ($reportName=='{http://www.rooftopsolutions.nl/NS}myreport') { 439*a1a3b679SAndreas Boehler $this->server->httpResponse->setStatus(418); 440*a1a3b679SAndreas Boehler $this->server->httpResponse->setHeader('testheader','testvalue'); 441*a1a3b679SAndreas Boehler return false; 442*a1a3b679SAndreas Boehler } 443*a1a3b679SAndreas Boehler else return; 444*a1a3b679SAndreas Boehler 445*a1a3b679SAndreas Boehler } 446*a1a3b679SAndreas Boehler 447*a1a3b679SAndreas Boehler function testGetPropertiesForChildren() { 448*a1a3b679SAndreas Boehler 449*a1a3b679SAndreas Boehler $result = $this->server->getPropertiesForChildren('',[ 450*a1a3b679SAndreas Boehler '{DAV:}getcontentlength', 451*a1a3b679SAndreas Boehler ]); 452*a1a3b679SAndreas Boehler 453*a1a3b679SAndreas Boehler $expected = [ 454*a1a3b679SAndreas Boehler 'test.txt' => ['{DAV:}getcontentlength' => 13], 455*a1a3b679SAndreas Boehler 'dir/' => [], 456*a1a3b679SAndreas Boehler ]; 457*a1a3b679SAndreas Boehler 458*a1a3b679SAndreas Boehler $this->assertEquals($expected,$result); 459*a1a3b679SAndreas Boehler 460*a1a3b679SAndreas Boehler } 461*a1a3b679SAndreas Boehler 462*a1a3b679SAndreas Boehler} 463