remove static:// stream wrapper
Signed-off-by: Robin Appelman <robin@icewind.nl>
This commit is contained in:
parent
9dbcc1a177
commit
bca91f2216
|
@ -667,7 +667,6 @@ class OC {
|
||||||
}
|
}
|
||||||
|
|
||||||
// register the stream wrappers
|
// register the stream wrappers
|
||||||
stream_wrapper_register('static', 'OC\Files\Stream\StaticStream');
|
|
||||||
stream_wrapper_register('close', 'OC\Files\Stream\Close');
|
stream_wrapper_register('close', 'OC\Files\Stream\Close');
|
||||||
stream_wrapper_register('quota', 'OC\Files\Stream\Quota');
|
stream_wrapper_register('quota', 'OC\Files\Stream\Quota');
|
||||||
|
|
||||||
|
|
|
@ -1,171 +0,0 @@
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
* @copyright Copyright (c) 2016, ownCloud, Inc.
|
|
||||||
*
|
|
||||||
* @author Morris Jobke <hey@morrisjobke.de>
|
|
||||||
* @author Robin Appelman <robin@icewind.nl>
|
|
||||||
*
|
|
||||||
* @license AGPL-3.0
|
|
||||||
*
|
|
||||||
* This code is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License, version 3,
|
|
||||||
* as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU Affero General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License, version 3,
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace OC\Files\Stream;
|
|
||||||
|
|
||||||
class StaticStream {
|
|
||||||
const MODE_FILE = 0100000;
|
|
||||||
|
|
||||||
public $context;
|
|
||||||
protected static $data = array();
|
|
||||||
|
|
||||||
protected $path = '';
|
|
||||||
protected $pointer = 0;
|
|
||||||
protected $writable = false;
|
|
||||||
|
|
||||||
public function stream_close() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public function stream_eof() {
|
|
||||||
return $this->pointer >= strlen(self::$data[$this->path]);
|
|
||||||
}
|
|
||||||
|
|
||||||
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':
|
|
||||||
if (!isset(self::$data[$path])) return false;
|
|
||||||
$this->path = $path;
|
|
||||||
$this->writable = isset($mode[1]) && $mode[1] == '+';
|
|
||||||
break;
|
|
||||||
case 'w':
|
|
||||||
self::$data[$path] = '';
|
|
||||||
$this->path = $path;
|
|
||||||
$this->writable = true;
|
|
||||||
break;
|
|
||||||
case 'a':
|
|
||||||
if (!isset(self::$data[$path])) self::$data[$path] = '';
|
|
||||||
$this->path = $path;
|
|
||||||
$this->writable = true;
|
|
||||||
$this->pointer = strlen(self::$data[$path]);
|
|
||||||
break;
|
|
||||||
case 'x':
|
|
||||||
if (isset(self::$data[$path])) return false;
|
|
||||||
$this->path = $path;
|
|
||||||
$this->writable = true;
|
|
||||||
break;
|
|
||||||
case 'c':
|
|
||||||
if (!isset(self::$data[$path])) self::$data[$path] = '';
|
|
||||||
$this->path = $path;
|
|
||||||
$this->writable = true;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$opened_path = $this->path;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function stream_read($count) {
|
|
||||||
$bytes = min(strlen(self::$data[$this->path]) - $this->pointer, $count);
|
|
||||||
$data = substr(self::$data[$this->path], $this->pointer, $bytes);
|
|
||||||
$this->pointer += $bytes;
|
|
||||||
return $data;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function stream_seek($offset, $whence = SEEK_SET) {
|
|
||||||
$len = strlen(self::$data[$this->path]);
|
|
||||||
switch ($whence) {
|
|
||||||
case SEEK_SET:
|
|
||||||
if ($offset <= $len) {
|
|
||||||
$this->pointer = $offset;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case SEEK_CUR:
|
|
||||||
if ($this->pointer + $offset <= $len) {
|
|
||||||
$this->pointer += $offset;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case SEEK_END:
|
|
||||||
if ($len + $offset <= $len) {
|
|
||||||
$this->pointer = $len + $offset;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function stream_stat() {
|
|
||||||
return $this->url_stat($this->path);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function stream_tell() {
|
|
||||||
return $this->pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function stream_write($data) {
|
|
||||||
if (!$this->writable) return 0;
|
|
||||||
$size = strlen($data);
|
|
||||||
if ($this->stream_eof()) {
|
|
||||||
self::$data[$this->path] .= $data;
|
|
||||||
} else {
|
|
||||||
self::$data[$this->path] = substr_replace(
|
|
||||||
self::$data[$this->path],
|
|
||||||
$data,
|
|
||||||
$this->pointer
|
|
||||||
);
|
|
||||||
}
|
|
||||||
$this->pointer += $size;
|
|
||||||
return $size;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function unlink($path) {
|
|
||||||
if (isset(self::$data[$path])) {
|
|
||||||
unset(self::$data[$path]);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function url_stat($path) {
|
|
||||||
if (isset(self::$data[$path])) {
|
|
||||||
$size = strlen(self::$data[$path]);
|
|
||||||
$time = time();
|
|
||||||
$data = array(
|
|
||||||
'dev' => 0,
|
|
||||||
'ino' => 0,
|
|
||||||
'mode' => self::MODE_FILE | 0777,
|
|
||||||
'nlink' => 1,
|
|
||||||
'uid' => 0,
|
|
||||||
'gid' => 0,
|
|
||||||
'rdev' => '',
|
|
||||||
'size' => $size,
|
|
||||||
'atime' => $time,
|
|
||||||
'mtime' => $time,
|
|
||||||
'ctime' => $time,
|
|
||||||
'blksize' => -1,
|
|
||||||
'blocks' => -1,
|
|
||||||
);
|
|
||||||
return array_values($data) + $data;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -10,6 +10,7 @@ namespace Test\DB;
|
||||||
|
|
||||||
use Doctrine\DBAL\Platforms\SqlitePlatform;
|
use Doctrine\DBAL\Platforms\SqlitePlatform;
|
||||||
use OC_DB;
|
use OC_DB;
|
||||||
|
use OCP\ITempManager;
|
||||||
use OCP\Security\ISecureRandom;
|
use OCP\Security\ISecureRandom;
|
||||||
use Test\TestCase;
|
use Test\TestCase;
|
||||||
|
|
||||||
|
@ -19,14 +20,20 @@ use Test\TestCase;
|
||||||
* @group DB
|
* @group DB
|
||||||
*/
|
*/
|
||||||
class DBSchemaTest extends TestCase {
|
class DBSchemaTest extends TestCase {
|
||||||
protected $schema_file = 'static://test_db_scheme';
|
protected $schema_file;
|
||||||
protected $schema_file2 = 'static://test_db_scheme2';
|
protected $schema_file2;
|
||||||
protected $table1;
|
protected $table1;
|
||||||
protected $table2;
|
protected $table2;
|
||||||
|
/** @var ITempManager */
|
||||||
|
protected $tempManager;
|
||||||
|
|
||||||
protected function setUp() {
|
protected function setUp() {
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
||||||
|
$this->tempManager = \OC::$server->getTempManager();
|
||||||
|
$this->schema_file = $this->tempManager->getTemporaryFile();
|
||||||
|
$this->schema_file2 = $this->tempManager->getTemporaryFile();
|
||||||
|
|
||||||
$dbfile = \OC::$SERVERROOT.'/tests/data/db_structure.xml';
|
$dbfile = \OC::$SERVERROOT.'/tests/data/db_structure.xml';
|
||||||
$dbfile2 = \OC::$SERVERROOT.'/tests/data/db_structure2.xml';
|
$dbfile2 = \OC::$SERVERROOT.'/tests/data/db_structure2.xml';
|
||||||
|
|
||||||
|
@ -73,7 +80,7 @@ class DBSchemaTest extends TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function doTestSchemaDumping() {
|
public function doTestSchemaDumping() {
|
||||||
$outfile = 'static://db_out.xml';
|
$outfile = $this->tempManager->getTemporaryFile();
|
||||||
OC_DB::getDbStructure($outfile);
|
OC_DB::getDbStructure($outfile);
|
||||||
$content = file_get_contents($outfile);
|
$content = file_get_contents($outfile);
|
||||||
$this->assertContains($this->table1, $content);
|
$this->assertContains($this->table1, $content);
|
||||||
|
|
|
@ -18,9 +18,14 @@ use OC_DB;
|
||||||
class LegacyDBTest extends \Test\TestCase {
|
class LegacyDBTest extends \Test\TestCase {
|
||||||
protected $backupGlobals = FALSE;
|
protected $backupGlobals = FALSE;
|
||||||
|
|
||||||
protected static $schema_file = 'static://test_db_scheme';
|
protected static $schema_file;
|
||||||
protected $test_prefix;
|
protected $test_prefix;
|
||||||
|
|
||||||
|
public static function setUpBeforeClass() {
|
||||||
|
self::$schema_file = \OC::$server->getTempManager()->getTemporaryFile();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -47,9 +47,13 @@ class SchemaDiffTest extends TestCase {
|
||||||
/** @var string */
|
/** @var string */
|
||||||
private $testPrefix;
|
private $testPrefix;
|
||||||
|
|
||||||
|
private $schemaFile;
|
||||||
|
|
||||||
protected function setUp() {
|
protected function setUp() {
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
||||||
|
$this->schemaFile = \OC::$server->getTempManager()->getTemporaryFile();
|
||||||
|
|
||||||
$this->config = \OC::$server->getConfig();
|
$this->config = \OC::$server->getConfig();
|
||||||
$this->connection = \OC::$server->getDatabaseConnection();
|
$this->connection = \OC::$server->getDatabaseConnection();
|
||||||
$this->manager = new MDB2SchemaManager($this->connection);
|
$this->manager = new MDB2SchemaManager($this->connection);
|
||||||
|
@ -57,7 +61,7 @@ class SchemaDiffTest extends TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function tearDown() {
|
protected function tearDown() {
|
||||||
$this->manager->removeDBStructure('static://test_db_scheme');
|
$this->manager->removeDBStructure($this->schemaFile);
|
||||||
parent::tearDown();
|
parent::tearDown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,7 +72,7 @@ class SchemaDiffTest extends TestCase {
|
||||||
public function testZeroChangeOnSchemaMigrations($xml) {
|
public function testZeroChangeOnSchemaMigrations($xml) {
|
||||||
|
|
||||||
$xml = str_replace( '*dbprefix*', $this->testPrefix, $xml );
|
$xml = str_replace( '*dbprefix*', $this->testPrefix, $xml );
|
||||||
$schemaFile = 'static://test_db_scheme';
|
$schemaFile = $this->schemaFile;
|
||||||
file_put_contents($schemaFile, $xml);
|
file_put_contents($schemaFile, $xml);
|
||||||
|
|
||||||
// apply schema
|
// apply schema
|
||||||
|
|
|
@ -1,70 +0,0 @@
|
||||||
<?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 StaticStreamTest extends \Test\TestCase {
|
|
||||||
|
|
||||||
private $sourceFile;
|
|
||||||
private $sourceText;
|
|
||||||
|
|
||||||
protected function setUp() {
|
|
||||||
parent::setUp();
|
|
||||||
$this->sourceFile = \OC::$SERVERROOT . '/tests/data/lorem.txt';
|
|
||||||
$this->sourceText = file_get_contents($this->sourceFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function tearDown() {
|
|
||||||
\OC\Files\Stream\StaticStream::clear();
|
|
||||||
parent::tearDown();
|
|
||||||
}
|
|
||||||
|
|
||||||
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'));
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue