github.com/prysmaticlabs/prysm@v1.4.4/validator/accounts/accounts_delete_test.go (about)

     1  package accounts
     2  
     3  import (
     4  	"encoding/hex"
     5  	"os"
     6  	"path/filepath"
     7  	"strings"
     8  	"testing"
     9  	"time"
    10  
    11  	"github.com/prysmaticlabs/prysm/shared/bytesutil"
    12  	"github.com/prysmaticlabs/prysm/shared/testutil/assert"
    13  	"github.com/prysmaticlabs/prysm/shared/testutil/require"
    14  	"github.com/prysmaticlabs/prysm/validator/accounts/wallet"
    15  	"github.com/prysmaticlabs/prysm/validator/keymanager"
    16  	"github.com/prysmaticlabs/prysm/validator/keymanager/imported"
    17  )
    18  
    19  func TestDeleteAccounts_Noninteractive(t *testing.T) {
    20  	walletDir, _, passwordFilePath := setupWalletAndPasswordsDir(t)
    21  	// Write a directory where we will import keys from.
    22  	keysDir := filepath.Join(t.TempDir(), "keysDir")
    23  	require.NoError(t, os.MkdirAll(keysDir, os.ModePerm))
    24  
    25  	// Create 3 keystore files in the keys directory we can then
    26  	// import from in our wallet.
    27  	k1, _ := createKeystore(t, keysDir)
    28  	time.Sleep(time.Second)
    29  	k2, _ := createKeystore(t, keysDir)
    30  	time.Sleep(time.Second)
    31  	k3, _ := createKeystore(t, keysDir)
    32  	generatedPubKeys := []string{k1.Pubkey, k2.Pubkey, k3.Pubkey}
    33  	// Only delete keys 0 and 1.
    34  	deletePublicKeys := strings.Join(generatedPubKeys[0:2], ",")
    35  
    36  	// We initialize a wallet with a imported keymanager.
    37  	cliCtx := setupWalletCtx(t, &testWalletConfig{
    38  		// Wallet configuration flags.
    39  		walletDir:           walletDir,
    40  		keymanagerKind:      keymanager.Imported,
    41  		walletPasswordFile:  passwordFilePath,
    42  		accountPasswordFile: passwordFilePath,
    43  		// Flags required for ImportAccounts to work.
    44  		keysDir: keysDir,
    45  		// Flags required for DeleteAccounts to work.
    46  		deletePublicKeys: deletePublicKeys,
    47  	})
    48  	w, err := CreateWalletWithKeymanager(cliCtx.Context, &CreateWalletConfig{
    49  		WalletCfg: &wallet.Config{
    50  			WalletDir:      walletDir,
    51  			KeymanagerKind: keymanager.Imported,
    52  			WalletPassword: password,
    53  		},
    54  	})
    55  	require.NoError(t, err)
    56  
    57  	// We attempt to import accounts.
    58  	require.NoError(t, ImportAccountsCli(cliCtx))
    59  
    60  	// We attempt to delete the accounts specified.
    61  	require.NoError(t, DeleteAccountCli(cliCtx))
    62  
    63  	keymanager, err := imported.NewKeymanager(
    64  		cliCtx.Context,
    65  		&imported.SetupConfig{
    66  			Wallet:           w,
    67  			ListenForChanges: false,
    68  		},
    69  	)
    70  	require.NoError(t, err)
    71  	remainingAccounts, err := keymanager.FetchValidatingPublicKeys(cliCtx.Context)
    72  	require.NoError(t, err)
    73  	require.Equal(t, len(remainingAccounts), 1)
    74  	remainingPublicKey, err := hex.DecodeString(k3.Pubkey)
    75  	require.NoError(t, err)
    76  	assert.DeepEqual(t, remainingAccounts[0], bytesutil.ToBytes48(remainingPublicKey))
    77  }