Merge pull request #15725 from nextcloud/backport/15714/stable15

[stable15] Check the actual status code for 204 and 304
This commit is contained in:
Roeland Jago Douma 2019-05-25 10:19:03 +02:00 committed by GitHub
commit bc44ae66f3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 11 deletions

View File

@ -149,7 +149,15 @@ class App {
* https://tools.ietf.org/html/rfc7230#section-3.3
* https://tools.ietf.org/html/rfc7230#section-3.3.2
*/
if ($httpHeaders !== Http::STATUS_NO_CONTENT && $httpHeaders !== Http::STATUS_NOT_MODIFIED) {
$emptyResponse = false;
if (preg_match('/^HTTP\/\d\.\d (\d{3}) .*$/', $httpHeaders, $matches)) {
$status = (int)$matches[1];
if ($status === Http::STATUS_NO_CONTENT || $status === Http::STATUS_NOT_MODIFIED) {
$emptyResponse = true;
}
}
if (!$emptyResponse) {
if ($response instanceof ICallbackResponse) {
$response->callback($io);
} else if (!is_null($output)) {

View File

@ -90,7 +90,7 @@ class AppTest extends \Test\TestCase {
public function testControllerNameAndMethodAreBeingPassed(){
$return = array(null, array(), array(), null, new Response());
$return = ['HTTP/2.0 200 OK', [], [], null, new Response()];
$this->dispatcher->expects($this->once())
->method('dispatch')
->with($this->equalTo($this->controller),
@ -130,7 +130,7 @@ class AppTest extends \Test\TestCase {
public function testOutputIsPrinted(){
$return = [Http::STATUS_OK, [], [], $this->output, new Response()];
$return = ['HTTP/2.0 200 OK', [], [], $this->output, new Response()];
$this->dispatcher->expects($this->once())
->method('dispatch')
->with($this->equalTo($this->controller),
@ -144,16 +144,15 @@ class AppTest extends \Test\TestCase {
public function dataNoOutput() {
return [
[Http::STATUS_NO_CONTENT],
[Http::STATUS_NOT_MODIFIED],
['HTTP/2.0 204 No content'],
['HTTP/2.0 304 Not modified'],
];
}
/**
* @dataProvider dataNoOutput
* @param int $statusCode
*/
public function testNoOutput($statusCode) {
public function testNoOutput(string $statusCode) {
$return = [$statusCode, [], [], $this->output, new Response()];
$this->dispatcher->expects($this->once())
->method('dispatch')
@ -173,7 +172,7 @@ class AppTest extends \Test\TestCase {
$mock = $this->getMockBuilder('OCP\AppFramework\Http\ICallbackResponse')
->getMock();
$return = [null, [], [], $this->output, $mock];
$return = ['HTTP/2.0 200 OK', [], [], $this->output, $mock];
$this->dispatcher->expects($this->once())
->method('dispatch')
->with($this->equalTo($this->controller),
@ -188,7 +187,7 @@ class AppTest extends \Test\TestCase {
$this->container['AppName'] = 'core';
$this->container['OC\Core\Controller\Foo'] = $this->controller;
$return = array(null, array(), array(), null, new Response());
$return = ['HTTP/2.0 200 OK', [], [], null, new Response()];
$this->dispatcher->expects($this->once())
->method('dispatch')
->with($this->equalTo($this->controller),
@ -205,7 +204,7 @@ class AppTest extends \Test\TestCase {
$this->container['AppName'] = 'settings';
$this->container['OC\Settings\Controller\Foo'] = $this->controller;
$return = array(null, array(), array(), null, new Response());
$return = ['HTTP/2.0 200 OK', [], [], null, new Response()];
$this->dispatcher->expects($this->once())
->method('dispatch')
->with($this->equalTo($this->controller),
@ -222,7 +221,7 @@ class AppTest extends \Test\TestCase {
$this->container['AppName'] = 'bar';
$this->container['OCA\Bar\Controller\Foo'] = $this->controller;
$return = array(null, array(), array(), null, new Response());
$return = ['HTTP/2.0 200 OK', [], [], null, new Response()];
$this->dispatcher->expects($this->once())
->method('dispatch')
->with($this->equalTo($this->controller),