Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ import com.google.firebase.sessions.settings.SessionsSettings
import com.google.firebase.sessions.settings.SettingsCache
import com.google.firebase.sessions.settings.SettingsCacheImpl
import com.google.firebase.sessions.settings.SettingsProvider
import com.google.firebase.sessions.util.validateParentOrThrow
import dagger.Binds
import dagger.BindsInstance
import dagger.Component
Expand Down Expand Up @@ -146,7 +147,7 @@ internal interface FirebaseSessionsComponent {
SessionConfigsSerializer.defaultValue
},
scope = CoroutineScope(blockingDispatcher),
produceFile = { appContext.dataStoreFile("aqs/sessionConfigsDataStore.data") },
produceFile = { appContext.dataStoreFile("aqs/sessionConfigsDataStore.data").validateParentOrThrow() },
)

@Provides
Expand All @@ -164,7 +165,7 @@ internal interface FirebaseSessionsComponent {
sessionDataSerializer.defaultValue
},
scope = CoroutineScope(blockingDispatcher),
produceFile = { appContext.dataStoreFile("aqs/sessionDataStore.data") },
produceFile = { appContext.dataStoreFile("aqs/sessionDataStore.data").validateParentOrThrow() },
)

private fun <T> createDataStore(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.google.firebase.sessions.util

import java.io.File

internal fun File.validateParentOrThrow(): File = parentFile?.let {
if (!it.isDirectory) {
throw IllegalStateException("Expected ${it.path} to be a directory, but found a file")
}
this
} ?: this
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.google.firebase.sessions

import androidx.datastore.dataStoreFile
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.google.firebase.sessions.testing.FakeFirebaseApp
import com.google.firebase.sessions.util.validateParentOrThrow
import org.junit.Assert.assertThrows
import org.junit.Test
import org.junit.runner.RunWith
import java.io.File

@RunWith(AndroidJUnit4::class)
class FileProducerTest {

private val appContext = FakeFirebaseApp().firebaseApp.applicationContext

@Test
fun `sessionConfigsDataStore file path validation`() {
val aqsTextFile = File(appContext.filesDir, "datastore/aqs")
aqsTextFile.parentFile?.mkdirs()
aqsTextFile.writeText("This is aqs text file")

assertThrows(IllegalStateException::class.java) { appContext.dataStoreFile("aqs/sessionConfigsDataStore.data").validateParentOrThrow() }
}
}