Fixed SMB file deletion success detection

Since unlink() smb4php doesn't return true on deletion success, we need
to check whether the file was deleted to confirm success.

Fixes #5866
This commit is contained in:
Vincent Petry 2013-11-14 18:39:39 +01:00
parent 8ab40f1959
commit 5b6d1d79d0
2 changed files with 26 additions and 2 deletions

View File

@ -81,6 +81,18 @@ class SMB extends \OC\Files\Storage\StreamWrapper{
}
}
/**
* Unlinks file
* @param string @path
*/
public function unlink($path) {
unlink($this->constructUrl($path));
clearstatcache();
// smb4php still returns false even on success so
// check here whether file was really deleted
return !file_exists($path);
}
/**
* check if a file or folder has been updated since $time
* @param string $path

View File

@ -182,8 +182,9 @@ abstract class Storage extends \PHPUnit_Framework_TestCase {
$this->assertTrue($this->instance->hasUpdated('/lorem.txt', $ctimeStart - 5));
$this->assertTrue($this->instance->hasUpdated('/', $ctimeStart - 5));
$this->assertTrue(($ctimeStart - 5) <= $mTime);
$this->assertTrue($mTime <= ($ctimeEnd + 1));
// check that ($ctimeStart - 5) <= $mTime <= ($ctimeEnd + 1)
$this->assertGreaterThanOrEqual(($ctimeStart - 5), $mTime);
$this->assertLessThanOrEqual(($ctimeEnd + 1), $mTime);
$this->assertEquals(filesize($textFile), $this->instance->filesize('/lorem.txt'));
$stat = $this->instance->stat('/lorem.txt');
@ -202,6 +203,17 @@ abstract class Storage extends \PHPUnit_Framework_TestCase {
$this->assertTrue($this->instance->hasUpdated('/', $mtimeStart - 5));
}
public function testUnlink() {
$textFile = \OC::$SERVERROOT . '/tests/data/lorem.txt';
$this->instance->file_put_contents('/lorem.txt', file_get_contents($textFile));
$this->assertTrue($this->instance->file_exists('/lorem.txt'));
$this->assertTrue($this->instance->unlink('/lorem.txt'));
$this->assertFalse($this->instance->file_exists('/lorem.txt'));
}
public function testFOpen() {
$textFile = \OC::$SERVERROOT . '/tests/data/lorem.txt';