get dirname from sharePath

This commit is contained in:
Bjoern Schiessle 2015-04-17 12:38:54 +02:00
parent b0fcf0fa0e
commit 19e8c4fcb1
2 changed files with 96 additions and 2 deletions

View File

@ -232,7 +232,7 @@ class Encryption extends Wrapper {
$sharePath = $this->fullPath; $sharePath = $this->fullPath;
if (!$this->storage->file_exists($this->internalPath)) { if (!$this->storage->file_exists($this->internalPath)) {
$sharePath = dirname($path); $sharePath = dirname($sharePath);
} }
$accessList = $this->file->getAccessList($sharePath); $accessList = $this->file->getAccessList($sharePath);

View File

@ -8,8 +8,10 @@ use OCA\Encryption_Dummy\DummyModule;
class Encryption extends \Test\TestCase { class Encryption extends \Test\TestCase {
/** /**
* @param string $fileName
* @param string $mode * @param string $mode
* @param integer $limit * @param integer $unencryptedSize
* @return resource
*/ */
protected function getStream($fileName, $mode, $unencryptedSize) { protected function getStream($fileName, $mode, $unencryptedSize) {
@ -45,6 +47,98 @@ class Encryption extends \Test\TestCase {
$util, $file, $mode, $size, $unencryptedSize); $util, $file, $mode, $size, $unencryptedSize);
} }
/**
* @dataProvider dataProviderStreamOpen()
*/
public function testStreamOpen($mode,
$fullPath,
$fileExists,
$expectedSharePath,
$expectedSize,
$expectedReadOnly) {
// build mocks
$encryptionModuleMock = $this->getMockBuilder('\OCP\Encryption\IEncryptionModule')
->disableOriginalConstructor()->getMock();
$encryptionModuleMock->expects($this->once())
->method('getUnencryptedBlockSize')->willReturn(99);
$encryptionModuleMock->expects($this->once())
->method('begin')->willReturn(true);
$storageMock = $this->getMockBuilder('\OC\Files\Storage\Storage')
->disableOriginalConstructor()->getMock();
$storageMock->expects($this->once())->method('file_exists')->willReturn($fileExists);
$fileMock = $this->getMockBuilder('\OC\Encryption\File')
->disableOriginalConstructor()->getMock();
$fileMock->expects($this->once())->method('getAccessList')
->will($this->returnCallback(function($sharePath) use ($expectedSharePath) {
$this->assertSame($expectedSharePath, $sharePath);
return array();
}));
// get a instance of the stream wrapper
$streamWrapper = $this->getMockBuilder('\OC\Files\Stream\Encryption')
->setMethods(['loadContext'])->disableOriginalConstructor()->getMock();
// set internal properties of the stream wrapper
$stream = new \ReflectionClass('\OC\Files\Stream\Encryption');
$encryptionModule = $stream->getProperty('encryptionModule');
$encryptionModule->setAccessible(true);
$encryptionModule->setValue($streamWrapper, $encryptionModuleMock);
$encryptionModule->setAccessible(false);
$storage = $stream->getProperty('storage');
$storage->setAccessible(true);
$storage->setValue($streamWrapper, $storageMock);
$storage->setAccessible(false);
$file = $stream->getProperty('file');
$file->setAccessible(true);
$file->setValue($streamWrapper, $fileMock);
$file->setAccessible(false);
$fullPathP = $stream->getProperty('fullPath');
$fullPathP->setAccessible(true);
$fullPathP->setValue($streamWrapper, $fullPath);
$fullPathP->setAccessible(false);
$header = $stream->getProperty('header');
$header->setAccessible(true);
$header->setValue($streamWrapper, array());
$header->setAccessible(false);
// call stream_open, that's the method we want to test
$dummyVar = 'foo';
$streamWrapper->stream_open('', $mode, '', $dummyVar);
// check internal properties
$size = $stream->getProperty('size');
$size->setAccessible(true);
$this->assertSame($expectedSize,
$size->getValue($streamWrapper)
);
$size->setAccessible(false);
$unencryptedSize = $stream->getProperty('unencryptedSize');
$unencryptedSize->setAccessible(true);
$this->assertSame($expectedSize,
$unencryptedSize->getValue($streamWrapper)
);
$unencryptedSize->setAccessible(false);
$readOnly = $stream->getProperty('readOnly');
$readOnly->setAccessible(true);
$this->assertSame($expectedReadOnly,
$readOnly->getValue($streamWrapper)
);
$readOnly->setAccessible(false);
}
public function dataProviderStreamOpen() {
return array(
array('r', '/foo/bar/test.txt', true, '/foo/bar/test.txt', null, true),
array('r', '/foo/bar/test.txt', false, '/foo/bar', null, true),
array('w', '/foo/bar/test.txt', true, '/foo/bar/test.txt', 0, false),
);
}
public function testWriteRead() { public function testWriteRead() {
$fileName = tempnam("/tmp", "FOO"); $fileName = tempnam("/tmp", "FOO");
$stream = $this->getStream($fileName, 'w+', 0); $stream = $this->getStream($fileName, 'w+', 0);