loader = new StorageFactory(); } private function getConfig(array $systemConfig): IConfig { $config = $this->createMock(IConfig::class); $config->method('getSystemValue') ->willReturnCallback(function (string $key, $default) use ($systemConfig) { return $systemConfig[$key] ?? $default; }); return $config; } private function getProvider(array $systemConfig): RootMountProvider { $config = $this->getConfig($systemConfig); $provider = new RootMountProvider($config, $this->createMock(LoggerInterface::class)); return $provider; } public function testLocal() { $provider = $this->getProvider([ 'datadirectory' => '/data', ]); $mounts = $provider->getRootMounts($this->loader); $this->assertCount(1, $mounts); $mount = $mounts[0]; $this->assertEquals('/', $mount->getMountPoint()); /** @var LocalRootStorage $storage */ $storage = $mount->getStorage(); $this->assertInstanceOf(LocalRootStorage::class, $storage); $this->assertEquals('/data/', $storage->getSourcePath('')); } public function testObjectStore() { $provider = $this->getProvider([ 'objectstore' => [ "class" => "OC\Files\ObjectStore\S3", "arguments" => [ "bucket" => "nextcloud", "autocreate" => true, "key" => "minio", "secret" => "minio123", "hostname" => "localhost", "port" => 9000, "use_ssl" => false, "use_path_style" => true, "uploadPartSize" => 52428800, ], ], ]); $mounts = $provider->getRootMounts($this->loader); $this->assertCount(1, $mounts); $mount = $mounts[0]; $this->assertEquals('/', $mount->getMountPoint()); /** @var ObjectStoreStorage $storage */ $storage = $mount->getStorage(); $this->assertInstanceOf(ObjectStoreStorage::class, $storage); $class = new \ReflectionClass($storage); $prop = $class->getProperty('objectStore'); $prop->setAccessible(true); /** @var S3 $objectStore */ $objectStore = $prop->getValue($storage); $this->assertEquals('nextcloud', $objectStore->getBucket()); } public function testObjectStoreMultiBucket() { $provider = $this->getProvider([ 'objectstore_multibucket' => [ "class" => "OC\Files\ObjectStore\S3", "arguments" => [ "bucket" => "nextcloud", "autocreate" => true, "key" => "minio", "secret" => "minio123", "hostname" => "localhost", "port" => 9000, "use_ssl" => false, "use_path_style" => true, "uploadPartSize" => 52428800, ], ], ]); $mounts = $provider->getRootMounts($this->loader); $this->assertCount(1, $mounts); $mount = $mounts[0]; $this->assertEquals('/', $mount->getMountPoint()); /** @var ObjectStoreStorage $storage */ $storage = $mount->getStorage(); $this->assertInstanceOf(ObjectStoreStorage::class, $storage); $class = new \ReflectionClass($storage); $prop = $class->getProperty('objectStore'); $prop->setAccessible(true); /** @var S3 $objectStore */ $objectStore = $prop->getValue($storage); $this->assertEquals('nextcloud0', $objectStore->getBucket()); } }