Still return quota value when free space is unknown

Fixed the quota storage wrapper to correctly return the quota value when
the free space is not known (which usually happens when the disk_free_space
function is disabled)
This commit is contained in:
Vincent Petry 2014-03-19 19:07:11 +01:00
parent 6252c248c2
commit 66bc0f0848
2 changed files with 26 additions and 1 deletions

View File

@ -69,7 +69,14 @@ class Quota extends Wrapper {
return \OC\Files\SPACE_NOT_COMPUTED; return \OC\Files\SPACE_NOT_COMPUTED;
} else { } else {
$free = $this->storage->free_space($path); $free = $this->storage->free_space($path);
return min($free, (max($this->quota - $used, 0))); $quotaFree = max($this->quota - $used, 0);
// if free space is known
if ($free >= 0) {
$free = min($free, $quotaFree);
} else {
$free = $quotaFree;
}
return $free;
} }
} }
} }

View File

@ -61,6 +61,24 @@ class Quota extends \Test\Files\Storage\Storage {
$this->assertEquals(6, $instance->free_space('')); $this->assertEquals(6, $instance->free_space(''));
} }
public function testFreeSpaceWithUnknownDiskSpace() {
$storage = $this->getMock(
'\OC\Files\Storage\Local',
array('free_space'),
array(array('datadir' => $this->tmpDir))
);
$storage->expects($this->any())
->method('free_space')
->will($this->returnValue(-2));
$storage->getScanner()->scan('');
$instance = new \OC\Files\Storage\Wrapper\Quota(array('storage' => $storage, 'quota' => 9));
$instance->getCache()->put(
'', array('size' => 3, 'unencrypted_size' => 0)
);
$this->assertEquals(6, $instance->free_space(''));
}
public function testFreeSpaceWithUsedSpaceAndEncryption() { public function testFreeSpaceWithUsedSpaceAndEncryption() {
$instance = $this->getLimitedStorage(9); $instance = $this->getLimitedStorage(9);
$instance->getCache()->put( $instance->getCache()->put(