186 lines
5.1 KiB
PHP
186 lines
5.1 KiB
PHP
<?php
|
|
/**
|
|
* 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/>.
|
|
*
|
|
*/
|
|
|
|
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' );
|
|
|
|
use OCA\Encryption;
|
|
|
|
/**
|
|
* Class Test_Encryption_Stream
|
|
* @brief this class provide basic stream tests
|
|
*/
|
|
class Test_Encryption_Stream extends \PHPUnit_Framework_TestCase
|
|
{
|
|
|
|
public $userId;
|
|
public $pass;
|
|
/**
|
|
* @var \OC_FilesystemView
|
|
*/
|
|
public $view;
|
|
public $dataShort;
|
|
public $stateFilesTrashbin;
|
|
|
|
public static function setUpBeforeClass() {
|
|
// reset backend
|
|
\OC_User::clearBackends();
|
|
\OC_User::useBackend( 'database' );
|
|
|
|
// Filesystem related hooks
|
|
\OCA\Encryption\Helper::registerFilesystemHooks();
|
|
|
|
// clear and register hooks
|
|
\OC_FileProxy::clearProxies();
|
|
\OC_FileProxy::register( new OCA\Encryption\Proxy() );
|
|
|
|
// setup filesystem
|
|
\OC_Util::tearDownFS();
|
|
\OC_User::setUserId( '' );
|
|
\OC\Files\Filesystem::tearDown();
|
|
\OC_Util::setupFS( 'admin' );
|
|
\OC_User::setUserId( 'admin' );
|
|
|
|
// login admin
|
|
$params['uid'] = 'admin';
|
|
$params['password'] = 'admin';
|
|
OCA\Encryption\Hooks::login( $params );
|
|
|
|
}
|
|
|
|
function setUp() {
|
|
// set user id
|
|
\OC_User::setUserId( 'admin' );
|
|
$this->userId = 'admin';
|
|
$this->pass = 'admin';
|
|
|
|
// init filesystem view
|
|
$this->view = new \OC_FilesystemView( '/' );
|
|
|
|
// init short data
|
|
$this->dataShort = 'hats';
|
|
|
|
// remember files_trashbin state
|
|
$this->stateFilesTrashbin = OC_App::isEnabled( 'files_trashbin' );
|
|
|
|
// we don't want to tests with app files_trashbin enabled
|
|
\OC_App::disable( 'files_trashbin' );
|
|
}
|
|
|
|
function tearDown() {
|
|
// reset app files_trashbin
|
|
if ( $this->stateFilesTrashbin ) {
|
|
OC_App::enable( 'files_trashbin' );
|
|
} else {
|
|
OC_App::disable( 'files_trashbin' );
|
|
}
|
|
}
|
|
|
|
public static function tearDownAfterClass() {
|
|
|
|
}
|
|
|
|
function testStreamOptions() {
|
|
$filename = '/tmp-' . time();
|
|
$view = new \OC\Files\View( '/' . $this->userId . '/files' );
|
|
|
|
// Save short data as encrypted file using stream wrapper
|
|
$cryptedFile = $view->file_put_contents( $filename, $this->dataShort );
|
|
|
|
// Test that data was successfully written
|
|
$this->assertTrue( is_int( $cryptedFile ) );
|
|
|
|
$handle = $view->fopen( $filename, 'r' );
|
|
|
|
// check if stream is at position zero
|
|
$this->assertEquals( 0, ftell( $handle ) );
|
|
|
|
// set stream options
|
|
$this->assertTrue( flock( $handle, LOCK_SH ) );
|
|
$this->assertTrue( flock( $handle, LOCK_UN ) );
|
|
|
|
// tear down
|
|
$view->unlink( $filename );
|
|
}
|
|
|
|
function testStreamSetBlocking() {
|
|
$filename = '/tmp-' . time();
|
|
$view = new \OC\Files\View( '/' . $this->userId . '/files' );
|
|
|
|
// Save short data as encrypted file using stream wrapper
|
|
$cryptedFile = $view->file_put_contents( $filename, $this->dataShort );
|
|
|
|
// Test that data was successfully written
|
|
$this->assertTrue( is_int( $cryptedFile ) );
|
|
|
|
$handle = $view->fopen( $filename, 'r' );
|
|
|
|
// set stream options
|
|
$this->assertTrue( stream_set_blocking( $handle, 1 ) );
|
|
|
|
// tear down
|
|
$view->unlink( $filename );
|
|
}
|
|
|
|
function testStreamSetTimeout() {
|
|
$filename = '/tmp-' . time();
|
|
$view = new \OC\Files\View( '/' . $this->userId . '/files' );
|
|
|
|
// Save short data as encrypted file using stream wrapper
|
|
$cryptedFile = $view->file_put_contents( $filename, $this->dataShort );
|
|
|
|
// Test that data was successfully written
|
|
$this->assertTrue( is_int( $cryptedFile ) );
|
|
|
|
$handle = $view->fopen( $filename, 'r' );
|
|
|
|
// set stream options
|
|
$this->assertFalse( stream_set_timeout( $handle, 1 ) );
|
|
|
|
// tear down
|
|
$view->unlink( $filename );
|
|
}
|
|
|
|
function testStreamSetWriteBuffer() {
|
|
$filename = '/tmp-' . time();
|
|
$view = new \OC\Files\View( '/' . $this->userId . '/files' );
|
|
|
|
// Save short data as encrypted file using stream wrapper
|
|
$cryptedFile = $view->file_put_contents( $filename, $this->dataShort );
|
|
|
|
// Test that data was successfully written
|
|
$this->assertTrue( is_int( $cryptedFile ) );
|
|
|
|
$handle = $view->fopen( $filename, 'r' );
|
|
|
|
// set stream options
|
|
$this->assertEquals( 0, stream_set_write_buffer( $handle, 1024 ) );
|
|
|
|
// tear down
|
|
$view->unlink( $filename );
|
|
}
|
|
} |