improved test

- fixed testPermanentDeleteFile sometimes failed
- speed optimization
- reformat code
This commit is contained in:
Florin Peter 2013-05-26 03:22:16 +02:00
parent 0c621ff6a9
commit c7981abbc9
7 changed files with 952 additions and 983 deletions

File diff suppressed because it is too large Load Diff

View File

@ -6,14 +6,14 @@
* See the COPYING-README file.
*/
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__) . '/../lib/helper.php');
require_once realpath(dirname(__FILE__) . '/../appinfo/app.php');
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__ ) . '/../lib/helper.php' );
require_once realpath( dirname( __FILE__ ) . '/../appinfo/app.php' );
use OCA\Encryption;
@ -33,109 +33,111 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase
public $randomKey;
public $dataShort;
function setUp()
{
public static function setUpBeforeClass() {
// reset backend
\OC_User::clearBackends();
\OC_User::useBackend('database');
\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() );
// disable file proxy by default
\OC_FileProxy::$enabled = false;
// 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 content for encrypting / decrypting in tests
$this->dataLong = file_get_contents(realpath(dirname(__FILE__) . '/../lib/crypt.php'));
$this->dataLong = file_get_contents( realpath( dirname( __FILE__ ) . '/../lib/crypt.php' ) );
$this->dataShort = 'hats';
$this->dataUrl = realpath(dirname(__FILE__) . '/../lib/crypt.php');
$this->legacyData = realpath(dirname(__FILE__) . '/legacy-text.txt');
$this->legacyEncryptedData = realpath(dirname(__FILE__) . '/legacy-encrypted-text.txt');
$this->dataUrl = realpath( dirname( __FILE__ ) . '/../lib/crypt.php' );
$this->legacyData = realpath( dirname( __FILE__ ) . '/legacy-text.txt' );
$this->legacyEncryptedData = realpath( dirname( __FILE__ ) . '/legacy-encrypted-text.txt' );
$this->randomKey = Encryption\Crypt::generateKey();
$keypair = Encryption\Crypt::createKeypair();
$this->genPublicKey = $keypair['publicKey'];
$this->genPrivateKey = $keypair['privateKey'];
$this->view = new \OC_FilesystemView('/');
$this->view = new \OC_FilesystemView( '/' );
\OC_User::setUserId('admin');
\OC_User::setUserId( 'admin' );
$this->userId = 'admin';
$this->pass = 'admin';
$userHome = \OC_User::getHome($this->userId);
$this->dataDir = str_replace('/' . $this->userId, '', $userHome);
// Filesystem related hooks
\OCA\Encryption\Helper::registerFilesystemHooks();
\OC_FileProxy::register(new OCA\Encryption\Proxy());
$userHome = \OC_User::getHome( $this->userId );
$this->dataDir = str_replace( '/' . $this->userId, '', $userHome );
// remember files_trashbin state
$this->stateFilesTrashbin = OC_App::isEnabled('files_trashbin');
$this->stateFilesTrashbin = OC_App::isEnabled( 'files_trashbin' );
// we don't want to tests with app files_trashbin enabled
\OC_App::disable('files_trashbin');
\OC_Util::tearDownFS();
\OC_User::setUserId('');
\OC\Files\Filesystem::tearDown();
\OC_Util::setupFS($this->userId);
\OC_User::setUserId($this->userId);
$params['uid'] = $this->userId;
$params['password'] = $this->pass;
OCA\Encryption\Hooks::login($params);
\OC_App::disable( 'files_trashbin' );
}
function tearDown()
{
\OC_FileProxy::$enabled = true;
\OC_FileProxy::clearProxies();
function tearDown() {
// reset app files_trashbin
if ($this->stateFilesTrashbin) {
OC_App::enable('files_trashbin');
if ( $this->stateFilesTrashbin ) {
OC_App::enable( 'files_trashbin' );
} else {
OC_App::disable('files_trashbin');
OC_App::disable( 'files_trashbin' );
}
}
function testGetPrivateKey()
{
public static function tearDownAfterClass() {
\OC_FileProxy::$enabled = true;
}
$key = Encryption\Keymanager::getPrivateKey($this->view, $this->userId);
function testGetPrivateKey() {
$privateKey = Encryption\Crypt::symmetricDecryptFileContent($key, $this->pass);
$key = Encryption\Keymanager::getPrivateKey( $this->view, $this->userId );
$res = openssl_pkey_get_private($privateKey);
$privateKey = Encryption\Crypt::symmetricDecryptFileContent( $key, $this->pass );
$this->assertTrue(is_resource($res));
$res = openssl_pkey_get_private( $privateKey );
$sslInfo = openssl_pkey_get_details($res);
$this->assertTrue( is_resource( $res ) );
$this->assertArrayHasKey('key', $sslInfo);
$sslInfo = openssl_pkey_get_details( $res );
$this->assertArrayHasKey( 'key', $sslInfo );
}
function testGetPublicKey()
{
function testGetPublicKey() {
$publiceKey = Encryption\Keymanager::getPublicKey($this->view, $this->userId);
$publiceKey = Encryption\Keymanager::getPublicKey( $this->view, $this->userId );
$res = openssl_pkey_get_public($publiceKey);
$res = openssl_pkey_get_public( $publiceKey );
$this->assertTrue(is_resource($res));
$this->assertTrue( is_resource( $res ) );
$sslInfo = openssl_pkey_get_details($res);
$sslInfo = openssl_pkey_get_details( $res );
$this->assertArrayHasKey('key', $sslInfo);
$this->assertArrayHasKey( 'key', $sslInfo );
}
function testSetFileKey()
{
function testSetFileKey() {
# NOTE: This cannot be tested until we are able to break out
# of the FileSystemView data directory root
$key = Encryption\Crypt::symmetricEncryptFileContentKeyfile($this->randomKey, 'hat');
$key = Encryption\Crypt::symmetricEncryptFileContentKeyfile( $this->randomKey, 'hat' );
$file = 'unittest-' . time() . '.txt';
@ -143,101 +145,98 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase
$proxyStatus = \OC_FileProxy::$enabled;
\OC_FileProxy::$enabled = false;
$this->view->file_put_contents($this->userId . '/files/' . $file, $key['encrypted']);
$this->view->file_put_contents( $this->userId . '/files/' . $file, $key['encrypted'] );
// Re-enable proxy - our work is done
\OC_FileProxy::$enabled = $proxyStatus;
//$view = new \OC_FilesystemView( '/' . $this->userId . '/files_encryption/keyfiles' );
Encryption\Keymanager::setFileKey($this->view, $file, $this->userId, $key['key']);
Encryption\Keymanager::setFileKey( $this->view, $file, $this->userId, $key['key'] );
// enable encryption proxy
$proxyStatus = \OC_FileProxy::$enabled;
\OC_FileProxy::$enabled = true;
// cleanup
$this->view->unlink('/' . $this->userId . '/files/' . $file);
$this->view->unlink( '/' . $this->userId . '/files/' . $file );
// change encryption proxy to previous state
\OC_FileProxy::$enabled = $proxyStatus;
}
function testGetUserKeys()
{
function testGetUserKeys() {
$keys = Encryption\Keymanager::getUserKeys($this->view, $this->userId);
$keys = Encryption\Keymanager::getUserKeys( $this->view, $this->userId );
$resPublic = openssl_pkey_get_public($keys['publicKey']);
$resPublic = openssl_pkey_get_public( $keys['publicKey'] );
$this->assertTrue(is_resource($resPublic));
$this->assertTrue( is_resource( $resPublic ) );
$sslInfoPublic = openssl_pkey_get_details($resPublic);
$sslInfoPublic = openssl_pkey_get_details( $resPublic );
$this->assertArrayHasKey('key', $sslInfoPublic);
$this->assertArrayHasKey( 'key', $sslInfoPublic );
$privateKey = Encryption\Crypt::symmetricDecryptFileContent($keys['privateKey'], $this->pass);
$privateKey = Encryption\Crypt::symmetricDecryptFileContent( $keys['privateKey'], $this->pass );
$resPrivate = openssl_pkey_get_private($privateKey);
$resPrivate = openssl_pkey_get_private( $privateKey );
$this->assertTrue(is_resource($resPrivate));
$this->assertTrue( is_resource( $resPrivate ) );
$sslInfoPrivate = openssl_pkey_get_details($resPrivate);
$sslInfoPrivate = openssl_pkey_get_details( $resPrivate );
$this->assertArrayHasKey('key', $sslInfoPrivate);
$this->assertArrayHasKey( 'key', $sslInfoPrivate );
}
function testFixPartialFilePath()
{
function testFixPartialFilePath() {
$partFilename = 'testfile.txt.part';
$filename = 'testfile.txt';
$this->assertTrue(Encryption\Keymanager::isPartialFilePath($partFilename));
$this->assertTrue( Encryption\Keymanager::isPartialFilePath( $partFilename ) );
$this->assertEquals('testfile.txt', Encryption\Keymanager::fixPartialFilePath($partFilename));
$this->assertEquals( 'testfile.txt', Encryption\Keymanager::fixPartialFilePath( $partFilename ) );
$this->assertFalse(Encryption\Keymanager::isPartialFilePath($filename));
$this->assertFalse( Encryption\Keymanager::isPartialFilePath( $filename ) );
$this->assertEquals('testfile.txt', Encryption\Keymanager::fixPartialFilePath($filename));
$this->assertEquals( 'testfile.txt', Encryption\Keymanager::fixPartialFilePath( $filename ) );
}
function testRecursiveDelShareKeys()
{
function testRecursiveDelShareKeys() {
// generate filename
$filename = '/tmp-' . time() . '.txt';
// create folder structure
$this->view->mkdir('/admin/files/folder1');
$this->view->mkdir('/admin/files/folder1/subfolder');
$this->view->mkdir('/admin/files/folder1/subfolder/subsubfolder');
$this->view->mkdir( '/admin/files/folder1' );
$this->view->mkdir( '/admin/files/folder1/subfolder' );
$this->view->mkdir( '/admin/files/folder1/subfolder/subsubfolder' );
// enable encryption proxy
$proxyStatus = \OC_FileProxy::$enabled;
\OC_FileProxy::$enabled = true;
// save file with content
$cryptedFile = file_put_contents('crypt:///folder1/subfolder/subsubfolder/' . $filename, $this->dataShort);
$cryptedFile = file_put_contents( 'crypt:///folder1/subfolder/subsubfolder/' . $filename, $this->dataShort );
// test that data was successfully written
$this->assertTrue(is_int($cryptedFile));
$this->assertTrue( is_int( $cryptedFile ) );
// change encryption proxy to previous state
\OC_FileProxy::$enabled = $proxyStatus;
// recursive delete keys
Encryption\Keymanager::delShareKey($this->view, array('admin'), '/folder1/');
Encryption\Keymanager::delShareKey( $this->view, array( 'admin' ), '/folder1/' );
// check if share key not exists
$this->assertFalse($this->view->file_exists('/admin/files_encryption/share-keys/folder1/subfolder/subsubfolder/' . $filename . '.admin.shareKey'));
$this->assertFalse( $this->view->file_exists( '/admin/files_encryption/share-keys/folder1/subfolder/subsubfolder/' . $filename . '.admin.shareKey' ) );
// enable encryption proxy
$proxyStatus = \OC_FileProxy::$enabled;
\OC_FileProxy::$enabled = true;
// cleanup
$this->view->unlink('/admin/files/folder1');
$this->view->unlink( '/admin/files/folder1' );
// change encryption proxy to previous state
\OC_FileProxy::$enabled = $proxyStatus;

File diff suppressed because it is too large Load Diff

View File

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

View File

@ -20,14 +20,14 @@
*
*/
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__) . '/../../files_trashbin/appinfo/app.php');
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__ ) . '/../../files_trashbin/appinfo/app.php' );
use OCA\Encryption;
@ -50,18 +50,45 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase
public $subfolder;
public $subsubfolder;
function setUp()
{
public static function setUpBeforeClass() {
// reset backend
\OC_User::useBackend('database');
\OC_User::clearBackends();
\OC_User::useBackend( 'database' );
\OC_Hook::clear( 'OC_Filesystem' );
\OC_Hook::clear( 'OC_User' );
// trashbin hooks
\OCA\Files_Trashbin\Trashbin::registerHooks();
// 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');
\OC_User::setUserId( 'admin' );
$this->userId = 'admin';
$this->pass = 'admin';
// init filesystem view
$this->view = new \OC_FilesystemView('/');
$this->view = new \OC_FilesystemView( '/' );
// init short data
$this->dataShort = 'hats';
@ -70,48 +97,24 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase
$this->subfolder = '/subfolder1';
$this->subsubfolder = '/subsubfolder1';
\OC_Hook::clear('OC_Filesystem');
\OC_Hook::clear('OC_User');
// init filesystem related hooks
\OCA\Encryption\Helper::registerFilesystemHooks();
// register encryption file proxy
\OC_FileProxy::register(new OCA\Encryption\Proxy());
// trashbin hooks
\OCA\Files_Trashbin\Trashbin::registerHooks();
// remember files_trashbin state
$this->stateFilesTrashbin = OC_App::isEnabled('files_trashbin');
$this->stateFilesTrashbin = OC_App::isEnabled( 'files_trashbin' );
// we don't want to tests with app files_trashbin enabled
\OC_App::enable('files_trashbin');
// init filesystem for user
\OC_Util::tearDownFS();
\OC_User::setUserId('');
\OC\Files\Filesystem::tearDown();
\OC_Util::setupFS($this->userId);
\OC_User::setUserId($this->userId);
// login user
$params['uid'] = $this->userId;
$params['password'] = $this->pass;
OCA\Encryption\Hooks::login($params);
// we want to tests with app files_trashbin enabled
\OC_App::enable( 'files_trashbin' );
}
function tearDown()
{
function tearDown() {
// reset app files_trashbin
if ($this->stateFilesTrashbin) {
OC_App::enable('files_trashbin');
if ( $this->stateFilesTrashbin ) {
OC_App::enable( 'files_trashbin' );
} else {
OC_App::disable('files_trashbin');
OC_App::disable( 'files_trashbin' );
}
}
public static function tearDownAfterClass() {
// clear all proxies
\OC_FileProxy::clearProxies();
}
/**
@ -123,49 +126,49 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase
$filename = 'tmp-' . time() . '.txt';
// save file with content
$cryptedFile = file_put_contents('crypt:///' . $filename, $this->dataShort);
$cryptedFile = file_put_contents( 'crypt:///' . $filename, $this->dataShort );
// test that data was successfully written
$this->assertTrue(is_int($cryptedFile));
$this->assertTrue( is_int( $cryptedFile ) );
// check if key for admin exists
$this->assertTrue($this->view->file_exists('/admin/files_encryption/keyfiles/' . $filename . '.key'));
$this->assertTrue( $this->view->file_exists( '/admin/files_encryption/keyfiles/' . $filename . '.key' ) );
// check if share key for admin exists
$this->assertTrue($this->view->file_exists('/admin/files_encryption/share-keys/' . $filename . '.admin.shareKey'));
$this->assertTrue( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $filename . '.admin.shareKey' ) );
// delete file
\OC\FIles\Filesystem::unlink($filename);
\OC\FIles\Filesystem::unlink( $filename );
// check if file not exists
$this->assertFalse($this->view->file_exists('/admin/files/' . $filename));
$this->assertFalse( $this->view->file_exists( '/admin/files/' . $filename ) );
// check if key for admin not exists
$this->assertFalse($this->view->file_exists('/admin/files_encryption/keyfiles/' . $filename . '.key'));
$this->assertFalse( $this->view->file_exists( '/admin/files_encryption/keyfiles/' . $filename . '.key' ) );
// check if share key for admin not exists
$this->assertFalse($this->view->file_exists('/admin/files_encryption/share-keys/' . $filename . '.admin.shareKey'));
$this->assertFalse( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $filename . '.admin.shareKey' ) );
// get files
$trashFiles = $this->view->getDirectoryContent('/admin/files_trashbin/files/');
$trashFiles = $this->view->getDirectoryContent( '/admin/files_trashbin/files/' );
$trashFileSuffix = null;
// find created file with timestamp
foreach($trashFiles as $file) {
if(strncmp($file['path'], $filename, strlen($filename))) {
$path_parts = pathinfo($file['name']);
foreach ( $trashFiles as $file ) {
if ( strncmp( $file['path'], $filename, strlen( $filename ) ) ) {
$path_parts = pathinfo( $file['name'] );
$trashFileSuffix = $path_parts['extension'];
}
}
// check if we found the file we created
$this->assertNotNull($trashFileSuffix);
$this->assertNotNull( $trashFileSuffix );
// check if key for admin not exists
$this->assertTrue($this->view->file_exists('/admin/files_trashbin/keyfiles/' . $filename . '.key.' . $trashFileSuffix));
$this->assertTrue( $this->view->file_exists( '/admin/files_trashbin/keyfiles/' . $filename . '.key.' . $trashFileSuffix ) );
// check if share key for admin not exists
$this->assertTrue($this->view->file_exists('/admin/files_trashbin/share-keys/' . $filename . '.admin.shareKey.' . $trashFileSuffix));
$this->assertTrue( $this->view->file_exists( '/admin/files_trashbin/share-keys/' . $filename . '.admin.shareKey.' . $trashFileSuffix ) );
// return filename for next test
return $filename . '.' . $trashFileSuffix;
@ -176,25 +179,25 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase
*
* @depends testDeleteFile
*/
function testRestoreFile($filename) {
function testRestoreFile( $filename ) {
// prepare file information
$path_parts = pathinfo($filename);
$path_parts = pathinfo( $filename );
$trashFileSuffix = $path_parts['extension'];
$timestamp = str_replace('d', '', $trashFileSuffix);
$fileNameWithoutSuffix = str_replace('.'.$trashFileSuffix, '', $filename);
$timestamp = str_replace( 'd', '', $trashFileSuffix );
$fileNameWithoutSuffix = str_replace( '.' . $trashFileSuffix, '', $filename );
// restore file
$this->assertTrue(\OCA\Files_Trashbin\Trashbin::restore($filename, $fileNameWithoutSuffix, $timestamp));
$this->assertTrue( \OCA\Files_Trashbin\Trashbin::restore( $filename, $fileNameWithoutSuffix, $timestamp ) );
// check if file exists
$this->assertTrue($this->view->file_exists('/admin/files/' . $fileNameWithoutSuffix));
$this->assertTrue( $this->view->file_exists( '/admin/files/' . $fileNameWithoutSuffix ) );
// check if key for admin exists
$this->assertTrue($this->view->file_exists('/admin/files_encryption/keyfiles/' . $fileNameWithoutSuffix . '.key'));
$this->assertTrue( $this->view->file_exists( '/admin/files_encryption/keyfiles/' . $fileNameWithoutSuffix . '.key' ) );
// check if share key for admin exists
$this->assertTrue($this->view->file_exists('/admin/files_encryption/share-keys/' . $fileNameWithoutSuffix . '.admin.shareKey'));
$this->assertTrue( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $fileNameWithoutSuffix . '.admin.shareKey' ) );
}
/**
@ -206,65 +209,59 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase
$filename = 'tmp-' . time() . '.txt';
// save file with content
$cryptedFile = file_put_contents('crypt:///' . $filename, $this->dataShort);
$cryptedFile = file_put_contents( 'crypt:///' . $filename, $this->dataShort );
// test that data was successfully written
$this->assertTrue(is_int($cryptedFile));
$this->assertTrue( is_int( $cryptedFile ) );
// check if key for admin exists
$this->assertTrue($this->view->file_exists('/admin/files_encryption/keyfiles/' . $filename . '.key'));
$this->assertTrue( $this->view->file_exists( '/admin/files_encryption/keyfiles/' . $filename . '.key' ) );
// check if share key for admin exists
$this->assertTrue($this->view->file_exists('/admin/files_encryption/share-keys/' . $filename . '.admin.shareKey'));
$this->assertTrue( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $filename . '.admin.shareKey' ) );
// delete file
\OC\FIles\Filesystem::unlink($filename);
\OC\FIles\Filesystem::unlink( $filename );
// check if file not exists
$this->assertFalse($this->view->file_exists('/admin/files/' . $filename));
$this->assertFalse( $this->view->file_exists( '/admin/files/' . $filename ) );
// check if key for admin not exists
$this->assertFalse($this->view->file_exists('/admin/files_encryption/keyfiles/' . $filename . '.key'));
$this->assertFalse( $this->view->file_exists( '/admin/files_encryption/keyfiles/' . $filename . '.key' ) );
// check if share key for admin not exists
$this->assertFalse($this->view->file_exists('/admin/files_encryption/share-keys/' . $filename . '.admin.shareKey'));
$this->assertFalse( $this->view->file_exists( '/admin/files_encryption/share-keys/' . $filename . '.admin.shareKey' ) );
// get files
$trashFiles = $this->view->getDirectoryContent('/admin/files_trashbin/files/');
$trashFileSuffix = null;
// find created file with timestamp
foreach($trashFiles as $file) {
if(strncmp($file['name'], $filename, strlen($filename)) == 0) {
$path_parts = pathinfo($file['name']);
$trashFileSuffix = $path_parts['extension'];
break;
}
}
$query = \OC_DB::prepare( 'SELECT `timestamp`,`type` FROM `*PREFIX*files_trash`'
. ' WHERE `id`=?' );
$result = $query->execute( array( $filename ) )->fetchRow();
// check if we found the file we created
$this->assertNotNull($trashFileSuffix);
$this->assertTrue( is_array( $result ) );
// build suffix
$trashFileSuffix = 'd' . $result['timestamp'];
// check if key for admin exists
$this->assertTrue($this->view->file_exists('/admin/files_trashbin/keyfiles/' . $filename . '.key.' . $trashFileSuffix));
$this->assertTrue( $this->view->file_exists( '/admin/files_trashbin/keyfiles/' . $filename . '.key.' . $trashFileSuffix ) );
// check if share key for admin exists
$this->assertTrue($this->view->file_exists('/admin/files_trashbin/share-keys/' . $filename . '.admin.shareKey.' . $trashFileSuffix));
$this->assertTrue( $this->view->file_exists( '/admin/files_trashbin/share-keys/' . $filename . '.admin.shareKey.' . $trashFileSuffix ) );
// get timestamp from file
$timestamp = str_replace('d', '', $trashFileSuffix);
$timestamp = str_replace( 'd', '', $trashFileSuffix );
// delete file forever
$this->assertGreaterThan(0, \OCA\Files_Trashbin\Trashbin::delete($filename, $timestamp));
$this->assertGreaterThan( 0, \OCA\Files_Trashbin\Trashbin::delete( $filename, $timestamp ) );
// check if key for admin not exists
$this->assertFalse($this->view->file_exists('/admin/files_trashbin/files/' . $filename . '.' . $trashFileSuffix));
$this->assertFalse( $this->view->file_exists( '/admin/files_trashbin/files/' . $filename . '.' . $trashFileSuffix ) );
// check if key for admin not exists
$this->assertFalse($this->view->file_exists('/admin/files_trashbin/keyfiles/' . $filename . '.key.' . $trashFileSuffix));
$this->assertFalse( $this->view->file_exists( '/admin/files_trashbin/keyfiles/' . $filename . '.key.' . $trashFileSuffix ) );
// check if share key for admin not exists
$this->assertFalse($this->view->file_exists('/admin/files_trashbin/share-keys/' . $filename . '.admin.shareKey.' . $trashFileSuffix));
$this->assertFalse( $this->view->file_exists( '/admin/files_trashbin/share-keys/' . $filename . '.admin.shareKey.' . $trashFileSuffix ) );
}
}

View File

@ -6,13 +6,13 @@
* See the COPYING-README file.
*/
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__ ) . '/../../../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;
@ -42,22 +42,21 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase
public $legacyEncryptedDataKey;
public $lagacyKey;
function setUp()
{
function setUp() {
// reset backend
\OC_User::useBackend('database');
\OC_User::useBackend( 'database' );
\OC_User::setUserId('admin');
\OC_User::setUserId( 'admin' );
$this->userId = 'admin';
$this->pass = 'admin';
// set content for encrypting / decrypting in tests
$this->dataUrl = realpath(dirname(__FILE__) . '/../lib/crypt.php');
$this->dataUrl = realpath( dirname( __FILE__ ) . '/../lib/crypt.php' );
$this->dataShort = 'hats';
$this->dataLong = file_get_contents(realpath(dirname(__FILE__) . '/../lib/crypt.php'));
$this->legacyData = realpath(dirname(__FILE__) . '/legacy-text.txt');
$this->legacyEncryptedData = realpath(dirname(__FILE__) . '/legacy-encrypted-text.txt');
$this->legacyEncryptedDataKey = realpath(dirname(__FILE__) . '/encryption.key');
$this->dataLong = file_get_contents( realpath( dirname( __FILE__ ) . '/../lib/crypt.php' ) );
$this->legacyData = realpath( dirname( __FILE__ ) . '/legacy-text.txt' );
$this->legacyEncryptedData = realpath( dirname( __FILE__ ) . '/legacy-encrypted-text.txt' );
$this->legacyEncryptedDataKey = realpath( dirname( __FILE__ ) . '/encryption.key' );
$this->lagacyKey = '62829813025828180801';
$keypair = Encryption\Crypt::createKeypair();
@ -71,132 +70,128 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase
$this->publicKeyPath = $this->publicKeyDir . '/' . $this->userId . '.public.key'; // e.g. data/public-keys/admin.public.key
$this->privateKeyPath = $this->encryptionDir . '/' . $this->userId . '.private.key'; // e.g. data/admin/admin.private.key
$this->view = new \OC_FilesystemView('/');
$this->view = new \OC_FilesystemView( '/' );
$userHome = \OC_User::getHome($this->userId);
$this->dataDir = str_replace('/' . $this->userId, '', $userHome);
$userHome = \OC_User::getHome( $this->userId );
$this->dataDir = str_replace( '/' . $this->userId, '', $userHome );
// Filesystem related hooks
\OCA\Encryption\Helper::registerFilesystemHooks();
\OC_FileProxy::register(new OCA\Encryption\Proxy());
// clear and register hooks
\OC_FileProxy::clearProxies();
\OC_FileProxy::register( new OCA\Encryption\Proxy() );
// setup filesystem
\OC_Util::tearDownFS();
\OC_User::setUserId('');
\OC_User::setUserId( '' );
\OC\Files\Filesystem::tearDown();
\OC_Util::setupFS($this->userId);
\OC_User::setUserId($this->userId);
\OC_Util::setupFS( $this->userId );
\OC_User::setUserId( $this->userId );
// login admin
$params['uid'] = $this->userId;
$params['password'] = $this->pass;
OCA\Encryption\Hooks::login($params);
OCA\Encryption\Hooks::login( $params );
$this->util = new Encryption\Util($this->view, $this->userId);
$this->util = new Encryption\Util( $this->view, $this->userId );
}
function tearDown()
{
function tearDown() {
// clear and register hooks
\OC_FileProxy::clearProxies();
}
/**
* @brief test that paths set during User construction are correct
*/
function testKeyPaths()
{
$util = new Encryption\Util($this->view, $this->userId);
function testKeyPaths() {
$util = new Encryption\Util( $this->view, $this->userId );
$this->assertEquals($this->publicKeyDir, $util->getPath('publicKeyDir'));
$this->assertEquals($this->encryptionDir, $util->getPath('encryptionDir'));
$this->assertEquals($this->keyfilesPath, $util->getPath('keyfilesPath'));
$this->assertEquals($this->publicKeyPath, $util->getPath('publicKeyPath'));
$this->assertEquals($this->privateKeyPath, $util->getPath('privateKeyPath'));
$this->assertEquals( $this->publicKeyDir, $util->getPath( 'publicKeyDir' ) );
$this->assertEquals( $this->encryptionDir, $util->getPath( 'encryptionDir' ) );
$this->assertEquals( $this->keyfilesPath, $util->getPath( 'keyfilesPath' ) );
$this->assertEquals( $this->publicKeyPath, $util->getPath( 'publicKeyPath' ) );
$this->assertEquals( $this->privateKeyPath, $util->getPath( 'privateKeyPath' ) );
}
/**
* @brief test setup of encryption directories
*/
function testSetupServerSide()
{
$this->assertEquals(true, $this->util->setupServerSide($this->pass));
function testSetupServerSide() {
$this->assertEquals( true, $this->util->setupServerSide( $this->pass ) );
}
/**
* @brief test checking whether account is ready for encryption,
*/
function testUserIsReady()
{
$this->assertEquals(true, $this->util->ready());
function testUserIsReady() {
$this->assertEquals( true, $this->util->ready() );
}
/**
* @brief test checking whether account is not ready for encryption,
*/
function testUserIsNotReady()
{
$this->view->unlink($this->publicKeyDir);
function testUserIsNotReady() {
$this->view->unlink( $this->publicKeyDir );
$params['uid'] = $this->userId;
$params['password'] = $this->pass;
$this->assertFalse(OCA\Encryption\Hooks::login($params));
$this->assertFalse( OCA\Encryption\Hooks::login( $params ) );
$this->view->unlink($this->privateKeyPath);
$this->view->unlink( $this->privateKeyPath );
}
/**
* @brief test checking whether account is not ready for encryption,
*/
function testIsLagacyUser()
{
function testIsLagacyUser() {
$userView = new \OC_FilesystemView( '/' . $this->userId );
// Disable encryption proxy to prevent recursive calls
$proxyStatus = \OC_FileProxy::$enabled;
\OC_FileProxy::$enabled = false;
$encryptionKeyContent = file_get_contents($this->legacyEncryptedDataKey);
$userView->file_put_contents('/encryption.key', $encryptionKeyContent);
$encryptionKeyContent = file_get_contents( $this->legacyEncryptedDataKey );
$userView->file_put_contents( '/encryption.key', $encryptionKeyContent );
\OC_FileProxy::$enabled = $proxyStatus;
$params['uid'] = $this->userId;
$params['password'] = $this->pass;
$util = new Encryption\Util($this->view, $this->userId);
$util->setMigrationStatus(0);
$util = new Encryption\Util( $this->view, $this->userId );
$util->setMigrationStatus( 0 );
$this->assertTrue(OCA\Encryption\Hooks::login($params));
$this->assertTrue( OCA\Encryption\Hooks::login( $params ) );
$this->assertEquals($this->lagacyKey, $_SESSION['legacyKey']);
$this->assertEquals( $this->lagacyKey, $_SESSION['legacyKey'] );
}
function testRecoveryEnabledForUser()
{
function testRecoveryEnabledForUser() {
$util = new Encryption\Util($this->view, $this->userId);
$util = new Encryption\Util( $this->view, $this->userId );
// Record the value so we can return it to it's original state later
$enabled = $util->recoveryEnabledForUser();
$this->assertTrue($util->setRecoveryForUser(1));
$this->assertTrue( $util->setRecoveryForUser( 1 ) );
$this->assertEquals(1, $util->recoveryEnabledForUser());
$this->assertEquals( 1, $util->recoveryEnabledForUser() );
$this->assertTrue($util->setRecoveryForUser(0));
$this->assertTrue( $util->setRecoveryForUser( 0 ) );
$this->assertEquals(0, $util->recoveryEnabledForUser());
$this->assertEquals( 0, $util->recoveryEnabledForUser() );
// Return the setting to it's previous state
$this->assertTrue($util->setRecoveryForUser($enabled));
$this->assertTrue( $util->setRecoveryForUser( $enabled ) );
}
function testGetUidAndFilename()
{
function testGetUidAndFilename() {
\OC_User::setUserId('admin');
\OC_User::setUserId( 'admin' );
$filename = 'tmp-' . time() . '.test';
@ -204,74 +199,80 @@ class Test_Encryption_Util extends \PHPUnit_Framework_TestCase
$proxyStatus = \OC_FileProxy::$enabled;
\OC_FileProxy::$enabled = false;
$this->view->file_put_contents($this->userId . '/files/' . $filename, $this->dataShort);
$this->view->file_put_contents( $this->userId . '/files/' . $filename, $this->dataShort );
// Re-enable proxy - our work is done
\OC_FileProxy::$enabled = $proxyStatus;
$util = new Encryption\Util($this->view, $this->userId);
$util = new Encryption\Util( $this->view, $this->userId );
list($fileOwnerUid, $file) = $util->getUidAndFilename($filename);
list( $fileOwnerUid, $file ) = $util->getUidAndFilename( $filename );
$this->assertEquals('admin', $fileOwnerUid);
$this->assertEquals( 'admin', $fileOwnerUid );
$this->assertEquals($file, $filename);
$this->assertEquals( $file, $filename );
$this->view->unlink( $this->userId . '/files/' . $filename );
}
function testIsSharedPath() {
$sharedPath = '/user1/files/Shared/test';
$path = '/user1/files/test';
$this->assertTrue($this->util->isSharedPath($sharedPath));
$this->assertTrue( $this->util->isSharedPath( $sharedPath ) );
$this->assertFalse($this->util->isSharedPath($path));
$this->assertFalse( $this->util->isSharedPath( $path ) );
}
function testEncryptLagacyFiles()
{
$userView = new \OC_FilesystemView( '/' . $this->userId);
function testEncryptLagacyFiles() {
// login admin
$params['uid'] = $this->userId;
$params['password'] = $this->pass;
OCA\Encryption\Hooks::login( $params );
$userView = new \OC_FilesystemView( '/' . $this->userId );
$view = new \OC_FilesystemView( '/' . $this->userId . '/files' );
// Disable encryption proxy to prevent recursive calls
$proxyStatus = \OC_FileProxy::$enabled;
\OC_FileProxy::$enabled = false;
$encryptionKeyContent = file_get_contents($this->legacyEncryptedDataKey);
$userView->file_put_contents('/encryption.key', $encryptionKeyContent);
$encryptionKeyContent = file_get_contents( $this->legacyEncryptedDataKey );
$userView->file_put_contents( '/encryption.key', $encryptionKeyContent );
$legacyEncryptedData = file_get_contents($this->legacyEncryptedData);
$view->mkdir('/test/');
$view->mkdir('/test/subtest/');
$view->file_put_contents('/test/subtest/legacy-encrypted-text.txt', $legacyEncryptedData);
$legacyEncryptedData = file_get_contents( $this->legacyEncryptedData );
$view->mkdir( '/test/' );
$view->mkdir( '/test/subtest/' );
$view->file_put_contents( '/test/subtest/legacy-encrypted-text.txt', $legacyEncryptedData );
$fileInfo = $view->getFileInfo('/test/subtest/legacy-encrypted-text.txt');
$fileInfo = $view->getFileInfo( '/test/subtest/legacy-encrypted-text.txt' );
$fileInfo['encrypted'] = true;
$view->putFileInfo('/test/subtest/legacy-encrypted-text.txt', $fileInfo);
$view->putFileInfo( '/test/subtest/legacy-encrypted-text.txt', $fileInfo );
\OC_FileProxy::$enabled = $proxyStatus;
$params['uid'] = $this->userId;
$params['password'] = $this->pass;
$util = new Encryption\Util($this->view, $this->userId);
$util->setMigrationStatus(0);
$util = new Encryption\Util( $this->view, $this->userId );
$util->setMigrationStatus( 0 );
$this->assertTrue(OCA\Encryption\Hooks::login($params));
$this->assertTrue( OCA\Encryption\Hooks::login( $params ) );
$this->assertEquals($this->lagacyKey, $_SESSION['legacyKey']);
$this->assertEquals( $this->lagacyKey, $_SESSION['legacyKey'] );
$files = $util->findEncFiles('/' . $this->userId . '/files/');
$files = $util->findEncFiles( '/' . $this->userId . '/files/' );
$this->assertTrue(is_array($files));
$this->assertTrue( is_array( $files ) );
$found = false;
foreach($files['encrypted'] as $encryptedFile) {
if($encryptedFile['name'] === 'legacy-encrypted-text.txt') {
foreach ( $files['encrypted'] as $encryptedFile ) {
if ( $encryptedFile['name'] === 'legacy-encrypted-text.txt' ) {
$found = true;
break;
}
}
$this->assertTrue($found);
$this->assertTrue( $found );
}
}

View File

@ -20,13 +20,13 @@
*
*/
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__ ) . '/../../../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;
@ -46,18 +46,17 @@ class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase
public $dataShort;
public $stateFilesTrashbin;
function setUp()
{
function setUp() {
// reset backend
\OC_User::useBackend('database');
\OC_User::useBackend( 'database' );
// set user id
\OC_User::setUserId('admin');
\OC_User::setUserId( 'admin' );
$this->userId = 'admin';
$this->pass = 'admin';
// init filesystem view
$this->view = new \OC_FilesystemView('/');
$this->view = new \OC_FilesystemView( '/' );
// init short data
$this->dataShort = 'hats';
@ -65,38 +64,38 @@ class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase
// init filesystem related hooks
\OCA\Encryption\Helper::registerFilesystemHooks();
// register encryption file proxy
\OC_FileProxy::register(new OCA\Encryption\Proxy());
// clear and register hooks
\OC_FileProxy::clearProxies();
\OC_FileProxy::register( new OCA\Encryption\Proxy() );
// remember files_trashbin state
$this->stateFilesTrashbin = OC_App::isEnabled('files_trashbin');
$this->stateFilesTrashbin = OC_App::isEnabled( 'files_trashbin' );
// we don't want to tests with app files_trashbin enabled
\OC_App::disable('files_trashbin');
\OC_App::disable( 'files_trashbin' );
// init filesystem for user
\OC_Util::tearDownFS();
\OC_User::setUserId('');
\OC_User::setUserId( '' );
\OC\Files\Filesystem::tearDown();
\OC_Util::setupFS($this->userId);
\OC_User::setUserId($this->userId);
\OC_Util::setupFS( $this->userId );
\OC_User::setUserId( $this->userId );
// login user
$params['uid'] = $this->userId;
$params['password'] = $this->pass;
OCA\Encryption\Hooks::login($params);
OCA\Encryption\Hooks::login( $params );
}
function tearDown()
{
function tearDown() {
// reset app files_trashbin
if ($this->stateFilesTrashbin) {
OC_App::enable('files_trashbin');
if ( $this->stateFilesTrashbin ) {
OC_App::enable( 'files_trashbin' );
} else {
OC_App::disable('files_trashbin');
OC_App::disable( 'files_trashbin' );
}
// clear all proxies
// clear and register hooks
\OC_FileProxy::clearProxies();
}
@ -116,38 +115,38 @@ class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase
$_SERVER['HTTP_AUTHORIZATION'] = 'Basic YWRtaW46YWRtaW4=';
$_SERVER['CONTENT_TYPE'] = 'application/octet-stream';
$_SERVER['PATH_INFO'] = '/webdav' . $filename;
$_SERVER['CONTENT_LENGTH'] = strlen($this->dataShort);
$_SERVER['CONTENT_LENGTH'] = strlen( $this->dataShort );
// handle webdav request
$this->handleWebdavRequest($this->dataShort);
$this->handleWebdavRequest( $this->dataShort );
// check if file was created
$this->assertTrue($this->view->file_exists('/' . $this->userId . '/files' . $filename));
$this->assertTrue( $this->view->file_exists( '/' . $this->userId . '/files' . $filename ) );
// check if key-file was created
$this->assertTrue($this->view->file_exists('/' . $this->userId . '/files_encryption/keyfiles/' . $filename . '.key'));
$this->assertTrue( $this->view->file_exists( '/' . $this->userId . '/files_encryption/keyfiles/' . $filename . '.key' ) );
// check if shareKey-file was created
$this->assertTrue($this->view->file_exists('/' . $this->userId . '/files_encryption/share-keys/' . $filename . '.' . $this->userId . '.shareKey'));
$this->assertTrue( $this->view->file_exists( '/' . $this->userId . '/files_encryption/share-keys/' . $filename . '.' . $this->userId . '.shareKey' ) );
// disable encryption proxy to prevent recursive calls
$proxyStatus = \OC_FileProxy::$enabled;
\OC_FileProxy::$enabled = false;
// get encrypted file content
$encryptedContent = $this->view->file_get_contents('/' . $this->userId . '/files' . $filename);
$encryptedContent = $this->view->file_get_contents( '/' . $this->userId . '/files' . $filename );
// restore proxy state
\OC_FileProxy::$enabled = $proxyStatus;
// check if encrypted content is valid
$this->assertTrue(Encryption\Crypt::isCatfileContent($encryptedContent));
$this->assertTrue( Encryption\Crypt::isCatfileContent( $encryptedContent ) );
// get decrypted file contents
$decrypt = file_get_contents('crypt://' . $filename);
$decrypt = file_get_contents( 'crypt://' . $filename );
// check if file content match with the written content
$this->assertEquals($this->dataShort, $decrypt);
$this->assertEquals( $this->dataShort, $decrypt );
// return filename for next test
return $filename;
@ -158,7 +157,7 @@ class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase
*
* @depends testWebdavPUT
*/
function testWebdavGET($filename) {
function testWebdavGET( $filename ) {
// set server vars
$_SERVER['REQUEST_METHOD'] = 'GET';
@ -170,7 +169,7 @@ class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase
$content = $this->handleWebdavRequest();
// check if file content match with the written content
$this->assertEquals($this->dataShort, $content);
$this->assertEquals( $this->dataShort, $content );
// return filename for next test
return $filename;
@ -180,7 +179,7 @@ class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase
* @brief test webdav delete random file
* @depends testWebdavGET
*/
function testWebdavDELETE($filename) {
function testWebdavDELETE( $filename ) {
// set server vars
$_SERVER['REQUEST_METHOD'] = 'DELETE';
$_SERVER['REQUEST_URI'] = '/remote.php/webdav' . $filename;
@ -191,13 +190,13 @@ class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase
$content = $this->handleWebdavRequest();
// check if file was removed
$this->assertFalse($this->view->file_exists('/' . $this->userId . '/files' . $filename));
$this->assertFalse( $this->view->file_exists( '/' . $this->userId . '/files' . $filename ) );
// check if key-file was removed
$this->assertFalse($this->view->file_exists('/' . $this->userId . '/files_encryption/keyfiles' . $filename . '.key'));
$this->assertFalse( $this->view->file_exists( '/' . $this->userId . '/files_encryption/keyfiles' . $filename . '.key' ) );
// check if shareKey-file was removed
$this->assertFalse($this->view->file_exists('/' . $this->userId . '/files_encryption/share-keys' . $filename . '.' . $this->userId . '.shareKey'));
$this->assertFalse( $this->view->file_exists( '/' . $this->userId . '/files_encryption/share-keys' . $filename . '.' . $this->userId . '.shareKey' ) );
}
/**
@ -207,30 +206,30 @@ class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase
*
* @note this init procedure is copied from /apps/files/remote.php
*/
function handleWebdavRequest($body = false) {
function handleWebdavRequest( $body = false ) {
// Backends
$authBackend = new OC_Connector_Sabre_Auth();
$lockBackend = new OC_Connector_Sabre_Locks();
$requestBackend = new OC_Connector_Sabre_Request();
// Create ownCloud Dir
$publicDir = new OC_Connector_Sabre_Directory('');
$publicDir = new OC_Connector_Sabre_Directory( '' );
// Fire up server
$server = new Sabre_DAV_Server($publicDir);
$server = new Sabre_DAV_Server( $publicDir );
$server->httpRequest = $requestBackend;
$server->setBaseUri('/remote.php/webdav/');
$server->setBaseUri( '/remote.php/webdav/' );
// Load plugins
$server->addPlugin(new Sabre_DAV_Auth_Plugin($authBackend, 'ownCloud'));
$server->addPlugin(new Sabre_DAV_Locks_Plugin($lockBackend));
$server->addPlugin(new Sabre_DAV_Browser_Plugin(false)); // Show something in the Browser, but no upload
$server->addPlugin(new OC_Connector_Sabre_QuotaPlugin());
$server->addPlugin(new OC_Connector_Sabre_MaintenancePlugin());
$server->addPlugin( new Sabre_DAV_Auth_Plugin( $authBackend, 'ownCloud' ) );
$server->addPlugin( new Sabre_DAV_Locks_Plugin( $lockBackend ) );
$server->addPlugin( new Sabre_DAV_Browser_Plugin( false ) ); // Show something in the Browser, but no upload
$server->addPlugin( new OC_Connector_Sabre_QuotaPlugin() );
$server->addPlugin( new OC_Connector_Sabre_MaintenancePlugin() );
// And off we go!
if($body) {
$server->httpRequest->setBody($body);
if ( $body ) {
$server->httpRequest->setBody( $body );
}
// turn on output buffering