diff options
Diffstat (limited to 'passgen/diceware/src/test/kotlin/app')
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") + } + } +} |