Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/files_antivirus.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorRobin Appelman <robin@icewind.nl>2021-12-14 18:40:59 +0300
committerRobin Appelman <robin@icewind.nl>2021-12-15 17:00:24 +0300
commit8e2248d38f18989d1854f9b720fcc4b7511cbb93 (patch)
tree4885f90810eee1ed8a9da1645d9124bcbe4b5cee /tests
parent999903de263fd18b4a47892199f56aaf1d17efbe (diff)
add tests for background scanner unscanned/outdated files
Signed-off-by: Robin Appelman <robin@icewind.nl>
Diffstat (limited to 'tests')
-rw-r--r--tests/BackgroundScannerTest.php117
1 files changed, 86 insertions, 31 deletions
diff --git a/tests/BackgroundScannerTest.php b/tests/BackgroundScannerTest.php
index b399ccc..aa54da1 100644
--- a/tests/BackgroundScannerTest.php
+++ b/tests/BackgroundScannerTest.php
@@ -10,43 +10,98 @@
namespace OCA\Files_Antivirus\Tests;
+use OC\Files\Storage\Temporary;
use OCA\Files_Antivirus\BackgroundJob\BackgroundScanner;
use Doctrine\DBAL\Driver\PDOStatement;
+use OCP\Files\Folder;
+use OCP\Files\IRootFolder;
+use OCP\IDBConnection;
+use Test\Traits\MountProviderTrait;
+use Test\Traits\UserTrait;
/**
- * Class BackgroundScannerTest
- *
- * @package OCA\Files_Antivirus\Tests
* @group DB
*/
class BackgroundScannerTest extends TestBase {
- public function testGetFilesForScan() {
- $this->assertTrue(true);
- return;
-
- $scannerFactory = new Mock\ScannerFactory(
- new Mock\Config($this->container->query('CoreConfig')),
- $this->container->query('Logger')
- );
-
- $scannerMock = $this->getMockBuilder(BackgroundScanner::class)
- ->setConstructorArgs([
- $scannerFactory,
- $this->l10n,
- $this->config,
- \OC::$server->getRootFolder(),
- \OC::$server->getUserSession(),
- \OC::$server->getLogger(),
- \OC::$server->getUserManager(),
- \OC::$server->getDatabaseConnection(),
- \OC::$server->getMimeTypeLoader()
- ])
- ->getMock();
-
- $class = new \ReflectionClass($scannerMock);
- $method = $class->getMethod('getFilesForScan');
- $method->setAccessible(true);
- $result = $method->invokeArgs($scannerMock, []);
- $this->assertEquals(PDOStatement::class, get_class($result));
+ use UserTrait;
+ use MountProviderTrait;
+
+ /** @var Folder */
+ private $homeDirectory;
+
+ protected function setUp(): void {
+ parent::setUp();
+
+ $this->createUser("av", "av");
+ $storage = new Temporary();
+ $storage->mkdir('files');
+ $storage->getScanner()->scan('');
+ $this->registerMount("av", $storage, "av");
+
+ $this->loginAsUser("av");
+ /** @var IRootFolder $root */
+ $root = \OC::$server->get(IRootFolder::class);
+ $this->homeDirectory = $root->getUserFolder("av");
+ }
+
+ private function markAllScanned() {
+ $now = time();
+ /** @var IDBConnection $db */
+ $db = \OC::$server->get(IDBConnection::class);
+
+ $db->getQueryBuilder()->delete('files_antivirus')->executeStatement();
+
+ $query = $db->getQueryBuilder();
+ $query->select('fileid')
+ ->from('filecache');
+ $fileIds = $query->executeQuery()->fetchAll(\PDO::FETCH_COLUMN);
+
+ $query = $db->getQueryBuilder();
+ $query->insert('files_antivirus')
+ ->values([
+ 'fileid' => $query->createParameter('fileid'),
+ 'check_time' => $now,
+ ]);
+ foreach ($fileIds as $fileId) {
+ $query->setParameter('fileid', $fileId);
+ $query->executeStatement();
+ }
+ }
+
+ private function updateScannedTime(int $fileId, int $time) {
+ /** @var IDBConnection $db */
+ $db = \OC::$server->get(IDBConnection::class);
+
+ $query = $db->getQueryBuilder();
+ $query->update('files_antivirus')
+ ->set('check_time', $query->createNamedParameter($time))
+ ->where($query->expr()->eq('fileid', $query->createNamedParameter($fileId)));
+ $query->executeStatement();
+ }
+
+ public function testGetUnscannedFiles() {
+ $this->markAllScanned();
+
+ /** @var BackgroundScanner $scanner */
+ $scanner = \OC::$server->get(BackgroundScanner::class);
+ $newFileId = $this->homeDirectory->newFile("foo", "bar")->getId();
+
+ $outdated = $scanner->getUnscannedFiles()->fetchAll(\PDO::FETCH_COLUMN);
+ $this->assertEquals([$newFileId], $outdated);
+ }
+
+ public function testGetOutdatedFiles() {
+ $newFileId = $this->homeDirectory->newFile("foo", "bar")->getId();
+ $this->markAllScanned();
+
+ /** @var BackgroundScanner $scanner */
+ $scanner = \OC::$server->get(BackgroundScanner::class);
+
+ $outdated = $scanner->getOutdatedFiles()->fetchAll(\PDO::FETCH_COLUMN);
+ $this->assertEquals([], $outdated);
+
+ $this->updateScannedTime($newFileId, time() - (30 * 24 * 60 * 60));
+ $outdated = $scanner->getOutdatedFiles()->fetchAll(\PDO::FETCH_COLUMN);
+ $this->assertEquals([$newFileId], $outdated);
}
}