Skip to content
Merged
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 @@ -18,17 +18,14 @@ package com.google.firebase.dataconnect.testutil

import androidx.annotation.VisibleForTesting
import com.google.firebase.FirebaseApp
import com.google.firebase.dataconnect.CacheSettings
import com.google.firebase.dataconnect.ConnectorConfig
import com.google.firebase.dataconnect.DataConnectSettings
import com.google.firebase.dataconnect.FirebaseDataConnect
import com.google.firebase.dataconnect.copy
import com.google.firebase.dataconnect.getInstance
import com.google.firebase.dataconnect.testutil.DataConnectBackend.Autopush
import com.google.firebase.dataconnect.testutil.DataConnectBackend.Companion.INSTRUMENTATION_ARGUMENT
import com.google.firebase.dataconnect.testutil.DataConnectBackend.Companion.fromInstrumentationArguments
import com.google.firebase.dataconnect.testutil.DataConnectBackend.Custom
import com.google.firebase.dataconnect.testutil.DataConnectBackend.Emulator
import com.google.firebase.dataconnect.testutil.DataConnectBackend.Production
import com.google.firebase.dataconnect.testutil.DataConnectBackend.Staging
import java.net.MalformedURLException
import java.net.URI
import java.net.URISyntaxException
Expand Down Expand Up @@ -56,8 +53,8 @@ import java.net.URL
* ```
* -Pandroid.testInstrumentationRunnerArguments.DATA_CONNECT_BACKEND=[backend]
* ```
* where `[backend]` is one of the values specified above. For example, to run against production,
* the tests could be run as follows:
* where `backend` is one of the values specified above. For example, to run against production, the
* tests could be run as follows:
* ```
* ./gradlew :firebase-dataconnect:connectedDebugAndroidTest \
* -Pandroid.testInstrumentationRunnerArguments.DATA_CONNECT_BACKEND=prod
Expand Down Expand Up @@ -89,26 +86,34 @@ import java.net.URL
*/
sealed interface DataConnectBackend {

val dataConnectSettings: DataConnectSettings
val authBackend: FirebaseAuthBackend

fun getDataConnect(app: FirebaseApp, config: ConnectorConfig): FirebaseDataConnect =
FirebaseDataConnect.getInstance(app, config, dataConnectSettings)
fun getDataConnectSettings(cacheSettings: CacheSettings?): DataConnectSettings

fun getDataConnect(
app: FirebaseApp,
config: ConnectorConfig,
cacheSettings: CacheSettings?
): FirebaseDataConnect =
FirebaseDataConnect.getInstance(app, config, getDataConnectSettings(cacheSettings))

/** The "production" Data Connect server, which is used by customers. */
object Production : DataConnectBackend {
override val dataConnectSettings
get() = DataConnectSettings()
override val authBackend: FirebaseAuthBackend
get() = FirebaseAuthBackend.Production

override fun getDataConnectSettings(cacheSettings: CacheSettings?) =
DataConnectSettings().copy(cacheSettings = cacheSettings)

override fun toString() = "DataConnectBackend.Production"
}

sealed class PredefinedDataConnectBackend(val host: String) : DataConnectBackend {
override val dataConnectSettings
get() = DataConnectSettings().copy(host = host, sslEnabled = true)
override val authBackend: FirebaseAuthBackend
get() = FirebaseAuthBackend.Production

override fun getDataConnectSettings(cacheSettings: CacheSettings?) =
DataConnectSettings().copy(host = host, sslEnabled = true, cacheSettings = cacheSettings)
}

/**
Expand All @@ -135,23 +140,32 @@ sealed interface DataConnectBackend {

/** A custom Data Connect server. */
data class Custom(val host: String, val sslEnabled: Boolean) : DataConnectBackend {
override val dataConnectSettings
get() = DataConnectSettings().copy(host = host, sslEnabled = sslEnabled)
override val authBackend: FirebaseAuthBackend
get() = FirebaseAuthBackend.Production

override fun getDataConnectSettings(cacheSettings: CacheSettings?) =
DataConnectSettings()
.copy(host = host, sslEnabled = sslEnabled, cacheSettings = cacheSettings)

override fun toString() = "DataConnectBackend.Custom(host=$host, sslEnabled=$sslEnabled)"
}

/** The Data Connect emulator. */
data class Emulator(val host: String? = null, val port: Int? = null) : DataConnectBackend {
override val dataConnectSettings
get() = DataConnectSettings()
override val authBackend: FirebaseAuthBackend
get() = FirebaseAuthBackend.Emulator()

override fun getDataConnectSettings(cacheSettings: CacheSettings?) =
DataConnectSettings().copy(cacheSettings = cacheSettings)

override fun toString() = "DataConnectBackend.Emulator(host=$host, port=$port)"

override fun getDataConnect(app: FirebaseApp, config: ConnectorConfig): FirebaseDataConnect =
super.getDataConnect(app, config).apply {
override fun getDataConnect(
app: FirebaseApp,
config: ConnectorConfig,
cacheSettings: CacheSettings?
): FirebaseDataConnect =
super.getDataConnect(app, config, cacheSettings).apply {
if (host !== null && port !== null) {
useEmulator(host = host, port = port)
} else if (host !== null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,18 @@ class TestDataConnectFactory(val firebaseAppFactory: TestFirebaseAppFactory) :
newInstance(Params(connector = connector, location = location, serviceId = serviceId))
}

fun newInstance(config: ConnectorConfig, cacheSettings: CacheSettings?): FirebaseDataConnect =
config.run {
newInstance(
Params(
connector = connector,
location = location,
serviceId = serviceId,
cacheSettings = cacheSettings,
)
)
}

fun newInstance(backend: DataConnectBackend): FirebaseDataConnect =
newInstance(Params(backend = backend))

Expand All @@ -47,6 +59,21 @@ class TestDataConnectFactory(val firebaseAppFactory: TestFirebaseAppFactory) :
)
)

fun newInstance(
firebaseApp: FirebaseApp,
config: ConnectorConfig,
cacheSettings: CacheSettings?
): FirebaseDataConnect =
newInstance(
Params(
firebaseApp = firebaseApp,
connector = config.connector,
location = config.location,
serviceId = config.serviceId,
cacheSettings = cacheSettings
)
)

override fun createInstance(params: Params?): FirebaseDataConnect {
val instanceId = Random.nextAlphanumericString(length = 10)

Expand All @@ -60,7 +87,7 @@ class TestDataConnectFactory(val firebaseAppFactory: TestFirebaseAppFactory) :
)

val backend = params?.backend ?: DataConnectBackend.fromInstrumentationArguments()
return backend.getDataConnect(firebaseApp, connectorConfig)
return backend.getDataConnect(firebaseApp, connectorConfig, params?.cacheSettings)
}

override fun destroyInstance(instance: FirebaseDataConnect) {
Expand All @@ -73,5 +100,6 @@ class TestDataConnectFactory(val firebaseAppFactory: TestFirebaseAppFactory) :
val location: String? = null,
val serviceId: String? = null,
val backend: DataConnectBackend? = null,
val cacheSettings: CacheSettings? = null,
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,15 @@ import com.google.firebase.dataconnect.testutil.TestFirebaseAppFactory
abstract class TestConnectorFactory<T : GeneratedConnector<T>>(
private val firebaseAppFactory: TestFirebaseAppFactory,
private val dataConnectFactory: TestDataConnectFactory
) : FactoryTestRule<T, Nothing>() {
) : FactoryTestRule<T, CacheSettings>() {

abstract fun createConnector(firebaseApp: FirebaseApp, settings: DataConnectSettings): T

override fun createInstance(params: Nothing?): T {
override fun createInstance(params: CacheSettings?): T {
val firebaseApp = firebaseAppFactory.newInstance()

val dataConnectSettings = DataConnectBackend.fromInstrumentationArguments().dataConnectSettings
val dataConnectSettings =
DataConnectBackend.fromInstrumentationArguments().getDataConnectSettings(params)
val connector = createConnector(firebaseApp, dataConnectSettings)

// Get the instance of `FirebaseDataConnect` from the `TestDataConnectFactory` so that it will
Expand Down
Loading
Loading