aboutsummaryrefslogtreecommitdiff
path: root/passgen/diceware/src/test/kotlin/app
diff options
context:
space:
mode:
Diffstat (limited to 'passgen/diceware/src/test/kotlin/app')
-rw-r--r--passgen/diceware/src/test/kotlin/app/passwordstore/passgen/diceware/DicewarePassphraseGeneratorTest.kt29
-rw-r--r--passgen/diceware/src/test/kotlin/app/passwordstore/passgen/diceware/DieTest.kt47
-rw-r--r--passgen/diceware/src/test/kotlin/app/passwordstore/passgen/diceware/WordListParserTest.kt37
3 files changed, 113 insertions, 0 deletions
diff --git a/passgen/diceware/src/test/kotlin/app/passwordstore/passgen/diceware/DicewarePassphraseGeneratorTest.kt b/passgen/diceware/src/test/kotlin/app/passwordstore/passgen/diceware/DicewarePassphraseGeneratorTest.kt
new file mode 100644
index 00000000..69febaf1
--- /dev/null
+++ b/passgen/diceware/src/test/kotlin/app/passwordstore/passgen/diceware/DicewarePassphraseGeneratorTest.kt
@@ -0,0 +1,29 @@
+/*
+ * Copyright © 2014-2021 The Android Password Store Authors. All Rights Reserved.
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+package app.passwordstore.passgen.diceware
+
+import kotlin.random.Random
+import kotlin.test.assertEquals
+import org.junit.Test
+
+class DicewarePassphraseGeneratorTest {
+ /** Pre-seeded [Random] instance to ensure tests are deterministic. */
+ private val random = Random(1_00_000)
+
+ private val intGenerator = RandomIntGenerator { it.random(random) }
+ @Test
+ fun generatePassphrase() {
+ val die = Die(6, intGenerator)
+
+ val generator =
+ DicewarePassphraseGenerator(
+ die,
+ WordListParserTest.getDefaultWordList(),
+ )
+
+ assertEquals("salvation_cozily_croon_trustee_fidgety", generator.generatePassphrase(5, '_'))
+ }
+}
diff --git a/passgen/diceware/src/test/kotlin/app/passwordstore/passgen/diceware/DieTest.kt b/passgen/diceware/src/test/kotlin/app/passwordstore/passgen/diceware/DieTest.kt
new file mode 100644
index 00000000..725d80f7
--- /dev/null
+++ b/passgen/diceware/src/test/kotlin/app/passwordstore/passgen/diceware/DieTest.kt
@@ -0,0 +1,47 @@
+/*
+ * Copyright © 2014-2021 The Android Password Store Authors. All Rights Reserved.
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+package app.passwordstore.passgen.diceware
+
+import kotlin.random.Random
+import kotlin.test.Test
+import kotlin.test.assertEquals
+
+class DieTest {
+
+ /** Pre-seeded [Random] instance to ensure tests are deterministic. */
+ private val random = Random(1_00_000)
+
+ private val intGenerator = RandomIntGenerator { it.random(random) }
+
+ @Test
+ fun oneRoll() {
+ val die = Die(6, intGenerator)
+ assertEquals(5, die.roll())
+ }
+
+ @Test
+ fun multipleRolls() {
+ val die = Die(6, intGenerator)
+ assertEquals(526242, die.rollMultiple(6))
+ }
+
+ @Test
+ fun consecutiveRolls() {
+ val die = Die(6, intGenerator)
+ assertEquals(5, die.roll())
+ assertEquals(2, die.roll())
+ assertEquals(6, die.roll())
+ assertEquals(2, die.roll())
+ assertEquals(4, die.roll())
+ assertEquals(2, die.roll())
+ }
+
+ @Test
+ fun hundredSides() {
+ val die = Die(100, intGenerator)
+ assertEquals(67, die.roll())
+ }
+}
diff --git a/passgen/diceware/src/test/kotlin/app/passwordstore/passgen/diceware/WordListParserTest.kt b/passgen/diceware/src/test/kotlin/app/passwordstore/passgen/diceware/WordListParserTest.kt
new file mode 100644
index 00000000..bcb85cb4
--- /dev/null
+++ b/passgen/diceware/src/test/kotlin/app/passwordstore/passgen/diceware/WordListParserTest.kt
@@ -0,0 +1,37 @@
+/*
+ * Copyright © 2014-2021 The Android Password Store Authors. All Rights Reserved.
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+package app.passwordstore.passgen.diceware
+
+import java.io.InputStream
+import kotlin.test.Test
+import kotlin.test.assertEquals
+
+class WordListParserTest {
+ @Test
+ fun parseWordList() {
+ val stream = "11111\tabcde\n22222\tfghij".byteInputStream()
+ val parsedMap = WordListParser.parse(stream)
+ assertEquals(2, parsedMap.size)
+ assertEquals("abcde", parsedMap[11111])
+ assertEquals("fghij", parsedMap[22222])
+ }
+
+ @Test
+ fun parseDefaultWordList() {
+ val wordlist = getDefaultWordList()
+ val parsedMap = WordListParser.parse(wordlist)
+ assertEquals(7776, parsedMap.size)
+ assertEquals("zoom", parsedMap[66666])
+ assertEquals("salute", parsedMap[52621])
+ }
+
+ companion object {
+ fun getDefaultWordList(): InputStream {
+ return requireNotNull(this::class.java.classLoader)
+ .getResourceAsStream("diceware_wordlist.txt")
+ }
+ }
+}