123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- <?php
- /**
- * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
- namespace Test;
- use OC\Files\Storage\Temporary;
- /**
- * Test the storage functions of OC_Helper
- *
- * @group DB
- */
- class HelperStorageTest extends \Test\TestCase {
- /** @var string */
- private $user;
- /** @var \OC\Files\Storage\Storage */
- private $storageMock;
- /** @var \OC\Files\Storage\Storage */
- private $storage;
- protected function setUp() {
- parent::setUp();
- $this->user = $this->getUniqueID('user_');
- \OC::$server->getUserManager()->createUser($this->user, $this->user);
- $this->storage = \OC\Files\Filesystem::getStorage('/');
- \OC\Files\Filesystem::tearDown();
- \OC_User::setUserId($this->user);
- \OC\Files\Filesystem::init($this->user, '/' . $this->user . '/files');
- \OC\Files\Filesystem::clearMounts();
- $this->storageMock = null;
- }
- protected function tearDown() {
- $this->user = null;
- if ($this->storageMock) {
- $this->storageMock->getCache()->clear();
- $this->storageMock = null;
- }
- \OC\Files\Filesystem::tearDown();
- \OC\Files\Filesystem::mount($this->storage, array(), '/');
- \OC_User::setUserId('');
- $user = \OC::$server->getUserManager()->get($this->user);
- if ($user !== null) { $user->delete(); }
- \OC::$server->getConfig()->deleteAllUserValues($this->user);
- parent::tearDown();
- }
- /**
- * Returns a storage mock that returns the given value as
- * free space
- *
- * @param int $freeSpace free space value
- * @return \OC\Files\Storage\Storage
- */
- private function getStorageMock($freeSpace = 12) {
- $this->storageMock = $this->getMockBuilder(Temporary::class)
- ->setMethods(['free_space'])
- ->setConstructorArgs([''])
- ->getMock();
- $this->storageMock->expects($this->once())
- ->method('free_space')
- ->will($this->returnValue(12));
- return $this->storageMock;
- }
- /**
- * Test getting the storage info
- */
- function testGetStorageInfo() {
- $homeStorage = $this->getStorageMock(12);
- \OC\Files\Filesystem::mount($homeStorage, array(), '/' . $this->user . '/files');
- $homeStorage->file_put_contents('test.txt', '01234');
- $storageInfo = \OC_Helper::getStorageInfo('');
- $this->assertEquals(12, $storageInfo['free']);
- $this->assertEquals(5, $storageInfo['used']);
- $this->assertEquals(17, $storageInfo['total']);
- }
- /**
- * Test getting the storage info, ignoring extra mount points
- */
- function testGetStorageInfoExcludingExtStorage() {
- $homeStorage = $this->getStorageMock(12);
- \OC\Files\Filesystem::mount($homeStorage, array(), '/' . $this->user . '/files');
- $homeStorage->file_put_contents('test.txt', '01234');
- $extStorage = new \OC\Files\Storage\Temporary(array());
- $extStorage->file_put_contents('extfile.txt', 'abcdefghijklmnopq');
- $extStorage->getScanner()->scan(''); // update root size
- \OC\Files\Filesystem::mount($extStorage, array(), '/' . $this->user . '/files/ext');
- $storageInfo = \OC_Helper::getStorageInfo('');
- $this->assertEquals(12, $storageInfo['free']);
- $this->assertEquals(5, $storageInfo['used']);
- $this->assertEquals(17, $storageInfo['total']);
- }
- /**
- * Test getting the storage info, including extra mount points
- */
- function testGetStorageInfoIncludingExtStorage() {
- $homeStorage = new \OC\Files\Storage\Temporary(array());
- \OC\Files\Filesystem::mount($homeStorage, array(), '/' . $this->user . '/files');
- $homeStorage->file_put_contents('test.txt', '01234');
- $extStorage = new \OC\Files\Storage\Temporary(array());
- $extStorage->file_put_contents('extfile.txt', 'abcdefghijklmnopq');
- $extStorage->getScanner()->scan(''); // update root size
- \OC\Files\Filesystem::mount($extStorage, array(), '/' . $this->user . '/files/ext');
- $config = \OC::$server->getConfig();
- $oldConfig = $config->getSystemValue('quota_include_external_storage', false);
- $config->setSystemValue('quota_include_external_storage', 'true');
- $config->setUserValue($this->user, 'files', 'quota', '25');
- $storageInfo = \OC_Helper::getStorageInfo('');
- $this->assertEquals(3, $storageInfo['free']);
- $this->assertEquals(22, $storageInfo['used']);
- $this->assertEquals(25, $storageInfo['total']);
- $config->setSystemValue('quota_include_external_storage', $oldConfig);
- $config->setUserValue($this->user, 'files', 'quota', 'default');
- }
- /**
- * Test getting the storage info excluding extra mount points
- * when user has no quota set, even when quota ext storage option
- * was set
- */
- function testGetStorageInfoIncludingExtStorageWithNoUserQuota() {
- $homeStorage = $this->getStorageMock(12);
- \OC\Files\Filesystem::mount($homeStorage, array(), '/' . $this->user . '/files');
- $homeStorage->file_put_contents('test.txt', '01234');
- $extStorage = new \OC\Files\Storage\Temporary(array());
- $extStorage->file_put_contents('extfile.txt', 'abcdefghijklmnopq');
- $extStorage->getScanner()->scan(''); // update root size
- \OC\Files\Filesystem::mount($extStorage, array(), '/' . $this->user . '/files/ext');
- $config = \OC::$server->getConfig();
- $oldConfig = $config->getSystemValue('quota_include_external_storage', false);
- $config->setSystemValue('quota_include_external_storage', 'true');
- $storageInfo = \OC_Helper::getStorageInfo('');
- $this->assertEquals(12, $storageInfo['free'], '12 bytes free in home storage');
- $this->assertEquals(22, $storageInfo['used'], '5 bytes of home storage and 17 bytes of the temporary storage are used');
- $this->assertEquals(34, $storageInfo['total'], '5 bytes used and 12 bytes free in home storage as well as 17 bytes used in temporary storage');
- $config->setSystemValue('quota_include_external_storage', $oldConfig);
- }
- /**
- * Test getting the storage info with quota enabled
- */
- function testGetStorageInfoWithQuota() {
- $homeStorage = $this->getStorageMock(12);
- $homeStorage->file_put_contents('test.txt', '01234');
- $homeStorage = new \OC\Files\Storage\Wrapper\Quota(
- array(
- 'storage' => $homeStorage,
- 'quota' => 7
- )
- );
- \OC\Files\Filesystem::mount($homeStorage, array(), '/' . $this->user . '/files');
- $storageInfo = \OC_Helper::getStorageInfo('');
- $this->assertEquals(2, $storageInfo['free']);
- $this->assertEquals(5, $storageInfo['used']);
- $this->assertEquals(7, $storageInfo['total']);
- }
- /**
- * Test getting the storage info when data exceeds quota
- */
- function testGetStorageInfoWhenSizeExceedsQuota() {
- $homeStorage = $this->getStorageMock(12);
- $homeStorage->file_put_contents('test.txt', '0123456789');
- $homeStorage = new \OC\Files\Storage\Wrapper\Quota(
- array(
- 'storage' => $homeStorage,
- 'quota' => 7
- )
- );
- \OC\Files\Filesystem::mount($homeStorage, array(), '/' . $this->user . '/files');
- $storageInfo = \OC_Helper::getStorageInfo('');
- $this->assertEquals(0, $storageInfo['free']);
- $this->assertEquals(10, $storageInfo['used']);
- // total = quota
- $this->assertEquals(7, $storageInfo['total']);
- }
- /**
- * Test getting the storage info when the remaining
- * free storage space is less than the quota
- */
- function testGetStorageInfoWhenFreeSpaceLessThanQuota() {
- $homeStorage = $this->getStorageMock(12);
- $homeStorage->file_put_contents('test.txt', '01234');
- $homeStorage = new \OC\Files\Storage\Wrapper\Quota(
- array(
- 'storage' => $homeStorage,
- 'quota' => 18
- )
- );
- \OC\Files\Filesystem::mount($homeStorage, array(), '/' . $this->user . '/files');
- $storageInfo = \OC_Helper::getStorageInfo('');
- $this->assertEquals(12, $storageInfo['free']);
- $this->assertEquals(5, $storageInfo['used']);
- // total = free + used (because quota > total)
- $this->assertEquals(17, $storageInfo['total']);
- }
- }
|