Browse Source

remove static:// stream wrapper

Signed-off-by: Robin Appelman <robin@icewind.nl>
tags/v12.0.0beta1
Robin Appelman 7 years ago
parent
commit
bca91f2216
No account linked to committer's email address

+ 0
- 1
lib/base.php View File

@@ -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');


+ 0
- 171
lib/private/Files/Stream/StaticStream.php View File

@@ -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
- 3
tests/lib/DB/DBSchemaTest.php View File

@@ -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);

+ 6
- 1
tests/lib/DB/LegacyDBTest.php View File

@@ -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
*/

+ 6
- 2
tests/lib/DB/SchemaDiffTest.php View File

@@ -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

+ 0
- 70
tests/lib/Files/Stream/StaticStreamTest.php View File

@@ -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…
Cancel
Save