summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/src/androidTest/assets/clear-store/category/sub3
-rw-r--r--app/src/androidTest/assets/clear-store/pass3
-rw-r--r--app/src/androidTest/assets/encrypted-store/category/sub.gpgbin0 -> 362 bytes
-rw-r--r--app/src/androidTest/assets/encrypted-store/pass.gpgbin0 -> 361 bytes
-rw-r--r--app/src/androidTest/assets/private_keybin0 -> 2575 bytes
-rw-r--r--app/src/androidTest/assets/store/dir1/f1.gpg0
-rw-r--r--app/src/androidTest/assets/store/dir1/f11.gpg0
-rw-r--r--app/src/androidTest/assets/store/dir2/f2.gpg0
-rw-r--r--app/src/androidTest/assets/store/dir3/dir4/f4.gpg0
-rw-r--r--app/src/androidTest/assets/store/dir3/f3.gpg0
-rw-r--r--app/src/androidTest/assets/store/name1.gpg0
-rw-r--r--app/src/androidTest/assets/store/name2.gpg0
-rw-r--r--app/src/androidTest/java/com/zeapo/pwdstore/DecryptTest.kt85
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/crypto/PgpActivity.kt104
14 files changed, 116 insertions, 79 deletions
diff --git a/app/src/androidTest/assets/clear-store/category/sub b/app/src/androidTest/assets/clear-store/category/sub
new file mode 100644
index 00000000..eb9106c1
--- /dev/null
+++ b/app/src/androidTest/assets/clear-store/category/sub
@@ -0,0 +1,3 @@
+sub_pass
+login: user
+sub_extra
diff --git a/app/src/androidTest/assets/clear-store/pass b/app/src/androidTest/assets/clear-store/pass
new file mode 100644
index 00000000..8415d1ab
--- /dev/null
+++ b/app/src/androidTest/assets/clear-store/pass
@@ -0,0 +1,3 @@
+password
+username: user
+extra
diff --git a/app/src/androidTest/assets/encrypted-store/category/sub.gpg b/app/src/androidTest/assets/encrypted-store/category/sub.gpg
new file mode 100644
index 00000000..dded0132
--- /dev/null
+++ b/app/src/androidTest/assets/encrypted-store/category/sub.gpg
Binary files differ
diff --git a/app/src/androidTest/assets/encrypted-store/pass.gpg b/app/src/androidTest/assets/encrypted-store/pass.gpg
new file mode 100644
index 00000000..53c614c4
--- /dev/null
+++ b/app/src/androidTest/assets/encrypted-store/pass.gpg
Binary files differ
diff --git a/app/src/androidTest/assets/private_key b/app/src/androidTest/assets/private_key
new file mode 100644
index 00000000..7141d6f4
--- /dev/null
+++ b/app/src/androidTest/assets/private_key
Binary files differ
diff --git a/app/src/androidTest/assets/store/dir1/f1.gpg b/app/src/androidTest/assets/store/dir1/f1.gpg
deleted file mode 100644
index e69de29b..00000000
--- a/app/src/androidTest/assets/store/dir1/f1.gpg
+++ /dev/null
diff --git a/app/src/androidTest/assets/store/dir1/f11.gpg b/app/src/androidTest/assets/store/dir1/f11.gpg
deleted file mode 100644
index e69de29b..00000000
--- a/app/src/androidTest/assets/store/dir1/f11.gpg
+++ /dev/null
diff --git a/app/src/androidTest/assets/store/dir2/f2.gpg b/app/src/androidTest/assets/store/dir2/f2.gpg
deleted file mode 100644
index e69de29b..00000000
--- a/app/src/androidTest/assets/store/dir2/f2.gpg
+++ /dev/null
diff --git a/app/src/androidTest/assets/store/dir3/dir4/f4.gpg b/app/src/androidTest/assets/store/dir3/dir4/f4.gpg
deleted file mode 100644
index e69de29b..00000000
--- a/app/src/androidTest/assets/store/dir3/dir4/f4.gpg
+++ /dev/null
diff --git a/app/src/androidTest/assets/store/dir3/f3.gpg b/app/src/androidTest/assets/store/dir3/f3.gpg
deleted file mode 100644
index e69de29b..00000000
--- a/app/src/androidTest/assets/store/dir3/f3.gpg
+++ /dev/null
diff --git a/app/src/androidTest/assets/store/name1.gpg b/app/src/androidTest/assets/store/name1.gpg
deleted file mode 100644
index e69de29b..00000000
--- a/app/src/androidTest/assets/store/name1.gpg
+++ /dev/null
diff --git a/app/src/androidTest/assets/store/name2.gpg b/app/src/androidTest/assets/store/name2.gpg
deleted file mode 100644
index e69de29b..00000000
--- a/app/src/androidTest/assets/store/name2.gpg
+++ /dev/null
diff --git a/app/src/androidTest/java/com/zeapo/pwdstore/DecryptTest.kt b/app/src/androidTest/java/com/zeapo/pwdstore/DecryptTest.kt
index 52e1e65d..eba20e1d 100644
--- a/app/src/androidTest/java/com/zeapo/pwdstore/DecryptTest.kt
+++ b/app/src/androidTest/java/com/zeapo/pwdstore/DecryptTest.kt
@@ -9,6 +9,7 @@ import android.support.test.runner.AndroidJUnit4
import android.util.Log
import com.zeapo.pwdstore.crypto.PgpActivity
import kotlinx.android.synthetic.main.decrypt_layout.*
+import org.apache.commons.io.FileUtils
import org.apache.commons.io.IOUtils
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotNull
@@ -22,37 +23,47 @@ import java.io.IOException
@RunWith(AndroidJUnit4::class)
@LargeTest
-class WelcomeActivityTest {
- @Rule @JvmField
- var mActivityRule: ActivityTestRule<PgpActivity> = ActivityTestRule(PgpActivity::class.java, true, false)
+class DecryptTest {
+ lateinit var targetContext: Context
+ lateinit var testContext: Context
+ lateinit var activity: PgpActivity
- @Test
- fun pathShouldDecompose() {
- val path = "/data/my.app.com/files/store/cat1/name.gpg"
- val repoPath = "/data/my.app.com/files/store"
- assertEquals("/cat1/name.gpg", PgpActivity.getRelativePath(path, repoPath))
- assertEquals("/cat1/", PgpActivity.getParentPath(path, repoPath))
- assertEquals("name", PgpActivity.getName(path, repoPath))
- assertEquals("name", PgpActivity.getName(path, "$repoPath/"))
- }
+ val name = "sub"
+ val parentPath = "/category/"
+ lateinit var path: String
+ lateinit var repoPath: String
- @Test
- fun activityShouldShowName() {
- val context = InstrumentationRegistry.getInstrumentation().targetContext
- val name = "name"
- val parentPath = "/cat1/"
- val repoPath = "${context.filesDir}/store/"
- val path = "$repoPath/cat1/name.gpg"
+ @Rule @JvmField
+ var mActivityRule: ActivityTestRule<PgpActivity> = ActivityTestRule<PgpActivity>(PgpActivity::class.java, true, false)
+ fun init() {
+ targetContext = InstrumentationRegistry.getInstrumentation().targetContext
+ testContext = InstrumentationRegistry.getContext()
+ 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(context, PgpActivity::class.java)
+ val intent = Intent(targetContext, PgpActivity::class.java)
intent.putExtra("OPERATION", "DECRYPT")
intent.putExtra("FILE_PATH", path)
intent.putExtra("REPO_PATH", repoPath)
- copyAssets(context, "store", context.filesDir.absolutePath)
+ activity = mActivityRule.launchActivity(intent)
+ }
+
+ @Test
+ fun pathShouldDecompose() {
+ init()
+
+ assertEquals("/category/sub.gpg", PgpActivity.getRelativePath(path, repoPath))
+ assertEquals("/category/", PgpActivity.getParentPath(path, repoPath))
+ assertEquals("sub", PgpActivity.getName(path, repoPath))
+ assertEquals("sub", PgpActivity.getName(path, "$repoPath/"))
+ }
- val activity: PgpActivity = mActivityRule.launchActivity(intent)
+ @Test
+ fun activityShouldShowName() {
+ init()
val categoryView = activity.crypto_password_category_decrypt
assertNotNull(categoryView)
@@ -63,17 +74,37 @@ class WelcomeActivityTest {
assertEquals(name, nameView.text)
}
+ @Test
+ fun shouldDecrypt() {
+ init()
+
+ activity.onBound(null)
+ val clearPass = IOUtils.toString(
+ IOUtils.toByteArray(testContext.assets.open("clear-store/category/sub")),
+ Charsets.UTF_8.name()
+ )
+ val passEntry = PasswordEntry(clearPass)
+ 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())
+ }
+
companion object {
- fun copyAssets(context: Context, source: String, destination: String) {
- val assetManager = context.assets
+ fun copyAssets(source: String, destination: String) {
+ FileUtils.forceMkdir(File(destination))
+ FileUtils.cleanDirectory(File(destination))
+
+ val testContext = InstrumentationRegistry.getContext()
+ 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(filename).isNotEmpty()) {
- File(destPath).mkdir()
- copyAssets(context, "$source/$filename", destPath)
+
+ if (assetManager.list(sourcePath).isNotEmpty()) {
+ FileUtils.forceMkdir(File(destination, filename))
+ copyAssets("$source/$filename", destPath)
} else {
try {
val input = assetManager.open(sourcePath)
diff --git a/app/src/main/java/com/zeapo/pwdstore/crypto/PgpActivity.kt b/app/src/main/java/com/zeapo/pwdstore/crypto/PgpActivity.kt
index 96cca034..6bfac55f 100644
--- a/app/src/main/java/com/zeapo/pwdstore/crypto/PgpActivity.kt
+++ b/app/src/main/java/com/zeapo/pwdstore/crypto/PgpActivity.kt
@@ -186,58 +186,58 @@ class PgpActivity : AppCompatActivity(), OpenPgpServiceConnection.OnBound {
when (result?.getIntExtra(RESULT_CODE, RESULT_CODE_ERROR)) {
RESULT_CODE_SUCCESS -> {
try {
-// val showPassword = settings.getBoolean("show_password", true)
-// val showExtraContent = settings.getBoolean("show_extra_content", true)
-//
-// crypto_container_decrypt.visibility = View.VISIBLE
-//
-// val monoTypeface = Typeface.createFromAsset(assets, "fonts/sourcecodepro.ttf")
-// val entry = PasswordEntry(oStream)
-//
-// passwordEntry = entry
-//
-// if (operation == "EDIT") {
-// editPassword()
-// return@executeApiAsync
-// }
-//
-// crypto_password_show.typeface = monoTypeface
-// crypto_password_show.text = entry.password
-//
-// crypto_password_toggle_show.visibility = if (showPassword) View.GONE else View.VISIBLE
-// crypto_password_show.transformationMethod = if (showPassword) {
-// null
-// } else {
-// HoldToShowPasswordTransformation(
-// crypto_password_toggle_show,
-// Runnable { crypto_password_show.text = entry.password }
-// )
-// }
-//
-// if (entry.hasExtraContent()) {
-// crypto_extra_show_layout.visibility = if (showExtraContent) View.VISIBLE else View.GONE
-//
-// crypto_extra_show.typeface = monoTypeface
-// crypto_extra_show.text = entry.extraContent
-//
-// if (entry.hasUsername()) {
-// crypto_username_show.visibility = View.VISIBLE
-// crypto_username_show_label.visibility = View.VISIBLE
-// crypto_copy_username.visibility = View.VISIBLE
-//
-// crypto_copy_username.setOnClickListener { copyUsernameToClipBoard(entry.username) }
-// crypto_username_show.typeface = monoTypeface
-// crypto_username_show.text = entry.username
-// } else {
-// crypto_username_show.visibility = View.GONE
-// crypto_username_show_label.visibility = View.GONE
-// crypto_copy_username.visibility = View.GONE
-// }
-// }
-//
-// if (settings.getBoolean("copy_on_decrypt", true)) {
-// copyPasswordToClipBoard()
-// }
+ val showPassword = settings.getBoolean("show_password", true)
+ val showExtraContent = settings.getBoolean("show_extra_content", true)
+
+ crypto_container_decrypt.visibility = View.VISIBLE
+
+ val monoTypeface = Typeface.createFromAsset(assets, "fonts/sourcecodepro.ttf")
+ val entry = PasswordEntry(oStream)
+
+ passwordEntry = entry
+
+ if (operation == "EDIT") {
+ editPassword()
+ return@executeApiAsync
+ }
+
+ crypto_password_show.typeface = monoTypeface
+ crypto_password_show.text = entry.password
+
+ crypto_password_toggle_show.visibility = if (showPassword) View.GONE else View.VISIBLE
+ crypto_password_show.transformationMethod = if (showPassword) {
+ null
+ } else {
+ HoldToShowPasswordTransformation(
+ crypto_password_toggle_show,
+ Runnable { crypto_password_show.text = entry.password }
+ )
+ }
+
+ if (entry.hasExtraContent()) {
+ crypto_extra_show_layout.visibility = if (showExtraContent) View.VISIBLE else View.GONE
+
+ crypto_extra_show.typeface = monoTypeface
+ crypto_extra_show.text = entry.extraContent
+
+ if (entry.hasUsername()) {
+ crypto_username_show.visibility = View.VISIBLE
+ crypto_username_show_label.visibility = View.VISIBLE
+ crypto_copy_username.visibility = View.VISIBLE
+
+ crypto_copy_username.setOnClickListener { copyUsernameToClipBoard(entry.username) }
+ crypto_username_show.typeface = monoTypeface
+ crypto_username_show.text = entry.username
+ } else {
+ crypto_username_show.visibility = View.GONE
+ crypto_username_show_label.visibility = View.GONE
+ crypto_copy_username.visibility = View.GONE
+ }
+ }
+
+ if (settings.getBoolean("copy_on_decrypt", true)) {
+ copyPasswordToClipBoard()
+ }
} catch (e: Exception) {
Log.e(TAG, "An Exception occurred", e)
}