summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/files/stream/staticstream.php55
-rw-r--r--tests/lib/files/stream/staticstream.php68
-rw-r--r--tests/lib/streamwrappers.php12
3 files changed, 78 insertions, 57 deletions
diff --git a/lib/files/stream/staticstream.php b/lib/files/stream/staticstream.php
index 7725a6a5a04..45b1a7a81f8 100644
--- a/lib/files/stream/staticstream.php
+++ b/lib/files/stream/staticstream.php
@@ -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;
}
diff --git a/tests/lib/files/stream/staticstream.php b/tests/lib/files/stream/staticstream.php
new file mode 100644
index 00000000000..d55086196a0
--- /dev/null
+++ b/tests/lib/files/stream/staticstream.php
@@ -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'));
+ }
+}
diff --git a/tests/lib/streamwrappers.php b/tests/lib/streamwrappers.php
index c7e51ccfa48..d15b712139d 100644
--- a/tests/lib/streamwrappers.php
+++ b/tests/lib/streamwrappers.php
@@ -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';