From 953b64f3f2ee919243e737d4f5f775c32954c30e Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Mon, 14 Sep 2015 15:34:28 +0200 Subject: [PATCH 1/2] Add tests for downloading files over dav --- .../sabre/requesttest/downloadtest.php | 52 +++++++++++++++++++ .../lib/connector/sabre/requesttest/sapi.php | 10 +++- 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 tests/lib/connector/sabre/requesttest/downloadtest.php diff --git a/tests/lib/connector/sabre/requesttest/downloadtest.php b/tests/lib/connector/sabre/requesttest/downloadtest.php new file mode 100644 index 00000000000..67dd9f52308 --- /dev/null +++ b/tests/lib/connector/sabre/requesttest/downloadtest.php @@ -0,0 +1,52 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace Test\Connector\Sabre\RequestTest; + +use OCP\AppFramework\Http; +use OCP\Lock\ILockingProvider; + +class DownloadTest extends RequestTest { + public function testDownload() { + $user = $this->getUniqueID(); + $view = $this->setupUser($user, 'pass'); + + $view->file_put_contents('foo.txt', 'bar'); + + $response = $this->request($view, $user, 'pass', 'GET', '/foo.txt'); + $this->assertEquals(Http::STATUS_OK, $response->getStatus()); + $this->assertEquals(stream_get_contents($response->getBody()), 'bar'); + } + + /** + * @expectedException \OC\Connector\Sabre\Exception\FileLocked + */ + public function testDownloadWriteLocked() { + $user = $this->getUniqueID(); + $view = $this->setupUser($user, 'pass'); + + $view->file_put_contents('foo.txt', 'bar'); + + $view->lockFile('/foo.txt', ILockingProvider::LOCK_EXCLUSIVE); + + $this->request($view, $user, 'pass', 'GET', '/foo.txt', 'asd'); + } + + public function testDownloadReadLocked() { + $user = $this->getUniqueID(); + $view = $this->setupUser($user, 'pass'); + + $view->file_put_contents('foo.txt', 'bar'); + + $view->lockFile('/foo.txt', ILockingProvider::LOCK_SHARED); + + $response = $this->request($view, $user, 'pass', 'GET', '/foo.txt', 'asd'); + $this->assertEquals(Http::STATUS_OK, $response->getStatus()); + $this->assertEquals(stream_get_contents($response->getBody()), 'bar'); + } +} diff --git a/tests/lib/connector/sabre/requesttest/sapi.php b/tests/lib/connector/sabre/requesttest/sapi.php index 7072b8bd286..eda5d738f6f 100644 --- a/tests/lib/connector/sabre/requesttest/sapi.php +++ b/tests/lib/connector/sabre/requesttest/sapi.php @@ -41,7 +41,15 @@ class Sapi { * @return void */ public function sendResponse(Response $response) { - $this->response = $response; + // we need to copy the body since we close the source stream + $copyStream = fopen('php://temp', 'r+'); + if (is_string($response->getBody())) { + fwrite($copyStream, $response->getBody()); + } else { + stream_copy_to_stream($response->getBody(), $copyStream); + } + rewind($copyStream); + $this->response = new Response($response->getStatus(), $response->getHeaders(), $copyStream); } /** From 3cf4fc02f9c99ba523f384f3def9f04eac21a067 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Wed, 16 Sep 2015 15:27:22 +0200 Subject: [PATCH 2/2] fix tests with empty response body --- tests/lib/connector/sabre/requesttest/sapi.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/lib/connector/sabre/requesttest/sapi.php b/tests/lib/connector/sabre/requesttest/sapi.php index eda5d738f6f..cda9fdb70f5 100644 --- a/tests/lib/connector/sabre/requesttest/sapi.php +++ b/tests/lib/connector/sabre/requesttest/sapi.php @@ -45,7 +45,7 @@ class Sapi { $copyStream = fopen('php://temp', 'r+'); if (is_string($response->getBody())) { fwrite($copyStream, $response->getBody()); - } else { + } else if (is_resource($response->getBody())) { stream_copy_to_stream($response->getBody(), $copyStream); } rewind($copyStream);