aboutsummaryrefslogtreecommitdiffstats
path: root/tests/lib/Files/Storage/LocalTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/lib/Files/Storage/LocalTest.php')
-rw-r--r--tests/lib/Files/Storage/LocalTest.php76
1 files changed, 53 insertions, 23 deletions
diff --git a/tests/lib/Files/Storage/LocalTest.php b/tests/lib/Files/Storage/LocalTest.php
index efe5dd04e47..89449a51351 100644
--- a/tests/lib/Files/Storage/LocalTest.php
+++ b/tests/lib/Files/Storage/LocalTest.php
@@ -1,4 +1,5 @@
<?php
+
/**
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
@@ -7,6 +8,14 @@
namespace Test\Files\Storage;
+use OC\Files\Storage\Local;
+use OC\Files\Storage\Wrapper\Jail;
+use OCP\Files;
+use OCP\Files\ForbiddenException;
+use OCP\Files\StorageNotAvailableException;
+use OCP\ITempManager;
+use OCP\Server;
+
/**
* Class LocalTest
*
@@ -23,23 +32,23 @@ class LocalTest extends Storage {
protected function setUp(): void {
parent::setUp();
- $this->tmpDir = \OC::$server->getTempManager()->getTemporaryFolder();
- $this->instance = new \OC\Files\Storage\Local(['datadir' => $this->tmpDir]);
+ $this->tmpDir = Server::get(ITempManager::class)->getTemporaryFolder();
+ $this->instance = new Local(['datadir' => $this->tmpDir]);
}
protected function tearDown(): void {
- \OC_Helper::rmdirr($this->tmpDir);
+ Files::rmdirr($this->tmpDir);
parent::tearDown();
}
- public function testStableEtag() {
+ public function testStableEtag(): void {
$this->instance->file_put_contents('test.txt', 'foobar');
$etag1 = $this->instance->getETag('test.txt');
$etag2 = $this->instance->getETag('test.txt');
$this->assertEquals($etag1, $etag2);
}
- public function testEtagChange() {
+ public function testEtagChange(): void {
$this->instance->file_put_contents('test.txt', 'foo');
$this->instance->touch('test.txt', time() - 2);
$etag1 = $this->instance->getETag('test.txt');
@@ -49,22 +58,22 @@ class LocalTest extends Storage {
}
- public function testInvalidArgumentsEmptyArray() {
+ public function testInvalidArgumentsEmptyArray(): void {
$this->expectException(\InvalidArgumentException::class);
- new \OC\Files\Storage\Local([]);
+ new Local([]);
}
- public function testInvalidArgumentsNoArray() {
+ public function testInvalidArgumentsNoArray(): void {
$this->expectException(\InvalidArgumentException::class);
- new \OC\Files\Storage\Local(null);
+ new Local([]);
}
- public function testDisallowSymlinksOutsideDatadir() {
- $this->expectException(\OCP\Files\ForbiddenException::class);
+ public function testDisallowSymlinksOutsideDatadir(): void {
+ $this->expectException(ForbiddenException::class);
$subDir1 = $this->tmpDir . 'sub1';
$subDir2 = $this->tmpDir . 'sub2';
@@ -74,12 +83,12 @@ class LocalTest extends Storage {
symlink($subDir2, $sym);
- $storage = new \OC\Files\Storage\Local(['datadir' => $subDir1]);
+ $storage = new Local(['datadir' => $subDir1]);
$storage->file_put_contents('sym/foo', 'bar');
}
- public function testDisallowSymlinksInsideDatadir() {
+ public function testDisallowSymlinksInsideDatadir(): void {
$subDir1 = $this->tmpDir . 'sub1';
$subDir2 = $this->tmpDir . 'sub1/sub2';
$sym = $this->tmpDir . 'sub1/sym';
@@ -88,27 +97,27 @@ class LocalTest extends Storage {
symlink($subDir2, $sym);
- $storage = new \OC\Files\Storage\Local(['datadir' => $subDir1]);
+ $storage = new Local(['datadir' => $subDir1]);
$storage->file_put_contents('sym/foo', 'bar');
$this->addToAssertionCount(1);
}
- public function testWriteUmaskFilePutContents() {
+ public function testWriteUmaskFilePutContents(): void {
$oldMask = umask(0333);
$this->instance->file_put_contents('test.txt', 'sad');
umask($oldMask);
$this->assertTrue($this->instance->isUpdatable('test.txt'));
}
- public function testWriteUmaskMkdir() {
+ public function testWriteUmaskMkdir(): void {
$oldMask = umask(0333);
$this->instance->mkdir('test.txt');
umask($oldMask);
$this->assertTrue($this->instance->isUpdatable('test.txt'));
}
- public function testWriteUmaskFopen() {
+ public function testWriteUmaskFopen(): void {
$oldMask = umask(0333);
$handle = $this->instance->fopen('test.txt', 'w');
fwrite($handle, 'foo');
@@ -117,7 +126,7 @@ class LocalTest extends Storage {
$this->assertTrue($this->instance->isUpdatable('test.txt'));
}
- public function testWriteUmaskCopy() {
+ public function testWriteUmaskCopy(): void {
$this->instance->file_put_contents('source.txt', 'sad');
$oldMask = umask(0333);
$this->instance->copy('source.txt', 'test.txt');
@@ -125,14 +134,35 @@ class LocalTest extends Storage {
$this->assertTrue($this->instance->isUpdatable('test.txt'));
}
- public function testUnavailableExternal() {
- $this->expectException(\OCP\Files\StorageNotAvailableException::class);
- $this->instance = new \OC\Files\Storage\Local(['datadir' => $this->tmpDir . '/unexist', 'isExternal' => true]);
+ public function testUnavailableExternal(): void {
+ $this->expectException(StorageNotAvailableException::class);
+ $this->instance = new Local(['datadir' => $this->tmpDir . '/unexist', 'isExternal' => true]);
}
- public function testUnavailableNonExternal() {
- $this->instance = new \OC\Files\Storage\Local(['datadir' => $this->tmpDir . '/unexist']);
+ public function testUnavailableNonExternal(): void {
+ $this->instance = new Local(['datadir' => $this->tmpDir . '/unexist']);
// no exception thrown
$this->assertNotNull($this->instance);
}
+
+ public function testMoveNestedJail(): void {
+ $this->instance->mkdir('foo');
+ $this->instance->mkdir('foo/bar');
+ $this->instance->mkdir('target');
+ $this->instance->file_put_contents('foo/bar/file.txt', 'foo');
+ $jail1 = new Jail([
+ 'storage' => $this->instance,
+ 'root' => 'foo'
+ ]);
+ $jail2 = new Jail([
+ 'storage' => $jail1,
+ 'root' => 'bar'
+ ]);
+ $jail3 = new Jail([
+ 'storage' => $this->instance,
+ 'root' => 'target'
+ ]);
+ $jail3->moveFromStorage($jail2, 'file.txt', 'file.txt');
+ $this->assertTrue($this->instance->file_exists('target/file.txt'));
+ }
}