aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/androidTest/java/com/zeapo/pwdstore/DecryptTest.kt
diff options
context:
space:
mode:
authorHarsh Shandilya <msfjarvis@gmail.com>2020-04-17 00:24:13 +0530
committerGitHub <noreply@github.com>2020-04-17 00:24:13 +0530
commit4ffd7ed9bffa5139277ffb91de5a69f2b714222c (patch)
treebccd7b27685d602da42d03111eeb4a36b1a803c1 /app/src/androidTest/java/com/zeapo/pwdstore/DecryptTest.kt
parent8b4751f8250dea3efe04c73a87bdfe2926e2ac3f (diff)
downloadHardenedPass-4ffd7ed9bffa5139277ffb91de5a69f2b714222c.tar.gz
HardenedPass-4ffd7ed9bffa5139277ffb91de5a69f2b714222c.zip
Enable emulator tests (#708)
* github: Enable instrumentation testing in PRs Signed-off-by: Harsh Shandilya <me@msfjarvis.dev> * Upgrade to Gradle 6.3 Signed-off-by: Harsh Shandilya <me@msfjarvis.dev> * Remove outdated and broken tests, redo PasswordEntryTest in Kotlin Signed-off-by: Harsh Shandilya <me@msfjarvis.dev> * Remove now unused test assets Signed-off-by: Harsh Shandilya <me@msfjarvis.dev> * github: Disable debug APK uploads in PR testing Signed-off-by: Harsh Shandilya <me@msfjarvis.dev> * Update .github/workflows/pull_request.yml * Update .github/workflows/pull_request.yml Switching to Ubuntu fails due to the SDK 29 missing. Co-authored-by: Fabian Henneke <FabianHenneke@users.noreply.github.com>
Diffstat (limited to 'app/src/androidTest/java/com/zeapo/pwdstore/DecryptTest.kt')
-rw-r--r--app/src/androidTest/java/com/zeapo/pwdstore/DecryptTest.kt182
1 files changed, 0 insertions, 182 deletions
diff --git a/app/src/androidTest/java/com/zeapo/pwdstore/DecryptTest.kt b/app/src/androidTest/java/com/zeapo/pwdstore/DecryptTest.kt
deleted file mode 100644
index 17c7cbed..00000000
--- a/app/src/androidTest/java/com/zeapo/pwdstore/DecryptTest.kt
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Copyright © 2014-2020 The Android Password Store Authors. All Rights Reserved.
- * SPDX-License-Identifier: GPL-3.0-only
- */
-package com.zeapo.pwdstore
-
-import android.annotation.SuppressLint
-import android.content.ClipboardManager
-import android.content.Context
-import android.content.Intent
-import android.os.IBinder
-import android.os.ParcelFileDescriptor
-import android.os.SystemClock
-import android.util.Log
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.LargeTest
-import androidx.test.platform.app.InstrumentationRegistry
-import androidx.test.rule.ActivityTestRule
-import com.zeapo.pwdstore.crypto.PgpActivity
-import java.io.File
-import java.io.FileOutputStream
-import java.io.IOException
-import java.nio.charset.StandardCharsets
-import kotlinx.android.synthetic.main.decrypt_layout.crypto_extra_show
-import kotlinx.android.synthetic.main.decrypt_layout.crypto_password_category_decrypt
-import kotlinx.android.synthetic.main.decrypt_layout.crypto_password_file
-import kotlinx.android.synthetic.main.decrypt_layout.crypto_password_show
-import kotlinx.android.synthetic.main.decrypt_layout.crypto_username_show
-import org.apache.commons.io.FileUtils
-import org.apache.commons.io.IOUtils
-import org.junit.Assert.assertEquals
-import org.junit.Assert.assertNotNull
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.openintents.openpgp.IOpenPgpService2
-
-@RunWith(AndroidJUnit4::class)
-@LargeTest
-class DecryptTest {
- private lateinit var targetContext: Context
- private lateinit var testContext: Context
- lateinit var activity: PgpActivity
-
- private val name = "sub"
- private val parentPath = "/category/"
- lateinit var path: String
- lateinit var repoPath: String
-
- @Rule @JvmField
- var mActivityRule: ActivityTestRule<PgpActivity> = ActivityTestRule<PgpActivity>(PgpActivity::class.java, true, false)
-
- private fun init() {
- targetContext = InstrumentationRegistry.getInstrumentation().targetContext
- testContext = InstrumentationRegistry.getInstrumentation().context
- copyAssets("encrypted-store", File(targetContext.filesDir, "test-store").absolutePath)
- repoPath = File(targetContext.filesDir, "test-store").absolutePath
- path = "$repoPath/$parentPath/$name.gpg".replace("//", "/")
-
- val intent = Intent(targetContext, PgpActivity::class.java)
- intent.putExtra("OPERATION", "DECRYPT")
- intent.putExtra("FILE_PATH", path)
- intent.putExtra("REPO_PATH", repoPath)
-
- activity = mActivityRule.launchActivity(intent)
- }
-
- @Test
- fun pathShouldDecompose() {
- val pathOne = "/fake/path/cat1/n1.gpg"
- val pathTwo = "/fake/path/n2.gpg"
-
- assertEquals("/cat1/n1.gpg", PgpActivity.getRelativePath(pathOne, "/fake/path"))
- assertEquals("/cat1/", PgpActivity.getParentPath(pathOne, "/fake/path"))
- assertEquals("n1", PgpActivity.getName("$pathOne/fake/path"))
- // test that even if we append a `/` it still works
- assertEquals("n1", PgpActivity.getName("$pathOne/fake/path/"))
-
- assertEquals("/n2.gpg", PgpActivity.getRelativePath(pathTwo, "/fake/path"))
- assertEquals("/", PgpActivity.getParentPath(pathTwo, "/fake/path"))
- assertEquals("n2", PgpActivity.getName("$pathTwo/fake/path"))
- assertEquals("n2", PgpActivity.getName("$pathTwo/fake/path/"))
- }
-
- @Test
- fun activityShouldShowName() {
- init()
-
- val categoryView = activity.crypto_password_category_decrypt
- assertNotNull(categoryView)
- assertEquals(parentPath, categoryView.text)
-
- val nameView = activity.crypto_password_file
- assertNotNull(nameView)
- assertEquals(name, nameView.text)
- }
-
- @SuppressLint("ApplySharedPref") // we need the preferences right away
- @Test
- fun shouldDecrypt() {
- init()
- val clearPass = IOUtils.toString(testContext.assets.open("clear-store/category/sub"), StandardCharsets.UTF_8)
- val passEntry = PasswordEntry(clearPass)
-
- // Setup the timer to 1 second
- // first remember the previous timer to set it back later
- val showTime = try {
- Integer.parseInt(activity.settings.getString("general_show_time", "45") ?: "45")
- } catch (e: NumberFormatException) {
- 45
- }
- // second set the new timer
- activity.settings.edit().putString("general_show_time", "2").commit()
-
- activity.onBound(object : IOpenPgpService2 {
- override fun createOutputPipe(p0: Int): ParcelFileDescriptor {
- TODO("Not yet implemented")
- }
-
- override fun asBinder(): IBinder {
- TODO("Not yet implemented")
- }
-
- override fun execute(p0: Intent?, p1: ParcelFileDescriptor?, p2: Int): Intent {
- TODO("Not yet implemented")
- }
- })
-
- // have we decrypted things correctly?
- assertEquals(passEntry.password, activity.crypto_password_show.text)
- assertEquals(passEntry.username, activity.crypto_username_show.text.toString())
- assertEquals(passEntry.extraContent, activity.crypto_extra_show.text.toString())
-
- // did we copy the password?
- val clipboard: ClipboardManager = activity.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
- assertEquals(passEntry.password, clipboard.primaryClip!!.getItemAt(0).text)
-
- // wait until the clipboard is cleared
- SystemClock.sleep(4000)
-
- // The clipboard should be cleared!!
- for (i in 0..clipboard.primaryClip!!.itemCount) {
- assertEquals("", clipboard.primaryClip!!.getItemAt(i).text)
- }
-
- // set back the timer
- activity.settings.edit().putString("general_show_time", showTime.toString()).commit()
- }
-
- companion object {
- fun copyAssets(source: String, destination: String) {
- FileUtils.forceMkdir(File(destination))
- FileUtils.cleanDirectory(File(destination))
-
- val testContext = InstrumentationRegistry.getInstrumentation().context
- val assetManager = testContext.assets
- val files: Array<String>? = assetManager.list(source)
-
- files?.map { filename ->
- val destPath = "$destination/$filename"
- val sourcePath = "$source/$filename"
-
- if (assetManager.list(sourcePath)!!.isNotEmpty()) {
- FileUtils.forceMkdir(File(destination, filename))
- copyAssets("$source/$filename", destPath)
- } else {
- try {
- val input = assetManager.open(sourcePath)
- val outFile = File(destination, filename)
- val output = FileOutputStream(outFile)
- IOUtils.copy(input, output)
- input.close()
- output.flush()
- output.close()
- } catch (e: IOException) {
- Log.e("tag", "Failed to copy asset file: $filename", e)
- }
- }
- }
- }
- }
-}