From cfaf2869193bb2af5f9c3bbffaf047ca94f9373f Mon Sep 17 00:00:00 2001 From: Ephraim Kigamba Date: Thu, 13 Jul 2023 12:42:01 +0300 Subject: [PATCH] Draft: Commit --- android/engine/build.gradle.kts | 1 + .../DefaultRepositoryPerformanceTests.kt | 38 +++++++++ .../data/local/register/RegisterRepository.kt | 6 +- android/quest/build.gradle.kts | 3 + .../quest/src/androidTest/AndroidManifest.xml | 26 ++++++ .../quest/config/ConfigServiceModule.kt | 30 +++++++ .../DefaultRepositoryPerformanceTests.kt | 80 +++++++++++++++++++ android/quest/src/main/AndroidManifest.xml | 6 ++ 8 files changed, 189 insertions(+), 1 deletion(-) create mode 100644 android/engine/src/androidTest/java/org/smartregister/fhircore/engine/performance/DefaultRepositoryPerformanceTests.kt create mode 100644 android/quest/src/androidTest/AndroidManifest.xml create mode 100644 android/quest/src/androidTest/java/org/smartregister/fhircore/quest/config/ConfigServiceModule.kt create mode 100644 android/quest/src/androidTest/java/org/smartregister/fhircore/quest/performance/DefaultRepositoryPerformanceTests.kt diff --git a/android/engine/build.gradle.kts b/android/engine/build.gradle.kts index 64484f3c6e..a59c4cf895 100644 --- a/android/engine/build.gradle.kts +++ b/android/engine/build.gradle.kts @@ -253,6 +253,7 @@ dependencies { androidTestImplementation(libs.runner) androidTestImplementation(libs.ui.test.junit4) androidTestImplementation(libs.hilt.android.testing) + androidTestImplementation("androidx.benchmark:benchmark-junit4:1.1.1") ktlint(libs.ktlint.main) { attributes { attribute(Bundling.BUNDLING_ATTRIBUTE, objects.named(Bundling.EXTERNAL)) } diff --git a/android/engine/src/androidTest/java/org/smartregister/fhircore/engine/performance/DefaultRepositoryPerformanceTests.kt b/android/engine/src/androidTest/java/org/smartregister/fhircore/engine/performance/DefaultRepositoryPerformanceTests.kt new file mode 100644 index 0000000000..11a8a2169e --- /dev/null +++ b/android/engine/src/androidTest/java/org/smartregister/fhircore/engine/performance/DefaultRepositoryPerformanceTests.kt @@ -0,0 +1,38 @@ +package org.smartregister.fhircore.engine.performance + +import androidx.benchmark.junit4.BenchmarkRule +import androidx.benchmark.junit4.measureRepeated +import androidx.test.ext.junit.runners.AndroidJUnit4 +import dagger.hilt.android.testing.HiltAndroidRule +import dagger.hilt.android.testing.HiltAndroidTest +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.smartregister.fhircore.engine.data.local.DefaultRepository +import org.smartregister.fhircore.engine.data.local.register.RegisterRepository +import javax.inject.Inject + + +/** + * Created by Ephraim Kigamba - nek.eam@gmail.com on 11-07-2023. + */ +@RunWith(AndroidJUnit4::class) +@HiltAndroidTest +class DefaultRepositoryPerformanceTests { + + @get:Rule + val benchmarkRule = BenchmarkRule() + + @Inject lateinit var defaultRepository: DefaultRepository + @Inject lateinit var registerRepository: RegisterRepository + + + @get:Rule val hiltRule = HiltAndroidRule(this) + + @Test + fun benchmarkSomeWork() { + benchmarkRule.measureRepeated { + registerRepository.retrieveRegisterConfiguration("householdRegister", hashMapOf()) + } + } +} diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/data/local/register/RegisterRepository.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/data/local/register/RegisterRepository.kt index 34a62bb7da..193900a028 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/data/local/register/RegisterRepository.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/data/local/register/RegisterRepository.kt @@ -107,7 +107,11 @@ constructor( .runCatching { withContext(dispatcherProvider.io()) { fhirEngine.search(search) } } - .onFailure { Timber.e(it, "Error retrieving resources. Empty list returned by default") } + .onFailure { + Timber.e(it, "Error retrieving resources. Empty list returned by default") + System.out.println("Error occurred") + it.printStackTrace() + } .getOrDefault(emptyList()) return baseFhirResources.map { baseFhirResource -> diff --git a/android/quest/build.gradle.kts b/android/quest/build.gradle.kts index 848d3185de..a41ade6f59 100644 --- a/android/quest/build.gradle.kts +++ b/android/quest/build.gradle.kts @@ -72,6 +72,8 @@ android { buildConfigField("String", "SENTRY_DSN", """"${project.extra["SENTRY_DSN"]}"""") testInstrumentationRunner = "org.smartregister.fhircore.quest.QuestTestRunner" + testInstrumentationRunnerArguments["additionalTestOutputDir"] = "/sdcard/Download" + testInstrumentationRunnerArguments["androidx.benchmark.suppressErrors"] = "ACTIVITY-MISSING,CODE-COVERAGE,DEBUGGABLE,UNLOCKED,EMULATOR" } signingConfigs { @@ -361,6 +363,7 @@ dependencies { androidTestImplementation(libs.ui.test.junit4) androidTestImplementation(libs.hilt.android.testing) androidTestImplementation(libs.mockk.android) + androidTestImplementation("androidx.benchmark:benchmark-junit4:1.1.1") ktlint(libs.ktlint.main) { attributes { attribute(Bundling.BUNDLING_ATTRIBUTE, objects.named(Bundling.EXTERNAL)) } } diff --git a/android/quest/src/androidTest/AndroidManifest.xml b/android/quest/src/androidTest/AndroidManifest.xml new file mode 100644 index 0000000000..05fe9114db --- /dev/null +++ b/android/quest/src/androidTest/AndroidManifest.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/android/quest/src/androidTest/java/org/smartregister/fhircore/quest/config/ConfigServiceModule.kt b/android/quest/src/androidTest/java/org/smartregister/fhircore/quest/config/ConfigServiceModule.kt new file mode 100644 index 0000000000..a0104eb967 --- /dev/null +++ b/android/quest/src/androidTest/java/org/smartregister/fhircore/quest/config/ConfigServiceModule.kt @@ -0,0 +1,30 @@ +/* + * Copyright 2021-2023 Ona Systems, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.smartregister.fhircore.quest.di.config + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import org.smartregister.fhircore.engine.configuration.app.ConfigService +import org.smartregister.fhircore.quest.QuestConfigService + +@InstallIn(SingletonComponent::class) +@Module +abstract class ConfigServiceModule { + @Binds abstract fun provideConfigService(questConfigService: QuestConfigService): ConfigService +} diff --git a/android/quest/src/androidTest/java/org/smartregister/fhircore/quest/performance/DefaultRepositoryPerformanceTests.kt b/android/quest/src/androidTest/java/org/smartregister/fhircore/quest/performance/DefaultRepositoryPerformanceTests.kt new file mode 100644 index 0000000000..b266ae33ff --- /dev/null +++ b/android/quest/src/androidTest/java/org/smartregister/fhircore/quest/performance/DefaultRepositoryPerformanceTests.kt @@ -0,0 +1,80 @@ +package org.smartregister.fhircore.quest.performance + +import androidx.benchmark.junit4.BenchmarkRule +import androidx.benchmark.junit4.measureRepeated +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.platform.app.InstrumentationRegistry +import dagger.hilt.android.testing.HiltAndroidRule +import dagger.hilt.android.testing.HiltAndroidTest +import kotlinx.coroutines.runBlocking +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.smartregister.fhircore.engine.R +import org.smartregister.fhircore.engine.data.local.DefaultRepository +import org.smartregister.fhircore.engine.data.local.register.RegisterRepository +import org.smartregister.fhircore.engine.util.SharedPreferenceKey +import org.smartregister.fhircore.engine.util.extension.getActivity +import org.smartregister.fhircore.engine.util.extension.launchActivityWithNoBackStackHistory +import org.smartregister.fhircore.quest.QuestTestRunner +import org.smartregister.fhircore.quest.ui.login.LoginActivity +import timber.log.Timber +import javax.inject.Inject + + +/** + * Created by Ephraim Kigamba - nek.eam@gmail.com on 11-07-2023. + */ +//@RunWith(AndroidJUnit4::class) +@HiltAndroidTest +class DefaultRepositoryPerformanceTests { + + @get:Rule + val benchmarkRule = BenchmarkRule() + + @Inject lateinit var defaultRepository: DefaultRepository + @Inject lateinit var registerRepository: RegisterRepository + + + @get:Rule val hiltRule = HiltAndroidRule(this) + + @Before + fun setUp() { + hiltRule.inject() + + if (InstrumentationRegistry.getInstrumentation().context.externalCacheDir == null ) { + Timber.e("Instrumentation registry is null") + } else { + Timber.e("Instrumentation registry is NOT NULL") + } + + runBlocking { + defaultRepository.configurationRegistry.loadConfigurations("app/debug", InstrumentationRegistry.getInstrumentation().targetContext) { loadConfigSuccessful -> + + /*if (loadConfigSuccessful) { + sharedPreferencesHelper.write(SharedPreferenceKey.APP_ID.name, thisAppId) + context.getActivity()?.launchActivityWithNoBackStackHistory() + } else { + _error.postValue(context.getString(R.string.application_not_supported, appId.value)) + }*/ + } + } + + // Plant Timber tree to print in the console + + Timber.plant(Timber.DebugTree()) + } + + @Test + fun benchmarkSomeWork() { + benchmarkRule.measureRepeated { + //registerRepository.retrieveRegisterConfiguration("householdRegister", hashMapOf()) + + runBlocking { + val repoData = registerRepository.loadRegisterData(0, "householdRegister") + System.out.println("Records fetched ${repoData.size}") + } + } + } +} diff --git a/android/quest/src/main/AndroidManifest.xml b/android/quest/src/main/AndroidManifest.xml index 636b53d49b..36c0de4cf2 100644 --- a/android/quest/src/main/AndroidManifest.xml +++ b/android/quest/src/main/AndroidManifest.xml @@ -3,6 +3,12 @@ xmlns:tools="http://schemas.android.com/tools" package="org.smartregister.fhircore.quest"> + + + + + +