github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/tm2/pkg/crypto/keys/client/add_ledger_test.go (about)

     1  //go:build ledger_suite
     2  // +build ledger_suite
     3  
     4  package client
     5  
     6  import (
     7  	"context"
     8  	"strings"
     9  	"testing"
    10  	"time"
    11  
    12  	"github.com/gnolang/gno/tm2/pkg/commands"
    13  	"github.com/gnolang/gno/tm2/pkg/crypto/keys"
    14  	"github.com/stretchr/testify/assert"
    15  	"github.com/stretchr/testify/require"
    16  )
    17  
    18  // Make sure to run these tests with the following tag enabled:
    19  // -tags='ledger_suite'
    20  func TestAdd_Ledger(t *testing.T) {
    21  	t.Parallel()
    22  
    23  	t.Run("valid ledger reference added", func(t *testing.T) {
    24  		t.Parallel()
    25  
    26  		var (
    27  			kbHome      = t.TempDir()
    28  			baseOptions = BaseOptions{
    29  				InsecurePasswordStdin: true,
    30  				Home:                  kbHome,
    31  			}
    32  
    33  			keyName = "key-name"
    34  		)
    35  
    36  		ctx, cancelFn := context.WithTimeout(context.Background(), 5*time.Second)
    37  		defer cancelFn()
    38  
    39  		io := commands.NewTestIO()
    40  		io.SetIn(strings.NewReader("test1234\ntest1234\n"))
    41  
    42  		// Create the command
    43  		cmd := NewRootCmdWithBaseConfig(io, baseOptions)
    44  
    45  		args := []string{
    46  			"add",
    47  			"ledger",
    48  			"--insecure-password-stdin",
    49  			"--home",
    50  			kbHome,
    51  			keyName,
    52  		}
    53  
    54  		require.NoError(t, cmd.ParseAndRun(ctx, args))
    55  
    56  		// Check the keybase
    57  		kb, err := keys.NewKeyBaseFromDir(kbHome)
    58  		require.NoError(t, err)
    59  
    60  		original, err := kb.GetByName(keyName)
    61  		require.NoError(t, err)
    62  		require.NotNil(t, original)
    63  	})
    64  
    65  	t.Run("valid ledger reference added, overwrite", func(t *testing.T) {
    66  		t.Parallel()
    67  
    68  		var (
    69  			kbHome      = t.TempDir()
    70  			baseOptions = BaseOptions{
    71  				InsecurePasswordStdin: true,
    72  				Home:                  kbHome,
    73  			}
    74  
    75  			keyName = "key-name"
    76  		)
    77  
    78  		ctx, cancelFn := context.WithTimeout(context.Background(), 5*time.Second)
    79  		defer cancelFn()
    80  
    81  		io := commands.NewTestIO()
    82  		io.SetIn(strings.NewReader("test1234\ntest1234\n"))
    83  
    84  		// Create the command
    85  		cmd := NewRootCmdWithBaseConfig(io, baseOptions)
    86  
    87  		args := []string{
    88  			"add",
    89  			"ledger",
    90  			"--insecure-password-stdin",
    91  			"--home",
    92  			kbHome,
    93  			keyName,
    94  		}
    95  
    96  		require.NoError(t, cmd.ParseAndRun(ctx, args))
    97  
    98  		// Check the keybase
    99  		kb, err := keys.NewKeyBaseFromDir(kbHome)
   100  		require.NoError(t, err)
   101  
   102  		original, err := kb.GetByName(keyName)
   103  		require.NoError(t, err)
   104  		require.NotNil(t, original)
   105  
   106  		io.SetIn(strings.NewReader("y\ntest1234\ntest1234\n"))
   107  
   108  		cmd = NewRootCmdWithBaseConfig(io, baseOptions)
   109  		require.NoError(t, cmd.ParseAndRun(ctx, args))
   110  
   111  		newKey, err := kb.GetByName(keyName)
   112  		require.NoError(t, err)
   113  
   114  		// Make sure the different key is generated and overwritten
   115  		assert.NotEqual(t, original.GetAddress(), newKey.GetAddress())
   116  	})
   117  
   118  	t.Run("valid ledger reference added, no overwrite permission", func(t *testing.T) {
   119  		t.Parallel()
   120  
   121  		var (
   122  			kbHome      = t.TempDir()
   123  			baseOptions = BaseOptions{
   124  				InsecurePasswordStdin: true,
   125  				Home:                  kbHome,
   126  			}
   127  
   128  			keyName = "key-name"
   129  		)
   130  
   131  		ctx, cancelFn := context.WithTimeout(context.Background(), 5*time.Second)
   132  		defer cancelFn()
   133  
   134  		io := commands.NewTestIO()
   135  		io.SetIn(strings.NewReader("test1234\ntest1234\n"))
   136  
   137  		// Create the command
   138  		cmd := NewRootCmdWithBaseConfig(io, baseOptions)
   139  
   140  		args := []string{
   141  			"add",
   142  			"ledger",
   143  			"--insecure-password-stdin",
   144  			"--home",
   145  			kbHome,
   146  			keyName,
   147  		}
   148  
   149  		require.NoError(t, cmd.ParseAndRun(ctx, args))
   150  
   151  		// Check the keybase
   152  		kb, err := keys.NewKeyBaseFromDir(kbHome)
   153  		require.NoError(t, err)
   154  
   155  		original, err := kb.GetByName(keyName)
   156  		require.NoError(t, err)
   157  		require.NotNil(t, original)
   158  
   159  		io.SetIn(strings.NewReader("n\ntest1234\ntest1234\n"))
   160  
   161  		cmd = NewRootCmdWithBaseConfig(io, baseOptions)
   162  		require.ErrorIs(t, cmd.ParseAndRun(ctx, args), errOverwriteAborted)
   163  
   164  		newKey, err := kb.GetByName(keyName)
   165  		require.NoError(t, err)
   166  
   167  		// Make sure the key is not overwritten
   168  		assert.Equal(t, original.GetAddress(), newKey.GetAddress())
   169  	})
   170  }