8d33206bb8
Add PublicKey() API to the Account and use it as appropriate, avoid creating additional references to the private key.
76 lines
2.4 KiB
Go
76 lines
2.4 KiB
Go
package notary
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/nspcc-dev/neo-go/internal/fakechain"
|
|
"github.com/nspcc-dev/neo-go/pkg/config"
|
|
"github.com/nspcc-dev/neo-go/pkg/config/netmode"
|
|
"github.com/nspcc-dev/neo-go/pkg/core/mempool"
|
|
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
|
|
"github.com/nspcc-dev/neo-go/pkg/wallet"
|
|
"github.com/stretchr/testify/require"
|
|
"go.uber.org/zap/zaptest"
|
|
)
|
|
|
|
func getTestNotary(t *testing.T, bc Ledger, walletPath, pass string) (*wallet.Account, *Notary, *mempool.Pool) {
|
|
mainCfg := config.P2PNotary{
|
|
Enabled: true,
|
|
UnlockWallet: config.Wallet{
|
|
Path: walletPath,
|
|
Password: pass,
|
|
},
|
|
}
|
|
mp := mempool.New(10, 1, true)
|
|
cfg := Config{
|
|
MainCfg: mainCfg,
|
|
Chain: bc,
|
|
Log: zaptest.NewLogger(t),
|
|
}
|
|
ntr, err := NewNotary(cfg, netmode.UnitTestNet, mp, nil)
|
|
require.NoError(t, err)
|
|
|
|
w, err := wallet.NewWalletFromFile(walletPath)
|
|
require.NoError(t, err)
|
|
require.NoError(t, w.Accounts[0].Decrypt(pass, w.Scrypt))
|
|
return w.Accounts[0], ntr, mp
|
|
}
|
|
|
|
func TestUpdateNotaryNodes(t *testing.T) {
|
|
bc := fakechain.NewFakeChain()
|
|
acc, ntr, _ := getTestNotary(t, bc, "./testdata/notary1.json", "one")
|
|
randomKey, err := keys.NewPrivateKey()
|
|
require.NoError(t, err)
|
|
// currAcc is nil before UpdateNotaryNodes call
|
|
require.Nil(t, ntr.currAccount)
|
|
// set account for the first time
|
|
ntr.UpdateNotaryNodes(keys.PublicKeys{acc.PublicKey()})
|
|
require.Equal(t, acc, ntr.currAccount)
|
|
|
|
t.Run("account is already set", func(t *testing.T) {
|
|
ntr.UpdateNotaryNodes(keys.PublicKeys{acc.PublicKey(), randomKey.PublicKey()})
|
|
require.Equal(t, acc, ntr.currAccount)
|
|
})
|
|
|
|
t.Run("another account from the same wallet", func(t *testing.T) {
|
|
t.Run("good config password", func(t *testing.T) {
|
|
w, err := wallet.NewWalletFromFile("./testdata/notary1.json")
|
|
require.NoError(t, err)
|
|
require.NoError(t, w.Accounts[1].Decrypt("one", w.Scrypt))
|
|
ntr.UpdateNotaryNodes(keys.PublicKeys{w.Accounts[1].PublicKey()})
|
|
require.Equal(t, w.Accounts[1], ntr.currAccount)
|
|
})
|
|
t.Run("bad config password", func(t *testing.T) {
|
|
w, err := wallet.NewWalletFromFile("./testdata/notary1.json")
|
|
require.NoError(t, err)
|
|
require.NoError(t, w.Accounts[2].Decrypt("four", w.Scrypt))
|
|
ntr.UpdateNotaryNodes(keys.PublicKeys{w.Accounts[2].PublicKey()})
|
|
require.Nil(t, ntr.currAccount)
|
|
})
|
|
})
|
|
|
|
t.Run("unknown account", func(t *testing.T) {
|
|
ntr.UpdateNotaryNodes(keys.PublicKeys{randomKey.PublicKey()})
|
|
require.Nil(t, ntr.currAccount)
|
|
})
|
|
}
|