You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

EtagTest.php 2.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. /**
  3. * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
  4. * This file is licensed under the Affero General Public License version 3 or
  5. * later.
  6. * See the COPYING-README file.
  7. */
  8. namespace Test\Files;
  9. use OC\Files\Filesystem;
  10. use OCP\EventDispatcher\IEventDispatcher;
  11. use OCA\Files_Sharing\AppInfo\Application;
  12. /**
  13. * Class EtagTest
  14. *
  15. * @group DB
  16. *
  17. * @package Test\Files
  18. */
  19. class EtagTest extends \Test\TestCase {
  20. private $datadir;
  21. private $tmpDir;
  22. /**
  23. * @var \Test\Util\User\Dummy $userBackend
  24. */
  25. private $userBackend;
  26. protected function setUp(): void {
  27. parent::setUp();
  28. \OC_Hook::clear('OC_Filesystem', 'setup');
  29. // init files sharing
  30. new Application();
  31. \OC\Share\Share::registerBackend('file', 'OCA\Files_Sharing\ShareBackend\File');
  32. \OC\Share\Share::registerBackend('folder', 'OCA\Files_Sharing\ShareBackend\Folder', 'file');
  33. $config = \OC::$server->getConfig();
  34. $this->datadir = $config->getSystemValue('datadirectory');
  35. $this->tmpDir = \OC::$server->getTempManager()->getTemporaryFolder();
  36. $config->setSystemValue('datadirectory', $this->tmpDir);
  37. $this->userBackend = new \Test\Util\User\Dummy();
  38. \OC_User::useBackend($this->userBackend);
  39. }
  40. protected function tearDown(): void {
  41. \OC::$server->getConfig()->setSystemValue('datadirectory', $this->datadir);
  42. $this->logout();
  43. parent::tearDown();
  44. }
  45. public function testNewUser() {
  46. $user1 = $this->getUniqueID('user_');
  47. $this->userBackend->createUser($user1, '');
  48. $this->loginAsUser($user1);
  49. Filesystem::mkdir('/folder');
  50. Filesystem::mkdir('/folder/subfolder');
  51. Filesystem::file_put_contents('/foo.txt', 'asd');
  52. Filesystem::file_put_contents('/folder/bar.txt', 'fgh');
  53. Filesystem::file_put_contents('/folder/subfolder/qwerty.txt', 'jkl');
  54. $files = ['/foo.txt', '/folder/bar.txt', '/folder/subfolder', '/folder/subfolder/qwerty.txt'];
  55. $originalEtags = $this->getEtags($files);
  56. $scanner = new \OC\Files\Utils\Scanner($user1, \OC::$server->getDatabaseConnection(), \OC::$server->query(IEventDispatcher::class), \OC::$server->getLogger());
  57. $scanner->backgroundScan('/');
  58. $newEtags = $this->getEtags($files);
  59. // loop over array and use assertSame over assertEquals to prevent false positives
  60. foreach ($originalEtags as $file => $originalEtag) {
  61. $this->assertSame($originalEtag, $newEtags[$file]);
  62. }
  63. }
  64. /**
  65. * @param string[] $files
  66. */
  67. private function getEtags($files) {
  68. $etags = [];
  69. foreach ($files as $file) {
  70. $info = Filesystem::getFileInfo($file);
  71. $etags[$file] = $info['etag'];
  72. }
  73. return $etags;
  74. }
  75. }