diff options
author | Robin Appelman <robin@icewind.nl> | 2021-12-14 18:40:59 +0300 |
---|---|---|
committer | Robin Appelman <robin@icewind.nl> | 2021-12-15 17:00:24 +0300 |
commit | 8e2248d38f18989d1854f9b720fcc4b7511cbb93 (patch) | |
tree | 4885f90810eee1ed8a9da1645d9124bcbe4b5cee /tests | |
parent | 999903de263fd18b4a47892199f56aaf1d17efbe (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.php | 117 |
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); } } |