Other: Wipe vault properly on factory reset

Deleting the file isn't enough because it's still held in memory
and is written back to disk on the next write (SetLastVersion during
bridge teardown).
This commit is contained in:
James Houlahan
2022-11-29 09:59:30 +01:00
parent f176174fca
commit 9f64e8a6fa
5 changed files with 53 additions and 7 deletions

View File

@ -185,6 +185,12 @@ func (vault *Vault) SetMigrated() error {
})
}
func (vault *Vault) Reset(gluonDir string) error {
return vault.mod(func(data *Data) {
*data = newDefaultData(gluonDir)
})
}
func (vault *Vault) Close() error {
vault.refLock.Lock()
defer vault.refLock.Unlock()

View File

@ -77,6 +77,25 @@ func TestVault_Corrupt_JunkData(t *testing.T) {
}
}
func TestVault_Reset(t *testing.T) {
s := newVault(t)
// Write some data.
require.NoError(t, s.SetIMAPPort(1234))
require.NoError(t, s.SetSMTPPort(5678))
// The data was written.
require.Equal(t, 1234, s.GetIMAPPort())
require.Equal(t, 5678, s.GetSMTPPort())
// Reset.
require.NoError(t, s.Reset(s.GetGluonDir()))
// The data is gone.
require.Equal(t, 1143, s.GetIMAPPort())
require.Equal(t, 1025, s.GetSMTPPort())
}
func newVault(t *testing.T) *vault.Vault {
t.Helper()