added append() to Wrapped/Share as proxy to Native/Share

This commit is contained in:
Raffael Sahli 2018-08-17 14:17:04 +02:00 committed by Robin Appelman
commit 1cb1f3f56a
5 changed files with 32 additions and 29 deletions

View file

@ -325,7 +325,7 @@ class NativeShare extends AbstractShare {
* @return INotifyHandler * @return INotifyHandler
*/ */
public function notify($path) { public function notify($path) {
// php-smbclient does support notify (https://github.com/eduardok/libsmbclient-php/issues/29) // php-smbclient does not support notify (https://github.com/eduardok/libsmbclient-php/issues/29)
// so we use the smbclient based backend for this // so we use the smbclient based backend for this
if (!Server::available($this->server->getSystem())) { if (!Server::available($this->server->getSystem())) {
throw new DependencyException('smbclient not found in path for notify command'); throw new DependencyException('smbclient not found in path for notify command');

View file

@ -19,6 +19,8 @@ use Icewind\SMB\INotifyHandler;
use Icewind\SMB\IServer; use Icewind\SMB\IServer;
use Icewind\SMB\ISystem; use Icewind\SMB\ISystem;
use Icewind\Streams\CallbackWrapper; use Icewind\Streams\CallbackWrapper;
use Icewind\SMB\Native\NativeShare;
use Icewind\SMB\Native\NativeServer;
class Share extends AbstractShare { class Share extends AbstractShare {
/** /**
@ -344,14 +346,22 @@ class Share extends AbstractShare {
} }
/** /**
* Append on wrapped smbclient not supported * Append to stream
* Note: smbclient does not support it so we use php-libsmbclient
* *
* @param string $source * @param string $target
* *
* @throws \Icewind\SMB\Exception\InvalidRequestException * @throws \Icewind\SMB\Exception\DependencyException
*/ * @throws \Icewind\SMB\Exception\NotFoundException
public function append($source) { * @throws \Icewind\SMB\Exception\InvalidTypeException
throw new InvalidRequestException("Not supported, use Icewind\SMB\Native\NativeShare"); */
public function append($target) {
if (!NativeServer::available($this->server->getSystem())) {
throw new DependencyException('php-libsmbclient not installed');
}
$share = new NativeShare($this->server, $this->getName());
return $share->append($target);
} }
/** /**

View file

@ -474,6 +474,21 @@ abstract class AbstractShareTest extends TestCase {
unlink($tmpFile1); unlink($tmpFile1);
} }
public function testAppendStream() {
$fh = $this->share->append($this->root . '/' . $name);
fwrite($fh, 'foo');
fclose($fh);
$fh = $this->share->append($this->root . '/' . $name);
fwrite($fh, 'bar');
fclose($fh);
$tmpFile1 = tempnam('/tmp', 'smb_test_');
$this->assertEquals('foobar', file_get_contents($tmpFile1));
$this->share->del($this->root . '/' . $name);
unlink($tmpFile1);
}
/** /**
* @dataProvider invalidPathProvider * @dataProvider invalidPathProvider
* @expectedException \Icewind\SMB\Exception\InvalidPathException * @expectedException \Icewind\SMB\Exception\InvalidPathException

View file

@ -39,19 +39,4 @@ class NativeShareTest extends AbstractShareTest {
} }
$this->share->mkdir($this->root); $this->share->mkdir($this->root);
} }
public function testAppendStream() {
$fh = $this->share->append($this->root . '/' . $name);
fwrite($fh, 'foo');
fclose($fh);
$fh = $this->share->append($this->root . '/' . $name);
fwrite($fh, 'bar');
fclose($fh);
$tmpFile1 = tempnam('/tmp', 'smb_test_');
$this->assertEquals('foobar', file_get_contents($tmpFile1));
$this->share->del($this->root . '/' . $name);
unlink($tmpFile1);
}
} }

View file

@ -57,11 +57,4 @@ class ShareTest extends AbstractShareTest {
$share = $this->server->getShare($this->config->share); $share = $this->server->getShare($this->config->share);
$share->dir($this->root); $share->dir($this->root);
} }
/**
* @expectedException \Icewind\SMB\Exception\InvalidRequestException
*/
public function testAppendStream() {
$fh = $this->share->append($this->root . '/' . $name);
}
} }