diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/service/FileSystemScanner.kt b/komga/src/main/kotlin/org/gotson/komga/domain/service/FileSystemScanner.kt index 7feaefd62..ad58cb128 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/service/FileSystemScanner.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/service/FileSystemScanner.kt @@ -3,6 +3,7 @@ package org.gotson.komga.domain.service import mu.KotlinLogging import org.apache.commons.io.FilenameUtils import org.gotson.komga.domain.model.Book +import org.gotson.komga.domain.model.DirectoryNotFoundException import org.gotson.komga.domain.model.Series import org.gotson.komga.infrastructure.configuration.KomgaProperties import org.springframework.stereotype.Service @@ -16,7 +17,6 @@ import java.nio.file.attribute.BasicFileAttributes import java.nio.file.attribute.FileTime import java.time.LocalDateTime import java.time.ZoneId -import kotlin.io.path.isHidden import kotlin.streams.asSequence import kotlin.time.measureTime @@ -35,6 +35,9 @@ class FileSystemScanner( logger.info { "Excluded patterns: ${komgaProperties.librariesScanDirectoryExclusions}" } logger.info { "Force directory modified time: $forceDirectoryModifiedTime" } + if(!(Files.isDirectory(root) && Files.isReadable(root))) + throw DirectoryNotFoundException("Library root is not accessible: $root") + lateinit var scannedSeries: Map> measureTime { diff --git a/komga/src/test/kotlin/org/gotson/komga/domain/service/FileSystemScannerTest.kt b/komga/src/test/kotlin/org/gotson/komga/domain/service/FileSystemScannerTest.kt index be210d892..22f035f3b 100644 --- a/komga/src/test/kotlin/org/gotson/komga/domain/service/FileSystemScannerTest.kt +++ b/komga/src/test/kotlin/org/gotson/komga/domain/service/FileSystemScannerTest.kt @@ -4,8 +4,11 @@ import com.google.common.jimfs.Configuration import com.google.common.jimfs.Jimfs import org.apache.commons.io.FilenameUtils import org.assertj.core.api.Assertions.assertThat +import org.assertj.core.api.Assertions.catchThrowable +import org.gotson.komga.domain.model.DirectoryNotFoundException import org.gotson.komga.infrastructure.configuration.KomgaProperties import org.junit.jupiter.api.Test +import java.lang.Exception import java.nio.file.Files import java.nio.file.Path @@ -17,6 +20,20 @@ class FileSystemScannerTest { private val scanner = FileSystemScanner(komgaProperties) + @Test + fun `given unavailable root directory when scanning then throw exception`() { + Jimfs.newFileSystem(Configuration.unix()).use { fs -> + // given + val root = fs.getPath("/root") + + // when + val thrown = catchThrowable { scanner.scanRootFolder(root) } + + // then + assertThat(thrown).isInstanceOf(DirectoryNotFoundException::class.java) + } + } + @Test fun `given empty root directory when scanning then return empty list`() { Jimfs.newFileSystem(Configuration.unix()).use { fs ->