2013-04-30 23:43:56 +00:00
|
|
|
<?php
|
2013-05-21 22:55:16 +00:00
|
|
|
/**
|
|
|
|
* ownCloud
|
|
|
|
*
|
|
|
|
* @author Florin Peter
|
|
|
|
* @copyright 2013 Florin Peter <owncloud@florin-peter.de>
|
|
|
|
*
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 3 of the License, or any later version.
|
|
|
|
*
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Affero General Public
|
|
|
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
2013-05-26 18:44:15 +00:00
|
|
|
require_once realpath(dirname(__FILE__) . '/../../../lib/base.php');
|
|
|
|
require_once realpath(dirname(__FILE__) . '/../lib/crypt.php');
|
|
|
|
require_once realpath(dirname(__FILE__) . '/../lib/keymanager.php');
|
|
|
|
require_once realpath(dirname(__FILE__) . '/../lib/proxy.php');
|
|
|
|
require_once realpath(dirname(__FILE__) . '/../lib/stream.php');
|
|
|
|
require_once realpath(dirname(__FILE__) . '/../lib/util.php');
|
|
|
|
require_once realpath(dirname(__FILE__) . '/../appinfo/app.php');
|
|
|
|
require_once realpath(dirname(__FILE__) . '/util.php');
|
2013-05-21 22:55:16 +00:00
|
|
|
|
|
|
|
use OCA\Encryption;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Class Test_Encryption_Stream
|
|
|
|
* @brief this class provide basic stream tests
|
|
|
|
*/
|
2013-05-26 18:44:15 +00:00
|
|
|
class Test_Encryption_Stream extends \PHPUnit_Framework_TestCase {
|
|
|
|
|
|
|
|
const TEST_ENCRYPTION_STREAM_USER1 = "test-stream-user1";
|
2013-05-21 22:55:16 +00:00
|
|
|
|
|
|
|
public $userId;
|
|
|
|
public $pass;
|
|
|
|
/**
|
|
|
|
* @var \OC_FilesystemView
|
|
|
|
*/
|
|
|
|
public $view;
|
|
|
|
public $dataShort;
|
|
|
|
public $stateFilesTrashbin;
|
|
|
|
|
2013-05-26 01:22:16 +00:00
|
|
|
public static function setUpBeforeClass() {
|
2013-05-21 22:55:16 +00:00
|
|
|
// reset backend
|
2013-05-26 01:22:16 +00:00
|
|
|
\OC_User::clearBackends();
|
2013-05-26 18:44:15 +00:00
|
|
|
\OC_User::useBackend('database');
|
2013-05-21 22:55:16 +00:00
|
|
|
|
2013-05-26 01:22:16 +00:00
|
|
|
// Filesystem related hooks
|
|
|
|
\OCA\Encryption\Helper::registerFilesystemHooks();
|
|
|
|
|
|
|
|
// clear and register hooks
|
|
|
|
\OC_FileProxy::clearProxies();
|
2013-05-26 18:44:15 +00:00
|
|
|
\OC_FileProxy::register(new OCA\Encryption\Proxy());
|
2013-05-26 01:22:16 +00:00
|
|
|
|
2013-05-26 18:44:15 +00:00
|
|
|
// create test user
|
|
|
|
\Test_Encryption_Util::loginHelper(\Test_Encryption_Stream::TEST_ENCRYPTION_STREAM_USER1, true);
|
2013-05-26 01:22:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function setUp() {
|
2013-05-21 22:55:16 +00:00
|
|
|
// set user id
|
2013-05-26 18:44:15 +00:00
|
|
|
\OC_User::setUserId(\Test_Encryption_Stream::TEST_ENCRYPTION_STREAM_USER1);
|
|
|
|
$this->userId = \Test_Encryption_Stream::TEST_ENCRYPTION_STREAM_USER1;
|
|
|
|
$this->pass = \Test_Encryption_Stream::TEST_ENCRYPTION_STREAM_USER1;
|
2013-05-21 22:55:16 +00:00
|
|
|
|
|
|
|
// init filesystem view
|
2013-05-26 18:44:15 +00:00
|
|
|
$this->view = new \OC_FilesystemView('/');
|
2013-05-21 22:55:16 +00:00
|
|
|
|
|
|
|
// init short data
|
|
|
|
$this->dataShort = 'hats';
|
|
|
|
|
|
|
|
// remember files_trashbin state
|
2013-05-26 18:44:15 +00:00
|
|
|
$this->stateFilesTrashbin = OC_App::isEnabled('files_trashbin');
|
2013-05-21 22:55:16 +00:00
|
|
|
|
|
|
|
// we don't want to tests with app files_trashbin enabled
|
2013-05-26 18:44:15 +00:00
|
|
|
\OC_App::disable('files_trashbin');
|
2013-05-21 22:55:16 +00:00
|
|
|
}
|
|
|
|
|
2013-05-26 01:22:16 +00:00
|
|
|
function tearDown() {
|
2013-05-21 22:55:16 +00:00
|
|
|
// reset app files_trashbin
|
2013-05-26 18:44:15 +00:00
|
|
|
if ($this->stateFilesTrashbin) {
|
|
|
|
OC_App::enable('files_trashbin');
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
OC_App::disable('files_trashbin');
|
2013-05-21 22:55:16 +00:00
|
|
|
}
|
2013-05-26 01:22:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public static function tearDownAfterClass() {
|
2013-05-26 18:44:15 +00:00
|
|
|
// cleanup test user
|
|
|
|
\OC_User::deleteUser(\Test_Encryption_Stream::TEST_ENCRYPTION_STREAM_USER1);
|
2013-05-21 22:55:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function testStreamOptions() {
|
|
|
|
$filename = '/tmp-' . time();
|
2013-05-26 18:44:15 +00:00
|
|
|
$view = new \OC\Files\View('/' . $this->userId . '/files');
|
2013-05-21 22:55:16 +00:00
|
|
|
|
|
|
|
// Save short data as encrypted file using stream wrapper
|
2013-05-26 18:44:15 +00:00
|
|
|
$cryptedFile = $view->file_put_contents($filename, $this->dataShort);
|
2013-05-21 22:55:16 +00:00
|
|
|
|
|
|
|
// Test that data was successfully written
|
2013-05-26 18:44:15 +00:00
|
|
|
$this->assertTrue(is_int($cryptedFile));
|
2013-05-21 22:55:16 +00:00
|
|
|
|
2013-05-26 18:44:15 +00:00
|
|
|
$handle = $view->fopen($filename, 'r');
|
2013-05-21 22:55:16 +00:00
|
|
|
|
|
|
|
// check if stream is at position zero
|
2013-05-26 18:44:15 +00:00
|
|
|
$this->assertEquals(0, ftell($handle));
|
2013-05-21 22:55:16 +00:00
|
|
|
|
|
|
|
// set stream options
|
2013-05-26 18:44:15 +00:00
|
|
|
$this->assertTrue(flock($handle, LOCK_SH));
|
|
|
|
$this->assertTrue(flock($handle, LOCK_UN));
|
2013-05-21 22:55:16 +00:00
|
|
|
|
|
|
|
// tear down
|
2013-05-26 18:44:15 +00:00
|
|
|
$view->unlink($filename);
|
2013-05-21 22:55:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function testStreamSetBlocking() {
|
|
|
|
$filename = '/tmp-' . time();
|
2013-05-26 18:44:15 +00:00
|
|
|
$view = new \OC\Files\View('/' . $this->userId . '/files');
|
2013-05-21 22:55:16 +00:00
|
|
|
|
|
|
|
// Save short data as encrypted file using stream wrapper
|
2013-05-26 18:44:15 +00:00
|
|
|
$cryptedFile = $view->file_put_contents($filename, $this->dataShort);
|
2013-05-21 22:55:16 +00:00
|
|
|
|
|
|
|
// Test that data was successfully written
|
2013-05-26 18:44:15 +00:00
|
|
|
$this->assertTrue(is_int($cryptedFile));
|
2013-05-21 22:55:16 +00:00
|
|
|
|
2013-05-26 18:44:15 +00:00
|
|
|
$handle = $view->fopen($filename, 'r');
|
2013-05-21 22:55:16 +00:00
|
|
|
|
|
|
|
// set stream options
|
2013-05-26 18:44:15 +00:00
|
|
|
$this->assertTrue(stream_set_blocking($handle, 1));
|
2013-05-21 22:55:16 +00:00
|
|
|
|
|
|
|
// tear down
|
2013-05-26 18:44:15 +00:00
|
|
|
$view->unlink($filename);
|
2013-05-21 22:55:16 +00:00
|
|
|
}
|
|
|
|
|
2013-06-10 08:17:47 +00:00
|
|
|
/**
|
|
|
|
* @medium
|
|
|
|
*/
|
2013-05-21 22:55:16 +00:00
|
|
|
function testStreamSetTimeout() {
|
|
|
|
$filename = '/tmp-' . time();
|
2013-05-26 18:44:15 +00:00
|
|
|
$view = new \OC\Files\View('/' . $this->userId . '/files');
|
2013-05-21 22:55:16 +00:00
|
|
|
|
|
|
|
// Save short data as encrypted file using stream wrapper
|
2013-05-26 18:44:15 +00:00
|
|
|
$cryptedFile = $view->file_put_contents($filename, $this->dataShort);
|
2013-05-21 22:55:16 +00:00
|
|
|
|
|
|
|
// Test that data was successfully written
|
2013-05-26 18:44:15 +00:00
|
|
|
$this->assertTrue(is_int($cryptedFile));
|
2013-05-21 22:55:16 +00:00
|
|
|
|
2013-05-26 18:44:15 +00:00
|
|
|
$handle = $view->fopen($filename, 'r');
|
2013-05-21 22:55:16 +00:00
|
|
|
|
|
|
|
// set stream options
|
2013-05-26 18:44:15 +00:00
|
|
|
$this->assertFalse(stream_set_timeout($handle, 1));
|
2013-05-21 22:55:16 +00:00
|
|
|
|
|
|
|
// tear down
|
2013-05-26 18:44:15 +00:00
|
|
|
$view->unlink($filename);
|
2013-05-21 22:55:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function testStreamSetWriteBuffer() {
|
|
|
|
$filename = '/tmp-' . time();
|
2013-05-26 18:44:15 +00:00
|
|
|
$view = new \OC\Files\View('/' . $this->userId . '/files');
|
2013-05-21 22:55:16 +00:00
|
|
|
|
|
|
|
// Save short data as encrypted file using stream wrapper
|
2013-05-26 18:44:15 +00:00
|
|
|
$cryptedFile = $view->file_put_contents($filename, $this->dataShort);
|
2013-05-21 22:55:16 +00:00
|
|
|
|
|
|
|
// Test that data was successfully written
|
2013-05-26 18:44:15 +00:00
|
|
|
$this->assertTrue(is_int($cryptedFile));
|
2013-05-21 22:55:16 +00:00
|
|
|
|
2013-05-26 18:44:15 +00:00
|
|
|
$handle = $view->fopen($filename, 'r');
|
2013-05-21 22:55:16 +00:00
|
|
|
|
|
|
|
// set stream options
|
2013-05-26 18:44:15 +00:00
|
|
|
$this->assertEquals(0, stream_set_write_buffer($handle, 1024));
|
2013-05-21 22:55:16 +00:00
|
|
|
|
|
|
|
// tear down
|
2013-05-26 18:44:15 +00:00
|
|
|
$view->unlink($filename);
|
2013-05-21 22:55:16 +00:00
|
|
|
}
|
|
|
|
}
|