VaultSlotRollbackTest.kt

1.7 KB · raw

1package com.peachpasswords.vault23import org.junit.Assert.assertEquals4import org.junit.Assert.assertTrue5import org.junit.Test67class VaultSlotRollbackTest {8    @Test fun triad_rollback_attempts_every_slot_after_a_failure() {9        val storage = RollbackStorage(failSlotA = true)10        val priorA = StoredVault(4, "salt", "a")11        val priorD = StoredVault(4, "salt", "d")1213        val failures = VaultSlotRollback(storage).restoreTriad(priorA, "b", priorD)1415        assertEquals(listOf("writeSlotA returned false"), failures)16        assertTrue(storage.slotBWritten)17        assertTrue(storage.decoyWritten)18    }1920    @Test fun absent_prior_vault_clears_partial_state() {21        val storage = RollbackStorage()2223        assertTrue(VaultSlotRollback(storage).restoreTriad(null, null, null).isEmpty())24        assertTrue(storage.cleared)25    }26}2728private class RollbackStorage(private val failSlotA: Boolean = false) : VaultStorage {29    var slotBWritten = false30    var decoyWritten = false31    var cleared = false32    override fun loadSlotA(): StoredVault? = null33    override fun hasVault() = false34    override fun writeSlotA(slot: StoredVault) = !failSlotA35    override fun writeSlotB(blobBase64: String): Boolean { slotBWritten = true; return true }36    override fun loadDecoySlot(): StoredVault? = null37    override fun writeDecoySlot(slot: StoredVault): Boolean { decoyWritten = true; return true }38    override fun hasDecoySlot() = false39    override fun clearDecoySlot() = Unit40    override fun version() = 0L41    override fun stampLocalMutation() = 0L42    override fun loadSettings() = VaultSettings()43    override fun writeSettings(settings: VaultSettings) = true44    override fun clearVault(): Boolean { cleared = true; return true }45}