diff options
Diffstat (limited to 'apps/files_external/3rdparty/icewind/smb/tests/NativeStream.php')
-rw-r--r-- | apps/files_external/3rdparty/icewind/smb/tests/NativeStream.php | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/apps/files_external/3rdparty/icewind/smb/tests/NativeStream.php b/apps/files_external/3rdparty/icewind/smb/tests/NativeStream.php new file mode 100644 index 00000000000..2d7b62fedeb --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/tests/NativeStream.php @@ -0,0 +1,143 @@ +<?php +/** + * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB\Test; + +use Icewind\SMB\NativeServer; + +class NativeStream extends \PHPUnit_Framework_TestCase { + /** + * @var \Icewind\SMB\Server $server + */ + protected $server; + + /** + * @var \Icewind\SMB\NativeShare $share + */ + protected $share; + + /** + * @var string $root + */ + protected $root; + + protected $config; + + public function setUp() { + if (!function_exists('smbclient_state_new')) { + $this->markTestSkipped('libsmbclient php extension not installed'); + } + $this->config = json_decode(file_get_contents(__DIR__ . '/config.json')); + $this->server = new NativeServer($this->config->host, $this->config->user, $this->config->password); + $this->share = $this->server->getShare($this->config->share); + if ($this->config->root) { + $this->root = '/' . $this->config->root . '/' . uniqid(); + } else { + $this->root = '/' . uniqid(); + } + $this->share->mkdir($this->root); + } + + private function getTextFile() { + $text = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua'; + $file = tempnam('/tmp', 'smb_test_'); + file_put_contents($file, $text); + return $file; + } + + public function testSeekTell() { + $sourceFile = $this->getTextFile(); + $this->share->put($sourceFile, $this->root . '/foobar'); + $fh = $this->share->read($this->root . '/foobar'); + $content = fread($fh, 3); + $this->assertEquals('Lor', $content); + + fseek($fh, -2, SEEK_CUR); + + $content = fread($fh, 3); + $this->assertEquals('ore', $content); + + fseek($fh, 3, SEEK_SET); + + $content = fread($fh, 3); + $this->assertEquals('em ', $content); + + fseek($fh, -3, SEEK_END); + + $content = fread($fh, 3); + $this->assertEquals('qua', $content); + + fseek($fh, -3, SEEK_END); + $this->assertEquals(120, ftell($fh)); + } + + public function testStat() { + $sourceFile = $this->getTextFile(); + $this->share->put($sourceFile, $this->root . '/foobar'); + $fh = $this->share->read($this->root . '/foobar'); + $stat = fstat($fh); + $this->assertEquals(filesize($sourceFile), $stat['size']); + unlink($sourceFile); + } + + public function testTruncate() { + if (version_compare(phpversion(), '5.4.0', '<')) { + $this->markTestSkipped('php <5.4 doesn\'t support truncate for stream wrappers'); + } + $fh = $this->share->write($this->root . '/foobar'); + fwrite($fh, 'foobar'); + ftruncate($fh, 3); + fclose($fh); + + $fh = $this->share->read($this->root . '/foobar'); + $this->assertEquals('foo', stream_get_contents($fh)); + } + + public function testEOF() { + if (version_compare(phpversion(), '5.4.0', '<')) { + $this->markTestSkipped('php <5.4 doesn\'t support truncate for stream wrappers'); + } + $fh = $this->share->write($this->root . '/foobar'); + fwrite($fh, 'foobar'); + fclose($fh); + + $fh = $this->share->read($this->root . '/foobar'); + fread($fh, 3); + $this->assertFalse(feof($fh)); + fread($fh, 5); + $this->assertTrue(feof($fh)); + } + + public function testLockUnsupported() { + $fh = $this->share->write($this->root . '/foobar'); + $this->assertFalse(flock($fh, LOCK_SH)); + } + + public function testSetOptionUnsupported() { + $fh = $this->share->write($this->root . '/foobar'); + $this->assertFalse(stream_set_blocking($fh, false)); + } + + public function tearDown() { + if ($this->share) { + $this->cleanDir($this->root); + } + unset($this->share); + } + + public function cleanDir($dir) { + $content = $this->share->dir($dir); + foreach ($content as $metadata) { + if ($metadata->isDirectory()) { + $this->cleanDir($metadata->getPath()); + } else { + $this->share->del($metadata->getPath()); + } + } + $this->share->rmdir($dir); + } +} |