From 80b49ccd6a7c441585178d09abdb817fdcd46d2c Mon Sep 17 00:00:00 2001
From: Juraj Kusnier <jurajkusnier@users.noreply.github.com>
Date: Thu, 22 Apr 2021 16:01:46 +0200
Subject: [PATCH] Update DebugLogger (DEV) (#2906)

* update DebugLogger

* update DebugLogger

* check parent dirs for usable space

* update test
---
 .../debuglog/internal/DebugLogStorageCheck.kt | 10 ++++++++-
 .../internal/DebugLogStorageCheckTest.kt      | 21 ++++++++++++++++++-
 2 files changed, 29 insertions(+), 2 deletions(-)

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 2e8e7aba2..113ffeb5b 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 44a2d6e19..f19da6396 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()
-- 
GitLab