aboutsummaryrefslogtreecommitdiffstats
path: root/tests/lib/files/cache/cache.php
diff options
context:
space:
mode:
authorJoas Schilling <nickvergessen@gmx.de>2016-05-20 15:38:20 +0200
committerThomas Müller <DeepDiver1975@users.noreply.github.com>2016-05-20 15:38:20 +0200
commit94ad54ec9b96d41a614fbbad4a97b34c41a6901f (patch)
treef3eb7cdda2704aaf0cd59d58efe66bcbd34cb67d /tests/lib/files/cache/cache.php
parent2ef751b1ec28f7b5c7113af60ec8c9fa0ae1cf87 (diff)
downloadnextcloud-server-94ad54ec9b96d41a614fbbad4a97b34c41a6901f.tar.gz
nextcloud-server-94ad54ec9b96d41a614fbbad4a97b34c41a6901f.zip
Move tests/ to PSR-4 (#24731)
* Move a-b to PSR-4 * Move c-d to PSR-4 * Move e+g to PSR-4 * Move h-l to PSR-4 * Move m-r to PSR-4 * Move s-u to PSR-4 * Move files/ to PSR-4 * Move remaining tests to PSR-4 * Remove Test\ from old autoloader
Diffstat (limited to 'tests/lib/files/cache/cache.php')
-rw-r--r--tests/lib/files/cache/cache.php678
1 files changed, 0 insertions, 678 deletions
diff --git a/tests/lib/files/cache/cache.php b/tests/lib/files/cache/cache.php
deleted file mode 100644
index 3201e2d03fe..00000000000
--- a/tests/lib/files/cache/cache.php
+++ /dev/null
@@ -1,678 +0,0 @@
-<?php
-/**
- * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-namespace Test\Files\Cache;
-
-
-class LongId extends \OC\Files\Storage\Temporary {
- public function getId() {
- return 'long:' . str_repeat('foo', 50) . parent::getId();
- }
-}
-
-/**
- * Class Cache
- *
- * @group DB
- *
- * @package Test\Files\Cache
- */
-class Cache extends \Test\TestCase {
- /**
- * @var \OC\Files\Storage\Temporary $storage ;
- */
- protected $storage;
- /**
- * @var \OC\Files\Storage\Temporary $storage2 ;
- */
- protected $storage2;
-
- /**
- * @var \OC\Files\Cache\Cache $cache
- */
- protected $cache;
- /**
- * @var \OC\Files\Cache\Cache $cache2
- */
- protected $cache2;
-
- public function testGetNumericId() {
- $this->assertNotNull($this->cache->getNumericStorageId());
- }
-
- public function testSimple() {
- $file1 = 'foo';
- $file2 = 'foo/bar';
- $data1 = array('size' => 100, 'mtime' => 50, 'mimetype' => 'foo/folder');
- $data2 = array('size' => 1000, 'mtime' => 20, 'mimetype' => 'foo/file');
-
- $this->assertFalse($this->cache->inCache($file1));
- $this->assertEquals($this->cache->get($file1), null);
-
- $id1 = $this->cache->put($file1, $data1);
- $this->assertTrue($this->cache->inCache($file1));
- $cacheData1 = $this->cache->get($file1);
- foreach ($data1 as $key => $value) {
- $this->assertEquals($value, $cacheData1[$key]);
- }
- $this->assertEquals($cacheData1['mimepart'], 'foo');
- $this->assertEquals($cacheData1['fileid'], $id1);
- $this->assertEquals($id1, $this->cache->getId($file1));
-
- $this->assertFalse($this->cache->inCache($file2));
- $id2 = $this->cache->put($file2, $data2);
- $this->assertTrue($this->cache->inCache($file2));
- $cacheData2 = $this->cache->get($file2);
- foreach ($data2 as $key => $value) {
- $this->assertEquals($value, $cacheData2[$key]);
- }
- $this->assertEquals($cacheData1['fileid'], $cacheData2['parent']);
- $this->assertEquals($cacheData2['fileid'], $id2);
- $this->assertEquals($id2, $this->cache->getId($file2));
- $this->assertEquals($id1, $this->cache->getParentId($file2));
-
- $newSize = 1050;
- $newId2 = $this->cache->put($file2, array('size' => $newSize));
- $cacheData2 = $this->cache->get($file2);
- $this->assertEquals($newId2, $id2);
- $this->assertEquals($cacheData2['size'], $newSize);
- $this->assertEquals($cacheData1, $this->cache->get($file1));
-
- $this->cache->remove($file2);
- $this->assertFalse($this->cache->inCache($file2));
- $this->assertEquals($this->cache->get($file2), null);
- $this->assertTrue($this->cache->inCache($file1));
-
- $this->assertEquals($cacheData1, $this->cache->get($id1));
- }
-
- public function testPartial() {
- $file1 = 'foo';
-
- $this->cache->put($file1, array('size' => 10));
- $this->assertEquals(array('size' => 10), $this->cache->get($file1));
-
- $this->cache->put($file1, array('mtime' => 15));
- $this->assertEquals(array('size' => 10, 'mtime' => 15), $this->cache->get($file1));
-
- $this->cache->put($file1, array('size' => 12));
- $this->assertEquals(array('size' => 12, 'mtime' => 15), $this->cache->get($file1));
- }
-
- /**
- * @dataProvider folderDataProvider
- */
- public function testFolder($folder) {
- $file2 = $folder.'/bar';
- $file3 = $folder.'/foo';
- $data1 = array('size' => 100, 'mtime' => 50, 'mimetype' => 'httpd/unix-directory');
- $fileData = array();
- $fileData['bar'] = array('size' => 1000, 'mtime' => 20, 'mimetype' => 'foo/file');
- $fileData['foo'] = array('size' => 20, 'mtime' => 25, 'mimetype' => 'foo/file');
-
- $this->cache->put($folder, $data1);
- $this->cache->put($file2, $fileData['bar']);
- $this->cache->put($file3, $fileData['foo']);
-
- $content = $this->cache->getFolderContents($folder);
- $this->assertEquals(count($content), 2);
- foreach ($content as $cachedData) {
- $data = $fileData[$cachedData['name']];
- foreach ($data as $name => $value) {
- $this->assertEquals($value, $cachedData[$name]);
- }
- }
-
- $file4 = $folder.'/unkownSize';
- $fileData['unkownSize'] = array('size' => -1, 'mtime' => 25, 'mimetype' => 'foo/file');
- $this->cache->put($file4, $fileData['unkownSize']);
-
- $this->assertEquals(-1, $this->cache->calculateFolderSize($folder));
-
- $fileData['unkownSize'] = array('size' => 5, 'mtime' => 25, 'mimetype' => 'foo/file');
- $this->cache->put($file4, $fileData['unkownSize']);
-
- $this->assertEquals(1025, $this->cache->calculateFolderSize($folder));
-
- $this->cache->remove($file2);
- $this->cache->remove($file3);
- $this->cache->remove($file4);
- $this->assertEquals(0, $this->cache->calculateFolderSize($folder));
-
- $this->cache->remove($folder);
- $this->assertFalse($this->cache->inCache($folder.'/foo'));
- $this->assertFalse($this->cache->inCache($folder.'/bar'));
- }
-
- public function testRemoveRecursive() {
- $folderData = array('size' => 100, 'mtime' => 50, 'mimetype' => 'httpd/unix-directory');
- $fileData = array('size' => 1000, 'mtime' => 20, 'mimetype' => 'text/plain');
- $folders = ['folder', 'folder/subfolder', 'folder/sub2', 'folder/sub2/sub3'];
- $files = ['folder/foo.txt', 'folder/bar.txt', 'folder/subfolder/asd.txt', 'folder/sub2/qwerty.txt', 'folder/sub2/sub3/foo.txt'];
-
- foreach($folders as $folder){
- $this->cache->put($folder, $folderData);
- }
- foreach ($files as $file) {
- $this->cache->put($file, $fileData);
- }
-
- $this->cache->remove('folder');
- foreach ($files as $file) {
- $this->assertFalse($this->cache->inCache($file));
- }
- }
-
- public function folderDataProvider() {
-
- return array(
- array('folder'),
- // that was too easy, try something harder
- array('☺, WHITE SMILING FACE, UTF-8 hex E298BA'),
- // what about 4 byte utf-8
- array('😐, NEUTRAL_FACE, UTF-8 hex F09F9890'),
- // now the crazy stuff
- array(', UNASSIGNED PRIVATE USE, UTF-8 hex EF9890'),
- // and my favorite
- array('w͢͢͝h͡o͢͡ ̸͢k̵͟n̴͘ǫw̸̛s͘ ̀́w͘͢ḩ̵a҉̡͢t ̧̕h́o̵r͏̵rors̡ ̶͡͠lį̶e͟͟ ̶͝in͢ ͏t̕h̷̡͟e ͟͟d̛a͜r̕͡k̢̨ ͡h̴e͏a̷̢̡rt́͏ ̴̷͠ò̵̶f̸ u̧͘ní̛͜c͢͏o̷͏d̸͢e̡͝')
- );
- }
-
- public function testEncryptedFolder() {
- $file1 = 'folder';
- $file2 = 'folder/bar';
- $file3 = 'folder/foo';
- $data1 = array('size' => 100, 'mtime' => 50, 'mimetype' => 'httpd/unix-directory');
- $fileData = array();
- $fileData['bar'] = array('size' => 1000, 'encrypted' => 1, 'mtime' => 20, 'mimetype' => 'foo/file');
- $fileData['foo'] = array('size' => 20, 'encrypted' => 1, 'mtime' => 25, 'mimetype' => 'foo/file');
-
- $this->cache->put($file1, $data1);
- $this->cache->put($file2, $fileData['bar']);
- $this->cache->put($file3, $fileData['foo']);
-
- $content = $this->cache->getFolderContents($file1);
- $this->assertEquals(count($content), 2);
- foreach ($content as $cachedData) {
- $data = $fileData[$cachedData['name']];
- }
-
- $file4 = 'folder/unkownSize';
- $fileData['unkownSize'] = array('size' => -1, 'mtime' => 25, 'mimetype' => 'foo/file');
- $this->cache->put($file4, $fileData['unkownSize']);
-
- $this->assertEquals(-1, $this->cache->calculateFolderSize($file1));
-
- $fileData['unkownSize'] = array('size' => 5, 'mtime' => 25, 'mimetype' => 'foo/file');
- $this->cache->put($file4, $fileData['unkownSize']);
-
- $this->assertEquals(1025, $this->cache->calculateFolderSize($file1));
- // direct cache entry retrieval returns the original values
- $entry = $this->cache->get($file1);
- $this->assertEquals(1025, $entry['size']);
-
- $this->cache->remove($file2);
- $this->cache->remove($file3);
- $this->cache->remove($file4);
- $this->assertEquals(0, $this->cache->calculateFolderSize($file1));
-
- $this->cache->remove('folder');
- $this->assertFalse($this->cache->inCache('folder/foo'));
- $this->assertFalse($this->cache->inCache('folder/bar'));
- }
-
- public function testRootFolderSizeForNonHomeStorage() {
- $dir1 = 'knownsize';
- $dir2 = 'unknownsize';
- $fileData = array();
- $fileData[''] = array('size' => -1, 'mtime' => 20, 'mimetype' => 'httpd/unix-directory');
- $fileData[$dir1] = array('size' => 1000, 'mtime' => 20, 'mimetype' => 'httpd/unix-directory');
- $fileData[$dir2] = array('size' => -1, 'mtime' => 25, 'mimetype' => 'httpd/unix-directory');
-
- $this->cache->put('', $fileData['']);
- $this->cache->put($dir1, $fileData[$dir1]);
- $this->cache->put($dir2, $fileData[$dir2]);
-
- $this->assertTrue($this->cache->inCache($dir1));
- $this->assertTrue($this->cache->inCache($dir2));
-
- // check that root size ignored the unknown sizes
- $this->assertEquals(-1, $this->cache->calculateFolderSize(''));
-
- // clean up
- $this->cache->remove('');
- $this->cache->remove($dir1);
- $this->cache->remove($dir2);
-
- $this->assertFalse($this->cache->inCache($dir1));
- $this->assertFalse($this->cache->inCache($dir2));
- }
-
- function testStatus() {
- $this->assertEquals(\OC\Files\Cache\Cache::NOT_FOUND, $this->cache->getStatus('foo'));
- $this->cache->put('foo', array('size' => -1));
- $this->assertEquals(\OC\Files\Cache\Cache::PARTIAL, $this->cache->getStatus('foo'));
- $this->cache->put('foo', array('size' => -1, 'mtime' => 20, 'mimetype' => 'foo/file'));
- $this->assertEquals(\OC\Files\Cache\Cache::SHALLOW, $this->cache->getStatus('foo'));
- $this->cache->put('foo', array('size' => 10));
- $this->assertEquals(\OC\Files\Cache\Cache::COMPLETE, $this->cache->getStatus('foo'));
- }
-
- public function putWithAllKindOfQuotesData() {
- return [
- ['`backtick`'],
- ['´forward´'],
- ['\'single\''],
- ];
- }
-
- /**
- * @dataProvider putWithAllKindOfQuotesData
- * @param $fileName
- */
- public function testPutWithAllKindOfQuotes($fileName) {
-
- $this->assertEquals(\OC\Files\Cache\Cache::NOT_FOUND, $this->cache->get($fileName));
- $this->cache->put($fileName, array('size' => 20, 'mtime' => 25, 'mimetype' => 'foo/file', 'etag' => $fileName));
-
- $cacheEntry = $this->cache->get($fileName);
- $this->assertEquals($fileName, $cacheEntry['etag']);
- $this->assertEquals($fileName, $cacheEntry['path']);
- }
-
- function testSearch() {
- $file1 = 'folder';
- $file2 = 'folder/foobar';
- $file3 = 'folder/foo';
- $data1 = array('size' => 100, 'mtime' => 50, 'mimetype' => 'foo/folder');
- $fileData = array();
- $fileData['foobar'] = array('size' => 1000, 'mtime' => 20, 'mimetype' => 'foo/file');
- $fileData['foo'] = array('size' => 20, 'mtime' => 25, 'mimetype' => 'foo/file');
-
- $this->cache->put($file1, $data1);
- $this->cache->put($file2, $fileData['foobar']);
- $this->cache->put($file3, $fileData['foo']);
-
- $this->assertEquals(2, count($this->cache->search('%foo%')));
- $this->assertEquals(1, count($this->cache->search('foo')));
- $this->assertEquals(1, count($this->cache->search('%folder%')));
- $this->assertEquals(1, count($this->cache->search('folder%')));
- $this->assertEquals(3, count($this->cache->search('%')));
-
- // case insensitive search should match the same files
- $this->assertEquals(2, count($this->cache->search('%Foo%')));
- $this->assertEquals(1, count($this->cache->search('Foo')));
- $this->assertEquals(1, count($this->cache->search('%Folder%')));
- $this->assertEquals(1, count($this->cache->search('Folder%')));
-
- $this->assertEquals(3, count($this->cache->searchByMime('foo')));
- $this->assertEquals(2, count($this->cache->searchByMime('foo/file')));
- }
-
- function testSearchByTag() {
- $userId = $this->getUniqueId('user');
- \OC::$server->getUserManager()->createUser($userId, $userId);
- $this->loginAsUser($userId);
- $user = new \OC\User\User($userId, null);
-
- $file1 = 'folder';
- $file2 = 'folder/foobar';
- $file3 = 'folder/foo';
- $file4 = 'folder/foo2';
- $file5 = 'folder/foo3';
- $data1 = array('size' => 100, 'mtime' => 50, 'mimetype' => 'foo/folder');
- $fileData = array();
- $fileData['foobar'] = array('size' => 1000, 'mtime' => 20, 'mimetype' => 'foo/file');
- $fileData['foo'] = array('size' => 20, 'mtime' => 25, 'mimetype' => 'foo/file');
- $fileData['foo2'] = array('size' => 25, 'mtime' => 28, 'mimetype' => 'foo/file');
- $fileData['foo3'] = array('size' => 88, 'mtime' => 34, 'mimetype' => 'foo/file');
-
- $id1 = $this->cache->put($file1, $data1);
- $id2 = $this->cache->put($file2, $fileData['foobar']);
- $id3 = $this->cache->put($file3, $fileData['foo']);
- $id4 = $this->cache->put($file4, $fileData['foo2']);
- $id5 = $this->cache->put($file5, $fileData['foo3']);
-
- $tagManager = \OC::$server->getTagManager()->load('files', null, null, $userId);
- $this->assertTrue($tagManager->tagAs($id1, 'tag1'));
- $this->assertTrue($tagManager->tagAs($id1, 'tag2'));
- $this->assertTrue($tagManager->tagAs($id2, 'tag2'));
- $this->assertTrue($tagManager->tagAs($id3, 'tag1'));
- $this->assertTrue($tagManager->tagAs($id4, 'tag2'));
-
- // use tag name
- $results = $this->cache->searchByTag('tag1', $userId);
-
- $this->assertEquals(2, count($results));
-
- usort($results, function($value1, $value2) { return $value1['name'] >= $value2['name']; });
-
- $this->assertEquals('folder', $results[0]['name']);
- $this->assertEquals('foo', $results[1]['name']);
-
- // use tag id
- $tags = $tagManager->getTagsForUser($userId);
- $this->assertNotEmpty($tags);
- $tags = array_filter($tags, function($tag) { return $tag->getName() === 'tag2'; });
- $results = $this->cache->searchByTag(current($tags)->getId(), $userId);
- $this->assertEquals(3, count($results));
-
- usort($results, function($value1, $value2) { return $value1['name'] >= $value2['name']; });
-
- $this->assertEquals('folder', $results[0]['name']);
- $this->assertEquals('foo2', $results[1]['name']);
- $this->assertEquals('foobar', $results[2]['name']);
-
- $tagManager->delete('tag1');
- $tagManager->delete('tag2');
-
- $this->logout();
- $user = \OC::$server->getUserManager()->get($userId);
- if ($user !== null) { $user->delete(); }
- }
-
- function testMove() {
- $file1 = 'folder';
- $file2 = 'folder/bar';
- $file3 = 'folder/foo';
- $file4 = 'folder/foo/1';
- $file5 = 'folder/foo/2';
- $data = array('size' => 100, 'mtime' => 50, 'mimetype' => 'foo/bar');
- $folderData = array('size' => 100, 'mtime' => 50, 'mimetype' => 'httpd/unix-directory');
-
- $this->cache->put($file1, $folderData);
- $this->cache->put($file2, $folderData);
- $this->cache->put($file3, $folderData);
- $this->cache->put($file4, $data);
- $this->cache->put($file5, $data);
-
- /* simulate a second user with a different storage id but the same folder structure */
- $this->cache2->put($file1, $folderData);
- $this->cache2->put($file2, $folderData);
- $this->cache2->put($file3, $folderData);
- $this->cache2->put($file4, $data);
- $this->cache2->put($file5, $data);
-
- $this->cache->move('folder/foo', 'folder/foobar');
-
- $this->assertFalse($this->cache->inCache('folder/foo'));
- $this->assertFalse($this->cache->inCache('folder/foo/1'));
- $this->assertFalse($this->cache->inCache('folder/foo/2'));
-
- $this->assertTrue($this->cache->inCache('folder/bar'));
- $this->assertTrue($this->cache->inCache('folder/foobar'));
- $this->assertTrue($this->cache->inCache('folder/foobar/1'));
- $this->assertTrue($this->cache->inCache('folder/foobar/2'));
-
- /* the folder structure of the second user must not change! */
- $this->assertTrue($this->cache2->inCache('folder/bar'));
- $this->assertTrue($this->cache2->inCache('folder/foo'));
- $this->assertTrue($this->cache2->inCache('folder/foo/1'));
- $this->assertTrue($this->cache2->inCache('folder/foo/2'));
-
- $this->assertFalse($this->cache2->inCache('folder/foobar'));
- $this->assertFalse($this->cache2->inCache('folder/foobar/1'));
- $this->assertFalse($this->cache2->inCache('folder/foobar/2'));
- }
-
- function testGetIncomplete() {
- $file1 = 'folder1';
- $file2 = 'folder2';
- $file3 = 'folder3';
- $file4 = 'folder4';
- $data = array('size' => 10, 'mtime' => 50, 'mimetype' => 'foo/bar');
-
- $this->cache->put($file1, $data);
- $data['size'] = -1;
- $this->cache->put($file2, $data);
- $this->cache->put($file3, $data);
- $data['size'] = 12;
- $this->cache->put($file4, $data);
-
- $this->assertEquals($file3, $this->cache->getIncomplete());
- }
-
- function testNonExisting() {
- $this->assertFalse($this->cache->get('foo.txt'));
- $this->assertEquals(array(), $this->cache->getFolderContents('foo'));
- }
-
- function testGetById() {
- $storageId = $this->storage->getId();
- $data = array('size' => 1000, 'mtime' => 20, 'mimetype' => 'foo/file');
- $id = $this->cache->put('foo', $data);
-
- if (strlen($storageId) > 64) {
- $storageId = md5($storageId);
- }
- $this->assertEquals(array($storageId, 'foo'), \OC\Files\Cache\Cache::getById($id));
- }
-
- function testStorageMTime() {
- $data = array('size' => 1000, 'mtime' => 20, 'mimetype' => 'foo/file');
- $this->cache->put('foo', $data);
- $cachedData = $this->cache->get('foo');
- $this->assertEquals($data['mtime'], $cachedData['storage_mtime']); //if no storage_mtime is saved, mtime should be used
-
- $this->cache->put('foo', array('storage_mtime' => 30)); //when setting storage_mtime, mtime is also set
- $cachedData = $this->cache->get('foo');
- $this->assertEquals(30, $cachedData['storage_mtime']);
- $this->assertEquals(30, $cachedData['mtime']);
-
- $this->cache->put('foo', array('mtime' => 25)); //setting mtime does not change storage_mtime
- $cachedData = $this->cache->get('foo');
- $this->assertEquals(30, $cachedData['storage_mtime']);
- $this->assertEquals(25, $cachedData['mtime']);
- }
-
- function testLongId() {
- $storage = new LongId(array());
- $cache = $storage->getCache();
- $storageId = $storage->getId();
- $data = array('size' => 1000, 'mtime' => 20, 'mimetype' => 'foo/file');
- $id = $cache->put('foo', $data);
- $this->assertEquals(array(md5($storageId), 'foo'), \OC\Files\Cache\Cache::getById($id));
- }
-
- /**
- * this test show the bug resulting if we have no normalizer installed
- */
- public function testWithoutNormalizer() {
- // folder name "Schön" with U+00F6 (normalized)
- $folderWith00F6 = "\x53\x63\x68\xc3\xb6\x6e";
-
- // folder name "Schön" with U+0308 (un-normalized)
- $folderWith0308 = "\x53\x63\x68\x6f\xcc\x88\x6e";
-
- /**
- * @var \OC\Files\Cache\Cache | \PHPUnit_Framework_MockObject_MockObject $cacheMock
- */
- $cacheMock = $this->getMock('\OC\Files\Cache\Cache', array('normalize'), array($this->storage), '', true);
-
- $cacheMock->expects($this->any())
- ->method('normalize')
- ->will($this->returnArgument(0));
-
- $data = array('size' => 100, 'mtime' => 50, 'mimetype' => 'httpd/unix-directory');
-
- // put root folder
- $this->assertFalse($cacheMock->get('folder'));
- $this->assertGreaterThan(0, $cacheMock->put('folder', $data));
-
- // put un-normalized folder
- $this->assertFalse($cacheMock->get('folder/' . $folderWith0308));
- $this->assertGreaterThan(0, $cacheMock->put('folder/' . $folderWith0308, $data));
-
- // get un-normalized folder by name
- $unNormalizedFolderName = $cacheMock->get('folder/' . $folderWith0308);
-
- // check if database layer normalized the folder name (this should not happen)
- $this->assertEquals($folderWith0308, $unNormalizedFolderName['name']);
-
- // put normalized folder
- $this->assertFalse($cacheMock->get('folder/' . $folderWith00F6));
- $this->assertGreaterThan(0, $cacheMock->put('folder/' . $folderWith00F6, $data));
-
- // this is our bug, we have two different hashes with the same name (Schön)
- $this->assertEquals(2, count($cacheMock->getFolderContents('folder')));
- }
-
- /**
- * this test shows that there is no bug if we use the normalizer
- */
- public function testWithNormalizer() {
-
- if (!class_exists('Patchwork\PHP\Shim\Normalizer')) {
- $this->markTestSkipped('The 3rdparty Normalizer extension is not available.');
- return;
- }
-
- // folder name "Schön" with U+00F6 (normalized)
- $folderWith00F6 = "\x53\x63\x68\xc3\xb6\x6e";
-
- // folder name "Schön" with U+0308 (un-normalized)
- $folderWith0308 = "\x53\x63\x68\x6f\xcc\x88\x6e";
-
- $data = array('size' => 100, 'mtime' => 50, 'mimetype' => 'httpd/unix-directory');
-
- // put root folder
- $this->assertFalse($this->cache->get('folder'));
- $this->assertGreaterThan(0, $this->cache->put('folder', $data));
-
- // put un-normalized folder
- $this->assertFalse($this->cache->get('folder/' . $folderWith0308));
- $this->assertGreaterThan(0, $this->cache->put('folder/' . $folderWith0308, $data));
-
- // get un-normalized folder by name
- $unNormalizedFolderName = $this->cache->get('folder/' . $folderWith0308);
-
- // check if folder name was normalized
- $this->assertEquals($folderWith00F6, $unNormalizedFolderName['name']);
-
- // put normalized folder
- $this->assertInstanceOf('\OCP\Files\Cache\ICacheEntry', $this->cache->get('folder/' . $folderWith00F6));
- $this->assertGreaterThan(0, $this->cache->put('folder/' . $folderWith00F6, $data));
-
- // at this point we should have only one folder named "Schön"
- $this->assertEquals(1, count($this->cache->getFolderContents('folder')));
- }
-
- function bogusPathNamesProvider() {
- return array(
- array('/bogus.txt', 'bogus.txt'),
- array('//bogus.txt', 'bogus.txt'),
- array('bogus/', 'bogus'),
- array('bogus//', 'bogus'),
- );
- }
-
- /**
- * Test bogus paths with leading or doubled slashes
- *
- * @dataProvider bogusPathNamesProvider
- */
- public function testBogusPaths($bogusPath, $fixedBogusPath) {
- $data = array('size' => 100, 'mtime' => 50, 'mimetype' => 'httpd/unix-directory');
-
- // put root folder
- $this->assertFalse($this->cache->get(''));
- $parentId = $this->cache->put('', $data);
- $this->assertGreaterThan(0, $parentId);
-
- $this->assertGreaterThan(0, $this->cache->put($bogusPath, $data));
-
- $newData = $this->cache->get($fixedBogusPath);
- $this->assertNotFalse($newData);
-
- $this->assertEquals($fixedBogusPath, $newData['path']);
- // parent is the correct one, resolved properly (they used to not be)
- $this->assertEquals($parentId, $newData['parent']);
-
- $newDataFromBogus = $this->cache->get($bogusPath);
- // same entry
- $this->assertEquals($newData, $newDataFromBogus);
- }
-
- public function testNoReuseOfFileId() {
- $data1 = array('size' => 100, 'mtime' => 50, 'mimetype' => 'text/plain');
- $this->cache->put('somefile.txt', $data1);
- $info = $this->cache->get('somefile.txt');
- $fileId = $info['fileid'];
- $this->cache->remove('somefile.txt');
- $data2 = array('size' => 200, 'mtime' => 100, 'mimetype' => 'text/plain');
- $this->cache->put('anotherfile.txt', $data2);
- $info2 = $this->cache->get('anotherfile.txt');
- $fileId2 = $info2['fileid'];
- $this->assertNotEquals($fileId, $fileId2);
- }
-
- public function escapingProvider() {
- return [
- ['foo'],
- ['o%'],
- ['oth_r'],
- ];
- }
-
- /**
- * @param string $name
- * @dataProvider escapingProvider
- */
- public function testEscaping($name) {
- $data = array('size' => 100, 'mtime' => 50, 'mimetype' => 'text/plain');
- $this->cache->put($name, $data);
- $this->assertTrue($this->cache->inCache($name));
- $retrievedData = $this->cache->get($name);
- foreach ($data as $key => $value) {
- $this->assertEquals($value, $retrievedData[$key]);
- }
- $this->cache->move($name, $name . 'asd');
- $this->assertFalse($this->cache->inCache($name));
- $this->assertTrue($this->cache->inCache($name . 'asd'));
- $this->cache->remove($name . 'asd');
- $this->assertFalse($this->cache->inCache($name . 'asd'));
- $folderData = array('size' => 100, 'mtime' => 50, 'mimetype' => 'httpd/unix-directory');
- $this->cache->put($name, $folderData);
- $this->cache->put('other', $folderData);
- $childs = ['asd', 'bar', 'foo', 'sub/folder'];
- $this->cache->put($name . '/sub', $folderData);
- $this->cache->put('other/sub', $folderData);
- foreach ($childs as $child) {
- $this->cache->put($name . '/' . $child, $data);
- $this->cache->put('other/' . $child, $data);
- $this->assertTrue($this->cache->inCache($name . '/' . $child));
- }
- $this->cache->move($name, $name . 'asd');
- foreach ($childs as $child) {
- $this->assertTrue($this->cache->inCache($name . 'asd/' . $child));
- $this->assertTrue($this->cache->inCache('other/' . $child));
- }
- foreach ($childs as $child) {
- $this->cache->remove($name . 'asd/' . $child);
- $this->assertFalse($this->cache->inCache($name . 'asd/' . $child));
- $this->assertTrue($this->cache->inCache('other/' . $child));
- }
- }
-
- protected function tearDown() {
- if ($this->cache) {
- $this->cache->clear();
- }
-
- parent::tearDown();
- }
-
- protected function setUp() {
- parent::setUp();
-
- $this->storage = new \OC\Files\Storage\Temporary(array());
- $this->storage2 = new \OC\Files\Storage\Temporary(array());
- $this->cache = new \OC\Files\Cache\Cache($this->storage);
- $this->cache2 = new \OC\Files\Cache\Cache($this->storage2);
- }
-}