From 5b6d1d79d06e404ce4a52f75393a98f52769da48 Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Thu, 14 Nov 2013 18:39:39 +0100 Subject: [PATCH] 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 --- apps/files_external/lib/smb.php | 12 ++++++++++++ tests/lib/files/storage/storage.php | 16 ++++++++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/apps/files_external/lib/smb.php b/apps/files_external/lib/smb.php index c464fa9107..5bff597fdc 100644 --- a/apps/files_external/lib/smb.php +++ b/apps/files_external/lib/smb.php @@ -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 diff --git a/tests/lib/files/storage/storage.php b/tests/lib/files/storage/storage.php index f72a5276db..6c433e9547 100644 --- a/tests/lib/files/storage/storage.php +++ b/tests/lib/files/storage/storage.php @@ -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';