github.com/prysmaticlabs/prysm@v1.4.4/validator/db/restore_test.go (about) 1 package db 2 3 import ( 4 "context" 5 "flag" 6 "io/ioutil" 7 "os" 8 "path" 9 "testing" 10 11 "github.com/prysmaticlabs/prysm/shared/cmd" 12 "github.com/prysmaticlabs/prysm/shared/params" 13 "github.com/prysmaticlabs/prysm/shared/testutil/assert" 14 "github.com/prysmaticlabs/prysm/shared/testutil/require" 15 "github.com/prysmaticlabs/prysm/validator/db/kv" 16 logTest "github.com/sirupsen/logrus/hooks/test" 17 "github.com/urfave/cli/v2" 18 ) 19 20 func TestRestore(t *testing.T) { 21 logHook := logTest.NewGlobal() 22 ctx := context.Background() 23 24 backupDb, err := kv.NewKVStore(ctx, t.TempDir(), &kv.Config{}) 25 defer func() { 26 require.NoError(t, backupDb.Close()) 27 }() 28 require.NoError(t, err) 29 root := [32]byte{1} 30 require.NoError(t, backupDb.SaveGenesisValidatorsRoot(ctx, root[:])) 31 require.NoError(t, backupDb.Close()) 32 // We rename the backup file so that we can later verify 33 // whether the restored db has been renamed correctly. 34 require.NoError(t, os.Rename( 35 path.Join(backupDb.DatabasePath(), kv.ProtectionDbFileName), 36 path.Join(backupDb.DatabasePath(), "backup.db"))) 37 38 restoreDir := t.TempDir() 39 require.NoError(t, os.Chmod(restoreDir, params.BeaconIoConfig().ReadWriteExecutePermissions)) 40 app := cli.App{} 41 set := flag.NewFlagSet("test", 0) 42 set.String(cmd.RestoreSourceFileFlag.Name, "", "") 43 set.String(cmd.RestoreTargetDirFlag.Name, "", "") 44 require.NoError(t, set.Set(cmd.RestoreSourceFileFlag.Name, path.Join(backupDb.DatabasePath(), "backup.db"))) 45 require.NoError(t, set.Set(cmd.RestoreTargetDirFlag.Name, restoreDir)) 46 cliCtx := cli.NewContext(&app, set, nil) 47 48 assert.NoError(t, Restore(cliCtx)) 49 50 files, err := ioutil.ReadDir(restoreDir) 51 require.NoError(t, err) 52 assert.Equal(t, 1, len(files)) 53 assert.Equal(t, kv.ProtectionDbFileName, files[0].Name()) 54 restoredDb, err := kv.NewKVStore(ctx, restoreDir, &kv.Config{}) 55 defer func() { 56 require.NoError(t, restoredDb.Close()) 57 }() 58 require.NoError(t, err) 59 genesisRoot, err := restoredDb.GenesisValidatorsRoot(ctx) 60 require.NoError(t, err) 61 require.DeepEqual(t, root[:], genesisRoot, "Restored database has incorrect data") 62 assert.LogsContain(t, logHook, "Restore completed successfully") 63 }