From ea9234e2708bfdbeed1f829196b199e5f9c37e2d Mon Sep 17 00:00:00 2001 From: Yogesh Choudhary Paliyal Date: Sun, 13 Aug 2023 17:02:32 +0530 Subject: [PATCH] add more tests (#667) * add more tests * minor improvements * spotless fix --- .../keypass/SharedPreferenceUtilsTest.kt | 32 +++++++++++++++---- .../common/CommonMyApplication.kt | 2 +- .../common/utils/CryptoManager.kt | 13 -------- 3 files changed, 27 insertions(+), 20 deletions(-) diff --git a/common/src/androidTest/java/com/yogeshpaliyal/keypass/SharedPreferenceUtilsTest.kt b/common/src/androidTest/java/com/yogeshpaliyal/keypass/SharedPreferenceUtilsTest.kt index cb901dcf..2f22dc8f 100644 --- a/common/src/androidTest/java/com/yogeshpaliyal/keypass/SharedPreferenceUtilsTest.kt +++ b/common/src/androidTest/java/com/yogeshpaliyal/keypass/SharedPreferenceUtilsTest.kt @@ -1,12 +1,14 @@ package com.yogeshpaliyal.keypass import android.content.Context -import androidx.datastore.preferences.core.edit import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 -import com.yogeshpaliyal.common.utils.dataStore +import com.yogeshpaliyal.common.data.DEFAULT_PASSWORD_LENGTH +import com.yogeshpaliyal.common.data.UserSettings import com.yogeshpaliyal.common.utils.getUserSettings import com.yogeshpaliyal.common.utils.setDefaultPasswordLength +import com.yogeshpaliyal.common.utils.setKeyPassPassword +import com.yogeshpaliyal.common.utils.setUserSettings import kotlinx.coroutines.runBlocking import org.junit.After import org.junit.Assert.assertEquals @@ -27,7 +29,7 @@ class SharedPreferenceUtilsTest { @Test fun getKeyPassPasswordLength_test() = runBlocking { val result = context.getUserSettings().defaultPasswordLength - assertEquals(null, result) + assertEquals(DEFAULT_PASSWORD_LENGTH, result) } @Test @@ -38,12 +40,30 @@ class SharedPreferenceUtilsTest { assertEquals(expectedLength, result) } + @Test + fun getKeyPassPassword() = runBlocking { + val result = context.getUserSettings().keyPassPassword + assertEquals(null, result) + } + + @Test + fun setKeyPassPassword() = runBlocking { + val password = "hello" + context.setKeyPassPassword(password) +// val readAsync = async { context.getUserSettings().keyPassPassword } +// val writeAsync = async { context.setKeyPassPassword(password) } +// +// readAsync.await() +// writeAsync.await() + + val result = context.getUserSettings().keyPassPassword + assertEquals(password, result) + } + @After fun clear() { runBlocking { - context.dataStore.edit { preferences -> - preferences.clear() - } + context.setUserSettings(UserSettings()) } } } diff --git a/common/src/main/java/com/yogeshpaliyal/common/CommonMyApplication.kt b/common/src/main/java/com/yogeshpaliyal/common/CommonMyApplication.kt index 596c5385..a33152a1 100644 --- a/common/src/main/java/com/yogeshpaliyal/common/CommonMyApplication.kt +++ b/common/src/main/java/com/yogeshpaliyal/common/CommonMyApplication.kt @@ -21,7 +21,7 @@ abstract class CommonMyApplication : Application(), Configuration.Provider { val previewExceptionHandler = Thread.getDefaultUncaughtExceptionHandler() Thread.setDefaultUncaughtExceptionHandler { thread, throwable -> val intent = getCrashActivityIntent(throwable) - intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK + intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK startActivity(intent) previewExceptionHandler?.uncaughtException(thread, throwable) } diff --git a/common/src/main/java/com/yogeshpaliyal/common/utils/CryptoManager.kt b/common/src/main/java/com/yogeshpaliyal/common/utils/CryptoManager.kt index ea693a58..f768a3c9 100644 --- a/common/src/main/java/com/yogeshpaliyal/common/utils/CryptoManager.kt +++ b/common/src/main/java/com/yogeshpaliyal/common/utils/CryptoManager.kt @@ -1,9 +1,7 @@ package com.yogeshpaliyal.common.utils -import android.os.Build import android.security.keystore.KeyGenParameterSpec import android.security.keystore.KeyProperties -import androidx.annotation.RequiresApi import java.io.InputStream import java.io.OutputStream import java.security.KeyStore @@ -12,22 +10,11 @@ import javax.crypto.KeyGenerator import javax.crypto.SecretKey import javax.crypto.spec.IvParameterSpec -@RequiresApi(Build.VERSION_CODES.M) class CryptoManager { private val keyStore = KeyStore.getInstance("AndroidKeyStore").apply { load(null) } - private val encryptCipher get() = Cipher.getInstance(TRANSFORMATION).apply { - init(Cipher.ENCRYPT_MODE, getKey()) - } - - private fun getDecryptCipherForIv(iv: ByteArray): Cipher { - return Cipher.getInstance(TRANSFORMATION).apply { - init(Cipher.DECRYPT_MODE, getKey(), IvParameterSpec(iv)) - } - } - private fun getKey(): SecretKey { val existingKey = keyStore.getEntry("secret", null) as? KeyStore.SecretKeyEntry return existingKey?.secretKey ?: createKey()