diff options
Diffstat (limited to 'apps/files_external/tests/Storage/FtpTest.php')
-rw-r--r-- | apps/files_external/tests/Storage/FtpTest.php | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/apps/files_external/tests/Storage/FtpTest.php b/apps/files_external/tests/Storage/FtpTest.php new file mode 100644 index 00000000000..095a5236049 --- /dev/null +++ b/apps/files_external/tests/Storage/FtpTest.php @@ -0,0 +1,90 @@ +<?php + +declare(strict_types=1); +/** + * SPDX-FileCopyrightText: 2019-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only + */ +namespace OCA\Files_External\Tests\Storage; + +use OCA\Files_External\Lib\Storage\FTP; + +/** + * Class FtpTest + * + * @group DB + * + * @package OCA\Files_External\Tests\Storage + */ +class FtpTest extends \Test\Files\Storage\Storage { + private $config; + + protected function setUp(): void { + parent::setUp(); + + $id = $this->getUniqueID(); + $this->config = include('files_external/tests/config.ftp.php'); + if (! is_array($this->config) or ! $this->config['run']) { + $this->markTestSkipped('FTP backend not configured'); + } + $rootInstance = new FTP($this->config); + $rootInstance->mkdir($id); + + $this->config['root'] .= '/' . $id; //make sure we have an new empty folder to work in + $this->instance = new FTP($this->config); + } + + protected function tearDown(): void { + if ($this->instance) { + $this->instance->rmdir(''); + } + $this->instance = null; + + parent::tearDown(); + } + + /** + * ftp has no proper way to handle spaces at the end of file names + */ + public static function directoryProvider(): array { + return array_filter(parent::directoryProvider(), function ($item) { + return substr($item[0], -1) !== ' '; + }); + } + + + /** + * mtime for folders is only with a minute resolution + */ + public function testStat(): void { + $textFile = \OC::$SERVERROOT . '/tests/data/lorem.txt'; + $ctimeStart = time(); + $this->instance->file_put_contents('/lorem.txt', file_get_contents($textFile)); + $this->assertTrue($this->instance->isReadable('/lorem.txt')); + $ctimeEnd = time(); + $mTime = $this->instance->filemtime('/lorem.txt'); + $this->assertTrue($this->instance->hasUpdated('/lorem.txt', $ctimeStart - 5)); + $this->assertTrue($this->instance->hasUpdated('/', $ctimeStart - 61)); + + // check that ($ctimeStart - 5) <= $mTime <= ($ctimeEnd + 1) + $this->assertGreaterThanOrEqual(($ctimeStart - 5), $mTime); + $this->assertLessThanOrEqual(($ctimeEnd + 1), $mTime); + $this->assertEquals(filesize($textFile), $this->instance->filesize('/lorem.txt')); + + $stat = $this->instance->stat('/lorem.txt'); + //only size and mtime are required in the result + $this->assertEquals($stat['size'], $this->instance->filesize('/lorem.txt')); + $this->assertEquals($stat['mtime'], $mTime); + + if ($this->instance->touch('/lorem.txt', 100) !== false) { + $mTime = $this->instance->filemtime('/lorem.txt'); + $this->assertEquals($mTime, 100); + } + + $mtimeStart = time(); + + $this->instance->unlink('/lorem.txt'); + $this->assertTrue($this->instance->hasUpdated('/', $mtimeStart - 61)); + } +} |