diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/bugreporting/debuglog/internal/DebugLogStorageCheck.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/bugreporting/debuglog/internal/DebugLogStorageCheck.kt index 2e8e7aba28e5d7ff98e47bd3e462ad56739a48d4..113ffeb5b92334209ae19aff6930deaf75e63c9b 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/bugreporting/debuglog/internal/DebugLogStorageCheck.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/bugreporting/debuglog/internal/DebugLogStorageCheck.kt @@ -20,7 +20,15 @@ class DebugLogStorageCheck @Inject constructor( private val availableSpace: Long @SuppressLint("UsableSpace") - get() = targetPath.usableSpace + get() { + var eval: File = targetPath + var parent: File? = eval.parentFile + while (!eval.exists() && parent != null) { + eval = parent + parent = eval.parentFile + } + return eval.usableSpace + } fun isLowStorage(forceCheck: Boolean = false): Boolean { val now = timeProvider() diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/bugreporting/debuglog/internal/DebugLogStorageCheckTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/bugreporting/debuglog/internal/DebugLogStorageCheckTest.kt index 44a2d6e19db22d8fc66b3051676818880435a606..f19da6396cfab4b4e4548fb1a9ad2e2af4a7cbdf 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/bugreporting/debuglog/internal/DebugLogStorageCheckTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/bugreporting/debuglog/internal/DebugLogStorageCheckTest.kt @@ -8,6 +8,7 @@ import io.mockk.Runs import io.mockk.every import io.mockk.impl.annotations.MockK import io.mockk.just +import io.mockk.mockk import io.mockk.slot import io.mockk.verify import org.junit.jupiter.api.AfterEach @@ -28,6 +29,8 @@ class DebugLogStorageCheckTest : BaseTest() { MockKAnnotations.init(this) every { targetPath.usableSpace } returns 250 * 1000 * 1024L + every { targetPath.parentFile } returns null + every { targetPath.exists() } returns true every { logWriter.write(any()) } just Runs } @@ -68,7 +71,6 @@ class DebugLogStorageCheckTest : BaseTest() { every { targetPath.usableSpace } returns 199 * 1000 * 1024L val instance = createInstance() instance.isLowStorage() shouldBe true - instance.isLowStorage() shouldBe true currentTime += 60 * 1000L instance.isLowStorage() shouldBe true @@ -77,6 +79,23 @@ class DebugLogStorageCheckTest : BaseTest() { verify(exactly = 1) { logWriter.write(any()) } } + @Test + fun `target path does not exists`() { + val parentPath = mockk<File>() + every { parentPath.exists() } returns true + every { parentPath.parentFile } returns null + every { parentPath.usableSpace } returns 250 * 1000 * 1024L + + every { targetPath.exists() } returns false + every { targetPath.parentFile } returns parentPath + every { targetPath.usableSpace } returns 0L + + val instance = createInstance() + instance.isLowStorage() shouldBe false + + verify { logWriter wasNot Called } + } + @Test fun `checks happen at most every 5 seconds`() { val instance = createInstance()