зеркало из
https://github.com/nextcloud/server.git
synced 2024-08-17 14:11:30 +02:00
remove static:// stream wrapper
Signed-off-by: Robin Appelman <robin@icewind.nl>
Этот коммит содержится в:
родитель
9dbcc1a177
Коммит
bca91f2216
@ -667,7 +667,6 @@ class OC {
|
||||
}
|
||||
|
||||
// register the stream wrappers
|
||||
stream_wrapper_register('static', 'OC\Files\Stream\StaticStream');
|
||||
stream_wrapper_register('close', 'OC\Files\Stream\Close');
|
||||
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 OC_DB;
|
||||
use OCP\ITempManager;
|
||||
use OCP\Security\ISecureRandom;
|
||||
use Test\TestCase;
|
||||
|
||||
@ -19,14 +20,20 @@ use Test\TestCase;
|
||||
* @group DB
|
||||
*/
|
||||
class DBSchemaTest extends TestCase {
|
||||
protected $schema_file = 'static://test_db_scheme';
|
||||
protected $schema_file2 = 'static://test_db_scheme2';
|
||||
protected $schema_file;
|
||||
protected $schema_file2;
|
||||
protected $table1;
|
||||
protected $table2;
|
||||
/** @var ITempManager */
|
||||
protected $tempManager;
|
||||
|
||||
protected function 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';
|
||||
$dbfile2 = \OC::$SERVERROOT.'/tests/data/db_structure2.xml';
|
||||
|
||||
@ -73,7 +80,7 @@ class DBSchemaTest extends TestCase {
|
||||
}
|
||||
|
||||
public function doTestSchemaDumping() {
|
||||
$outfile = 'static://db_out.xml';
|
||||
$outfile = $this->tempManager->getTemporaryFile();
|
||||
OC_DB::getDbStructure($outfile);
|
||||
$content = file_get_contents($outfile);
|
||||
$this->assertContains($this->table1, $content);
|
||||
|
@ -18,9 +18,14 @@ use OC_DB;
|
||||
class LegacyDBTest extends \Test\TestCase {
|
||||
protected $backupGlobals = FALSE;
|
||||
|
||||
protected static $schema_file = 'static://test_db_scheme';
|
||||
protected static $schema_file;
|
||||
protected $test_prefix;
|
||||
|
||||
public static function setUpBeforeClass() {
|
||||
self::$schema_file = \OC::$server->getTempManager()->getTemporaryFile();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
|
@ -47,9 +47,13 @@ class SchemaDiffTest extends TestCase {
|
||||
/** @var string */
|
||||
private $testPrefix;
|
||||
|
||||
private $schemaFile;
|
||||
|
||||
protected function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
$this->schemaFile = \OC::$server->getTempManager()->getTemporaryFile();
|
||||
|
||||
$this->config = \OC::$server->getConfig();
|
||||
$this->connection = \OC::$server->getDatabaseConnection();
|
||||
$this->manager = new MDB2SchemaManager($this->connection);
|
||||
@ -57,7 +61,7 @@ class SchemaDiffTest extends TestCase {
|
||||
}
|
||||
|
||||
protected function tearDown() {
|
||||
$this->manager->removeDBStructure('static://test_db_scheme');
|
||||
$this->manager->removeDBStructure($this->schemaFile);
|
||||
parent::tearDown();
|
||||
}
|
||||
|
||||
@ -68,7 +72,7 @@ class SchemaDiffTest extends TestCase {
|
||||
public function testZeroChangeOnSchemaMigrations($xml) {
|
||||
|
||||
$xml = str_replace( '*dbprefix*', $this->testPrefix, $xml );
|
||||
$schemaFile = 'static://test_db_scheme';
|
||||
$schemaFile = $this->schemaFile;
|
||||
file_put_contents($schemaFile, $xml);
|
||||
|
||||
// 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'));
|
||||
}
|
||||
}
|
Загрузка…
Ссылка в новой задаче
Block a user