github.com/ava-labs/avalanchego@v1.11.11/vms/components/keystore/user_test.go (about) 1 // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package keystore 5 6 import ( 7 "testing" 8 9 "github.com/stretchr/testify/require" 10 11 "github.com/ava-labs/avalanchego/database" 12 "github.com/ava-labs/avalanchego/database/encdb" 13 "github.com/ava-labs/avalanchego/database/memdb" 14 "github.com/ava-labs/avalanchego/ids" 15 "github.com/ava-labs/avalanchego/utils/crypto/secp256k1" 16 ) 17 18 // Test user password, must meet minimum complexity/length requirements 19 const testPassword = "ShaggyPassword1Zoinks!" 20 21 func TestUserClosedDB(t *testing.T) { 22 require := require.New(t) 23 24 db, err := encdb.New([]byte(testPassword), memdb.New()) 25 require.NoError(err) 26 27 require.NoError(db.Close()) 28 29 u := NewUserFromDB(db) 30 31 _, err = u.GetAddresses() 32 require.ErrorIs(err, database.ErrClosed) 33 34 _, err = u.GetKey(ids.ShortEmpty) 35 require.ErrorIs(err, database.ErrClosed) 36 37 _, err = GetKeychain(u, nil) 38 require.ErrorIs(err, database.ErrClosed) 39 40 sk, err := secp256k1.NewPrivateKey() 41 require.NoError(err) 42 43 err = u.PutKeys(sk) 44 require.ErrorIs(err, database.ErrClosed) 45 } 46 47 func TestUser(t *testing.T) { 48 require := require.New(t) 49 50 db, err := encdb.New([]byte(testPassword), memdb.New()) 51 require.NoError(err) 52 53 u := NewUserFromDB(db) 54 55 addresses, err := u.GetAddresses() 56 require.NoError(err) 57 require.Empty(addresses, "new user shouldn't have address") 58 59 sk, err := secp256k1.NewPrivateKey() 60 require.NoError(err) 61 62 require.NoError(u.PutKeys(sk)) 63 64 // Putting the same key multiple times should be a noop 65 require.NoError(u.PutKeys(sk)) 66 67 addr := sk.PublicKey().Address() 68 69 savedSk, err := u.GetKey(addr) 70 require.NoError(err) 71 require.Equal(sk.Bytes(), savedSk.Bytes(), "wrong key returned") 72 73 addresses, err = u.GetAddresses() 74 require.NoError(err) 75 require.Len(addresses, 1, "address should have been added") 76 77 savedAddr := addresses[0] 78 require.Equal(addr, savedAddr, "saved address should match provided address") 79 80 savedKeychain, err := GetKeychain(u, nil) 81 require.NoError(err) 82 require.Len(savedKeychain.Keys, 1, "key should have been added") 83 require.Equal(sk.Bytes(), savedKeychain.Keys[0].Bytes(), "wrong key returned") 84 }