Merge pull request #3892 from owncloud/static-streamwrapper
Improvements for the static:// streamwrapper
This commit is contained in:
commit
30a403e327
|
@ -9,6 +9,8 @@
|
|||
namespace OC\Files\Stream;
|
||||
|
||||
class StaticStream {
|
||||
const MODE_FILE = 0100000;
|
||||
|
||||
public $context;
|
||||
protected static $data = array();
|
||||
|
||||
|
@ -26,6 +28,10 @@ class StaticStream {
|
|||
public function stream_flush() {
|
||||
}
|
||||
|
||||
public static function clear() {
|
||||
self::$data = array();
|
||||
}
|
||||
|
||||
public function stream_open($path, $mode, $options, &$opened_path) {
|
||||
switch ($mode[0]) {
|
||||
case 'r':
|
||||
|
@ -94,36 +100,7 @@ class StaticStream {
|
|||
}
|
||||
|
||||
public function stream_stat() {
|
||||
$size = strlen(self::$data[$this->path]);
|
||||
$time = time();
|
||||
return array(
|
||||
0 => 0,
|
||||
'dev' => 0,
|
||||
1 => 0,
|
||||
'ino' => 0,
|
||||
2 => 0777,
|
||||
'mode' => 0777,
|
||||
3 => 1,
|
||||
'nlink' => 1,
|
||||
4 => 0,
|
||||
'uid' => 0,
|
||||
5 => 0,
|
||||
'gid' => 0,
|
||||
6 => '',
|
||||
'rdev' => '',
|
||||
7 => $size,
|
||||
'size' => $size,
|
||||
8 => $time,
|
||||
'atime' => $time,
|
||||
9 => $time,
|
||||
'mtime' => $time,
|
||||
10 => $time,
|
||||
'ctime' => $time,
|
||||
11 => -1,
|
||||
'blksize' => -1,
|
||||
12 => -1,
|
||||
'blocks' => -1,
|
||||
);
|
||||
return $this->url_stat($this->path);
|
||||
}
|
||||
|
||||
public function stream_tell() {
|
||||
|
@ -157,34 +134,22 @@ class StaticStream {
|
|||
if (isset(self::$data[$path])) {
|
||||
$size = strlen(self::$data[$path]);
|
||||
$time = time();
|
||||
return array(
|
||||
0 => 0,
|
||||
$data = array(
|
||||
'dev' => 0,
|
||||
1 => 0,
|
||||
'ino' => 0,
|
||||
2 => 0777,
|
||||
'mode' => 0777,
|
||||
3 => 1,
|
||||
'mode' => self::MODE_FILE | 0777,
|
||||
'nlink' => 1,
|
||||
4 => 0,
|
||||
'uid' => 0,
|
||||
5 => 0,
|
||||
'gid' => 0,
|
||||
6 => '',
|
||||
'rdev' => '',
|
||||
7 => $size,
|
||||
'size' => $size,
|
||||
8 => $time,
|
||||
'atime' => $time,
|
||||
9 => $time,
|
||||
'mtime' => $time,
|
||||
10 => $time,
|
||||
'ctime' => $time,
|
||||
11 => -1,
|
||||
'blksize' => -1,
|
||||
12 => -1,
|
||||
'blocks' => -1,
|
||||
);
|
||||
return array_values($data) + $data;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,68 @@
|
|||
<?php
|
||||
/**
|
||||
* Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
* See the COPYING-README file.
|
||||
*/
|
||||
|
||||
namespace Test\Files\Stream;
|
||||
|
||||
class StaticStream extends \PHPUnit_Framework_TestCase {
|
||||
|
||||
private $sourceFile;
|
||||
private $sourceText;
|
||||
|
||||
public function __construct() {
|
||||
$this->sourceFile = \OC::$SERVERROOT . '/tests/data/lorem.txt';
|
||||
$this->sourceText = file_get_contents($this->sourceFile);
|
||||
}
|
||||
|
||||
public function tearDown() {
|
||||
\OC\Files\Stream\StaticStream::clear();
|
||||
}
|
||||
|
||||
public function testContent() {
|
||||
file_put_contents('static://foo', $this->sourceText);
|
||||
$this->assertEquals($this->sourceText, file_get_contents('static://foo'));
|
||||
}
|
||||
|
||||
public function testMultipleFiles() {
|
||||
file_put_contents('static://foo', $this->sourceText);
|
||||
file_put_contents('static://bar', strrev($this->sourceText));
|
||||
$this->assertEquals($this->sourceText, file_get_contents('static://foo'));
|
||||
$this->assertEquals(strrev($this->sourceText), file_get_contents('static://bar'));
|
||||
}
|
||||
|
||||
public function testOverwrite() {
|
||||
file_put_contents('static://foo', $this->sourceText);
|
||||
file_put_contents('static://foo', 'qwerty');
|
||||
$this->assertEquals('qwerty', file_get_contents('static://foo'));
|
||||
}
|
||||
|
||||
public function testIsFile() {
|
||||
$this->assertFalse(is_file('static://foo'));
|
||||
file_put_contents('static://foo', $this->sourceText);
|
||||
$this->assertTrue(is_file('static://foo'));
|
||||
}
|
||||
|
||||
public function testIsDir() {
|
||||
$this->assertFalse(is_dir('static://foo'));
|
||||
file_put_contents('static://foo', $this->sourceText);
|
||||
$this->assertFalse(is_dir('static://foo'));
|
||||
}
|
||||
|
||||
public function testFileType() {
|
||||
file_put_contents('static://foo', $this->sourceText);
|
||||
$this->assertEquals('file', filetype('static://foo'));
|
||||
}
|
||||
|
||||
public function testUnlink() {
|
||||
$this->assertFalse(file_exists('static://foo'));
|
||||
file_put_contents('static://foo', $this->sourceText);
|
||||
$this->assertTrue(file_exists('static://foo'));
|
||||
unlink('static://foo');
|
||||
clearstatcache();
|
||||
$this->assertFalse(file_exists('static://foo'));
|
||||
}
|
||||
}
|
|
@ -33,18 +33,6 @@ class Test_StreamWrappers extends PHPUnit_Framework_TestCase {
|
|||
$this->assertEquals(count($items), count($result));
|
||||
}
|
||||
|
||||
public function testStaticStream() {
|
||||
$sourceFile = OC::$SERVERROOT . '/tests/data/lorem.txt';
|
||||
$staticFile = 'static://test';
|
||||
$this->assertFalse(file_exists($staticFile));
|
||||
file_put_contents($staticFile, file_get_contents($sourceFile));
|
||||
$this->assertTrue(file_exists($staticFile));
|
||||
$this->assertEquals(file_get_contents($sourceFile), file_get_contents($staticFile));
|
||||
unlink($staticFile);
|
||||
clearstatcache();
|
||||
$this->assertFalse(file_exists($staticFile));
|
||||
}
|
||||
|
||||
public function testCloseStream() {
|
||||
//ensure all basic stream stuff works
|
||||
$sourceFile = OC::$SERVERROOT . '/tests/data/lorem.txt';
|
||||
|
|
Loading…
Reference in New Issue