From 5ae5279819d49287e7d6e485ee5fea1c3fffbf40 Mon Sep 17 00:00:00 2001 From: Ephraim Kigamba Date: Mon, 17 Jul 2023 14:07:53 +0300 Subject: [PATCH] code cleanup --- .github/workflows/ci.yml | 32 ++------------ .../data/local/register/RegisterRepository.kt | 6 +-- android/quest/build.gradle.kts | 42 +++++++++--------- .../quest/src/androidTest/AndroidManifest.xml | 2 +- .../ChildRegisterPerformanceTests.kt | 37 +++++++++++----- .../HouseholdRegisterPerformanceTests.kt | 43 ++++++++++++------- .../HouseholdRegisterPerformanceTests2.kt | 41 ++++++++++++------ .../performance/RegisterPerformanceTest.kt | 23 +++++++--- 8 files changed, 128 insertions(+), 98 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b7303cb4a3c..2f7bbb37d99 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -184,33 +184,9 @@ jobs: - name: Copy CI gradle.properties run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties && cat ~/.gradle/gradle.properties - - name: Setup Gradle cache - uses: gradle/gradle-build-action@v2 - - - name: Spotless check quest application - run: ./gradlew -PlocalPropertiesFile=local.properties :quest:spotlessCheck --stacktrace :quest:ktlintCheck --stacktrace - working-directory: android - - - name: Load AVD cache - uses: actions/cache@v2 - id: avd-cache - with: - path: | - ~/.android/avd/* - ~/.android/adb* - key: avd-${{ matrix.api-level }} - - - name: Create AVD and generate snapshot for caching - if: steps.avd-cache.outputs.cache-hit != 'true' - uses: reactivecircus/android-emulator-runner@v2 - with: - working-directory: android - api-level: ${{ matrix.api-level }} - arch: x86_64 - force-avd-creation: false - emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none - disable-animations: false - script: echo "Generated AVD snapshot for caching." + - name: Download sample database for performance tests + working-directory: android + run: wget -q https://github.com/ekigamba/debug-jacoco-reports/releases/download/v0.0.1/resources.db -P quest/src/androidTest/assets/ && ls -lah && ls -lah ../ && ls -lah quest/src/androidTest/assets/ - name: Run Quest module unit and instrumentation tests and generate coverage report uses: reactivecircus/android-emulator-runner@v2 @@ -221,7 +197,7 @@ jobs: force-avd-creation: true emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none disable-animations: true - script: wget https://github.com/ekigamba/debug-jacoco-reports/releases/download/v0.0.1/resources.db && mv resources.db quest/src/androidTest/assets/ && ./gradlew -PlocalPropertiesFile=local.properties :quest:clean && ./gradlew -PlocalPropertiesFile=local.properties :quest:fhircoreJacocoReport --stacktrace + script: ./gradlew -PlocalPropertiesFile=local.properties :quest:clean && ./gradlew -PlocalPropertiesFile=local.properties :quest:fhircoreJacocoReport --stacktrace - name: Upload Quest module test coverage report to Codecov if: matrix.api-level == 30 # Only upload coverage on API level 30 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 cbe7b1896f2..9aa7ecfd26b 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 @@ -108,9 +108,9 @@ constructor( withContext(dispatcherProvider.io()) { fhirEngine.search(search) } } .onFailure { - Timber.e(it, "Error retrieving resources. Empty list returned by default") - System.out.println("Error occurred") - it.printStackTrace() + Timber.e(it, "Error retrieving resources. Empty list returned by default") + System.out.println("Error occurred") + it.printStackTrace() } .getOrDefault(emptyList()) diff --git a/android/quest/build.gradle.kts b/android/quest/build.gradle.kts index 16e43d6c9fd..3874c4cff39 100644 --- a/android/quest/build.gradle.kts +++ b/android/quest/build.gradle.kts @@ -1,8 +1,5 @@ import com.android.build.api.variant.FilterConfiguration.FilterType -import java.io.FileReader import org.gradle.api.tasks.testing.logging.TestLogEvent -import org.json.JSONObject -import kotlin.collections.hashMapOf buildscript { apply(from = "../jacoco.gradle.kts") @@ -76,7 +73,8 @@ android { testInstrumentationRunner = "org.smartregister.fhircore.quest.QuestTestRunner" testInstrumentationRunnerArguments["additionalTestOutputDir"] = "/sdcard/Download" - testInstrumentationRunnerArguments["androidx.benchmark.suppressErrors"] = "ACTIVITY-MISSING,CODE-COVERAGE,DEBUGGABLE,UNLOCKED,EMULATOR" + testInstrumentationRunnerArguments["androidx.benchmark.suppressErrors"] = + "ACTIVITY-MISSING,CODE-COVERAGE,DEBUGGABLE,UNLOCKED,EMULATOR" } signingConfigs { @@ -377,24 +375,26 @@ dependencies { ktlint(project(":linting")) } -task("checkPerformanceLimits") { - val resultsFile = File("performance-results.json") - val expectationsFile = File("expected-results.json") +/* - // Read the expectations file - val expectedResultsMap : HashMap> = hashMapOf() + task("checkPerformanceLimits") { + val resultsFile = File("performance-results.json") + val expectationsFile = File("expected-results.json") - JSONObject(FileReader(expectationsFile).readText()).run { - keys().forEach { key -> - val resultMaxDeltaMap :HashMap = hashMapOf() - val methodExpectedResults = this.getJSONObject("key") + // Read the expectations file + val expectedResultsMap : HashMap> = hashMapOf() - methodExpectedResults.keys().forEach { expectedResultsKey -> - resultMaxDeltaMap.put(expectedResultsKey, methodExpectedResults.getFloat(expectedResultsKey)) - } - } - } + JSONObject(FileReader(expectationsFile).readText()).run { + keys().forEach { key -> + val resultMaxDeltaMap :HashMap = hashMapOf() + val methodExpectedResults = this.getJSONObject("key") + + methodExpectedResults.keys().forEach { expectedResultsKey -> + resultMaxDeltaMap.put(expectedResultsKey, methodExpectedResults.getFloat(expectedResultsKey)) + } + } + } - // Loop through the results file updating the results - JSONObject -} \ No newline at end of file + // Loop through the results file updating the results + JSONObject + }*/ diff --git a/android/quest/src/androidTest/AndroidManifest.xml b/android/quest/src/androidTest/AndroidManifest.xml index 05fe9114db0..991bd277197 100644 --- a/android/quest/src/androidTest/AndroidManifest.xml +++ b/android/quest/src/androidTest/AndroidManifest.xml @@ -23,4 +23,4 @@ - \ No newline at end of file + diff --git a/android/quest/src/androidTest/java/org/smartregister/fhircore/performance/ChildRegisterPerformanceTests.kt b/android/quest/src/androidTest/java/org/smartregister/fhircore/performance/ChildRegisterPerformanceTests.kt index 6290b28d141..e48daf3b1ea 100644 --- a/android/quest/src/androidTest/java/org/smartregister/fhircore/performance/ChildRegisterPerformanceTests.kt +++ b/android/quest/src/androidTest/java/org/smartregister/fhircore/performance/ChildRegisterPerformanceTests.kt @@ -1,3 +1,19 @@ +/* + * 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.performance import androidx.benchmark.junit4.BenchmarkRule @@ -23,6 +39,7 @@ class ChildRegisterPerformanceTests { @get:Rule val benchmarkRule = BenchmarkRule() @Inject lateinit var defaultRepository: DefaultRepository + @Inject lateinit var registerRepository: RegisterRepository @get:Rule val hiltRule = HiltAndroidRule(this) @@ -41,7 +58,7 @@ class ChildRegisterPerformanceTests { runBlocking { defaultRepository.configurationRegistry.loadConfigurations( "app/debug", - InstrumentationRegistry.getInstrumentation().targetContext + InstrumentationRegistry.getInstrumentation().targetContext, ) { loadConfigSuccessful -> } } @@ -53,14 +70,14 @@ class ChildRegisterPerformanceTests { val resourcesDbInputStream = testContext.assets.open("resources.db") // Delete the database files - "/data/data/${appContext.packageName}/databases/resources.db".deleteFileIsExists() - "/data/data/${appContext.packageName}/databases/resources.db-shm".deleteFileIsExists() - "/data/data/${appContext.packageName}/databases/resources.db-wal".deleteFileIsExists() + "/data/data/${appContext.packageName}/databases/resources.db".deleteFileIsExists() + "/data/data/${appContext.packageName}/databases/resources.db-shm".deleteFileIsExists() + "/data/data/${appContext.packageName}/databases/resources.db-wal".deleteFileIsExists() // Copy over the db Files.copy( resourcesDbInputStream, - Path("/data/data/${appContext.packageName}/databases/resources.db") + Path("/data/data/${appContext.packageName}/databases/resources.db"), ) } @@ -108,9 +125,9 @@ class ChildRegisterPerformanceTests { } } - fun String.deleteFileIsExists() { - try { - if (File(this).exists()) Files.delete(Path(this)) - } catch (ex: NoSuchFileException) {} - } + fun String.deleteFileIsExists() { + try { + if (File(this).exists()) Files.delete(Path(this)) + } catch (ex: NoSuchFileException) {} + } } diff --git a/android/quest/src/androidTest/java/org/smartregister/fhircore/performance/HouseholdRegisterPerformanceTests.kt b/android/quest/src/androidTest/java/org/smartregister/fhircore/performance/HouseholdRegisterPerformanceTests.kt index 71715d624e2..6dbfb391c53 100644 --- a/android/quest/src/androidTest/java/org/smartregister/fhircore/performance/HouseholdRegisterPerformanceTests.kt +++ b/android/quest/src/androidTest/java/org/smartregister/fhircore/performance/HouseholdRegisterPerformanceTests.kt @@ -1,3 +1,19 @@ +/* + * 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.performance import androidx.benchmark.junit4.BenchmarkRule @@ -17,13 +33,13 @@ import org.smartregister.fhircore.engine.data.local.DefaultRepository import org.smartregister.fhircore.engine.data.local.register.RegisterRepository import timber.log.Timber - @HiltAndroidTest class HouseholdRegisterPerformanceTests { @get:Rule val benchmarkRule = BenchmarkRule() @Inject lateinit var defaultRepository: DefaultRepository + @Inject lateinit var registerRepository: RegisterRepository @get:Rule val hiltRule = HiltAndroidRule(this) @@ -42,7 +58,7 @@ class HouseholdRegisterPerformanceTests { runBlocking { defaultRepository.configurationRegistry.loadConfigurations( "app/debug", - InstrumentationRegistry.getInstrumentation().targetContext + InstrumentationRegistry.getInstrumentation().targetContext, ) { loadConfigSuccessful -> } } @@ -54,19 +70,17 @@ class HouseholdRegisterPerformanceTests { val resourcesDbInputStream = testContext.assets.open("resources.db") // Delete the database files - "/data/data/${appContext.packageName}/databases/resources.db".deleteFileIsExists() - "/data/data/${appContext.packageName}/databases/resources.db-shm".deleteFileIsExists() - "/data/data/${appContext.packageName}/databases/resources.db-wal".deleteFileIsExists() + "/data/data/${appContext.packageName}/databases/resources.db".deleteFileIsExists() + "/data/data/${appContext.packageName}/databases/resources.db-shm".deleteFileIsExists() + "/data/data/${appContext.packageName}/databases/resources.db-wal".deleteFileIsExists() // Copy over the db Files.copy( resourcesDbInputStream, - Path("/data/data/${appContext.packageName}/databases/resources.db") + Path("/data/data/${appContext.packageName}/databases/resources.db"), ) } - - @Test fun benchmarkPage0() { benchmarkingFunctionality(0) @@ -77,13 +91,11 @@ class HouseholdRegisterPerformanceTests { benchmarkingFunctionality(0) } - @Test fun benchmarkPage2() { benchmarkingFunctionality(1) } - @Test fun benchmarkPage3() { benchmarkingFunctionality(2) @@ -106,7 +118,6 @@ class HouseholdRegisterPerformanceTests { fun benchmarkingFunctionality(page: Int) { benchmarkRule.measureRepeated { - runBlocking { val repoData = registerRepository.loadRegisterData(page, "householdRegister") System.out.println("Records fetched ${repoData.size}") @@ -114,9 +125,9 @@ class HouseholdRegisterPerformanceTests { } } - fun String.deleteFileIsExists() { - try { - if (File(this).exists()) Files.delete(Path(this)) - } catch (ex: NoSuchFileException) {} - } + fun String.deleteFileIsExists() { + try { + if (File(this).exists()) Files.delete(Path(this)) + } catch (ex: NoSuchFileException) {} + } } diff --git a/android/quest/src/androidTest/java/org/smartregister/fhircore/performance/HouseholdRegisterPerformanceTests2.kt b/android/quest/src/androidTest/java/org/smartregister/fhircore/performance/HouseholdRegisterPerformanceTests2.kt index 57d6e17ce84..9d671aa3920 100644 --- a/android/quest/src/androidTest/java/org/smartregister/fhircore/performance/HouseholdRegisterPerformanceTests2.kt +++ b/android/quest/src/androidTest/java/org/smartregister/fhircore/performance/HouseholdRegisterPerformanceTests2.kt @@ -1,3 +1,19 @@ +/* + * 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.performance import androidx.benchmark.junit4.BenchmarkRule @@ -17,13 +33,13 @@ import org.smartregister.fhircore.engine.data.local.DefaultRepository import org.smartregister.fhircore.engine.data.local.register.RegisterRepository import timber.log.Timber - @HiltAndroidTest class HouseholdRegisterPerformanceTests2 { @get:Rule val benchmarkRule = BenchmarkRule() @Inject lateinit var defaultRepository: DefaultRepository + @Inject lateinit var registerRepository: RegisterRepository @get:Rule val hiltRule = HiltAndroidRule(this) @@ -42,7 +58,7 @@ class HouseholdRegisterPerformanceTests2 { runBlocking { defaultRepository.configurationRegistry.loadConfigurations( "app/debug", - InstrumentationRegistry.getInstrumentation().targetContext + InstrumentationRegistry.getInstrumentation().targetContext, ) { loadConfigSuccessful -> } } @@ -54,19 +70,17 @@ class HouseholdRegisterPerformanceTests2 { val resourcesDbInputStream = testContext.assets.open("resources.db") // Delete the database files - "/data/data/${appContext.packageName}/databases/resources.db".deleteFileIsExists() - "/data/data/${appContext.packageName}/databases/resources.db-shm".deleteFileIsExists() - "/data/data/${appContext.packageName}/databases/resources.db-wal".deleteFileIsExists() + "/data/data/${appContext.packageName}/databases/resources.db".deleteFileIsExists() + "/data/data/${appContext.packageName}/databases/resources.db-shm".deleteFileIsExists() + "/data/data/${appContext.packageName}/databases/resources.db-wal".deleteFileIsExists() // Copy over the db Files.copy( resourcesDbInputStream, - Path("/data/data/${appContext.packageName}/databases/resources.db") + Path("/data/data/${appContext.packageName}/databases/resources.db"), ) } - - @Test fun benchmarkPage0() { benchmarkingFunctionality(0) @@ -74,7 +88,6 @@ class HouseholdRegisterPerformanceTests2 { fun benchmarkingFunctionality(page: Int) { benchmarkRule.measureRepeated { - runBlocking { val repoData = registerRepository.loadRegisterData(page, "householdRegister") System.out.println("Records fetched ${repoData.size}") @@ -82,9 +95,9 @@ class HouseholdRegisterPerformanceTests2 { } } - fun String.deleteFileIsExists() { - try { - if (File(this).exists()) Files.delete(Path(this)) - } catch (ex: NoSuchFileException) {} - } + fun String.deleteFileIsExists() { + try { + if (File(this).exists()) Files.delete(Path(this)) + } catch (ex: NoSuchFileException) {} + } } diff --git a/android/quest/src/androidTest/java/org/smartregister/fhircore/performance/RegisterPerformanceTest.kt b/android/quest/src/androidTest/java/org/smartregister/fhircore/performance/RegisterPerformanceTest.kt index 08a90d93e5c..3fab6d5691c 100644 --- a/android/quest/src/androidTest/java/org/smartregister/fhircore/performance/RegisterPerformanceTest.kt +++ b/android/quest/src/androidTest/java/org/smartregister/fhircore/performance/RegisterPerformanceTest.kt @@ -1,7 +1,20 @@ +/* + * 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.performance -/** - * Created by Ephraim Kigamba - nek.eam@gmail.com on 14-07-2023. - */ -class RegisterPerformanceTest { -} \ No newline at end of file +/** Created by Ephraim Kigamba - nek.eam@gmail.com on 14-07-2023. */ +class RegisterPerformanceTest