mirror of
https://github.com/LBRYFoundation/lbcd.git
synced 2025-09-30 07:10:41 +00:00
This commit contains the entire btcjson repository along with several changes needed to move all of the files into the btcjson directory in order to prepare it for merging. This does NOT update btcd or any of the other packages to use the new location as that will be done separately. - All import paths in the old btcjson test files have been changed to the new location - The coveralls badge has been removed since it unfortunately doesn't support coverage of sub-packages This is ongoing work toward #214.
208 lines
5.9 KiB
Go
208 lines
5.9 KiB
Go
// Copyright (c) 2014 Conformal Systems LLC.
|
|
// Use of this source code is governed by an ISC
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package btcjson_test
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"fmt"
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/btcsuite/btcd/btcjson/v2/btcjson"
|
|
)
|
|
|
|
// TestBtcWalletExtCmds tests all of the btcwallet extended commands marshal and
|
|
// unmarshal into valid results include handling of optional fields being
|
|
// omitted in the marshalled command, while optional fields with defaults have
|
|
// the default assigned on unmarshalled commands.
|
|
func TestBtcWalletExtCmds(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
testID := int(1)
|
|
tests := []struct {
|
|
name string
|
|
newCmd func() (interface{}, error)
|
|
staticCmd func() interface{}
|
|
marshalled string
|
|
unmarshalled interface{}
|
|
}{
|
|
{
|
|
name: "createnewaccount",
|
|
newCmd: func() (interface{}, error) {
|
|
return btcjson.NewCmd("createnewaccount", "acct")
|
|
},
|
|
staticCmd: func() interface{} {
|
|
return btcjson.NewCreateNewAccountCmd("acct")
|
|
},
|
|
marshalled: `{"jsonrpc":"1.0","method":"createnewaccount","params":["acct"],"id":1}`,
|
|
unmarshalled: &btcjson.CreateNewAccountCmd{
|
|
Account: "acct",
|
|
},
|
|
},
|
|
{
|
|
name: "dumpwallet",
|
|
newCmd: func() (interface{}, error) {
|
|
return btcjson.NewCmd("dumpwallet", "filename")
|
|
},
|
|
staticCmd: func() interface{} {
|
|
return btcjson.NewDumpWalletCmd("filename")
|
|
},
|
|
marshalled: `{"jsonrpc":"1.0","method":"dumpwallet","params":["filename"],"id":1}`,
|
|
unmarshalled: &btcjson.DumpWalletCmd{
|
|
Filename: "filename",
|
|
},
|
|
},
|
|
{
|
|
name: "importaddress",
|
|
newCmd: func() (interface{}, error) {
|
|
return btcjson.NewCmd("importaddress", "1Address")
|
|
},
|
|
staticCmd: func() interface{} {
|
|
return btcjson.NewImportAddressCmd("1Address", nil)
|
|
},
|
|
marshalled: `{"jsonrpc":"1.0","method":"importaddress","params":["1Address"],"id":1}`,
|
|
unmarshalled: &btcjson.ImportAddressCmd{
|
|
Address: "1Address",
|
|
Rescan: btcjson.Bool(true),
|
|
},
|
|
},
|
|
{
|
|
name: "importaddress optional",
|
|
newCmd: func() (interface{}, error) {
|
|
return btcjson.NewCmd("importaddress", "1Address", false)
|
|
},
|
|
staticCmd: func() interface{} {
|
|
return btcjson.NewImportAddressCmd("1Address", btcjson.Bool(false))
|
|
},
|
|
marshalled: `{"jsonrpc":"1.0","method":"importaddress","params":["1Address",false],"id":1}`,
|
|
unmarshalled: &btcjson.ImportAddressCmd{
|
|
Address: "1Address",
|
|
Rescan: btcjson.Bool(false),
|
|
},
|
|
},
|
|
{
|
|
name: "importpubkey",
|
|
newCmd: func() (interface{}, error) {
|
|
return btcjson.NewCmd("importpubkey", "031234")
|
|
},
|
|
staticCmd: func() interface{} {
|
|
return btcjson.NewImportPubKeyCmd("031234", nil)
|
|
},
|
|
marshalled: `{"jsonrpc":"1.0","method":"importpubkey","params":["031234"],"id":1}`,
|
|
unmarshalled: &btcjson.ImportPubKeyCmd{
|
|
PubKey: "031234",
|
|
Rescan: btcjson.Bool(true),
|
|
},
|
|
},
|
|
{
|
|
name: "importpubkey optional",
|
|
newCmd: func() (interface{}, error) {
|
|
return btcjson.NewCmd("importpubkey", "031234", false)
|
|
},
|
|
staticCmd: func() interface{} {
|
|
return btcjson.NewImportPubKeyCmd("031234", btcjson.Bool(false))
|
|
},
|
|
marshalled: `{"jsonrpc":"1.0","method":"importpubkey","params":["031234",false],"id":1}`,
|
|
unmarshalled: &btcjson.ImportPubKeyCmd{
|
|
PubKey: "031234",
|
|
Rescan: btcjson.Bool(false),
|
|
},
|
|
},
|
|
{
|
|
name: "importwallet",
|
|
newCmd: func() (interface{}, error) {
|
|
return btcjson.NewCmd("importwallet", "filename")
|
|
},
|
|
staticCmd: func() interface{} {
|
|
return btcjson.NewImportWalletCmd("filename")
|
|
},
|
|
marshalled: `{"jsonrpc":"1.0","method":"importwallet","params":["filename"],"id":1}`,
|
|
unmarshalled: &btcjson.ImportWalletCmd{
|
|
Filename: "filename",
|
|
},
|
|
},
|
|
{
|
|
name: "renameaccount",
|
|
newCmd: func() (interface{}, error) {
|
|
return btcjson.NewCmd("renameaccount", "oldacct", "newacct")
|
|
},
|
|
staticCmd: func() interface{} {
|
|
return btcjson.NewRenameAccountCmd("oldacct", "newacct")
|
|
},
|
|
marshalled: `{"jsonrpc":"1.0","method":"renameaccount","params":["oldacct","newacct"],"id":1}`,
|
|
unmarshalled: &btcjson.RenameAccountCmd{
|
|
OldAccount: "oldacct",
|
|
NewAccount: "newacct",
|
|
},
|
|
},
|
|
}
|
|
|
|
t.Logf("Running %d tests", len(tests))
|
|
for i, test := range tests {
|
|
// Marshal the command as created by the new static command
|
|
// creation function.
|
|
marshalled, err := btcjson.MarshalCmd(testID, test.staticCmd())
|
|
if err != nil {
|
|
t.Errorf("MarshalCmd #%d (%s) unexpected error: %v", i,
|
|
test.name, err)
|
|
continue
|
|
}
|
|
|
|
if !bytes.Equal(marshalled, []byte(test.marshalled)) {
|
|
t.Errorf("Test #%d (%s) unexpected marshalled data - "+
|
|
"got %s, want %s", i, test.name, marshalled,
|
|
test.marshalled)
|
|
continue
|
|
}
|
|
|
|
// Ensure the command is created without error via the generic
|
|
// new command creation function.
|
|
cmd, err := test.newCmd()
|
|
if err != nil {
|
|
t.Errorf("Test #%d (%s) unexpected NewCmd error: %v ",
|
|
i, test.name, err)
|
|
}
|
|
|
|
// Marshal the command as created by the generic new command
|
|
// creation function.
|
|
marshalled, err = btcjson.MarshalCmd(testID, cmd)
|
|
if err != nil {
|
|
t.Errorf("MarshalCmd #%d (%s) unexpected error: %v", i,
|
|
test.name, err)
|
|
continue
|
|
}
|
|
|
|
if !bytes.Equal(marshalled, []byte(test.marshalled)) {
|
|
t.Errorf("Test #%d (%s) unexpected marshalled data - "+
|
|
"got %s, want %s", i, test.name, marshalled,
|
|
test.marshalled)
|
|
continue
|
|
}
|
|
|
|
var request btcjson.Request
|
|
if err := json.Unmarshal(marshalled, &request); err != nil {
|
|
t.Errorf("Test #%d (%s) unexpected error while "+
|
|
"unmarshalling JSON-RPC request: %v", i,
|
|
test.name, err)
|
|
continue
|
|
}
|
|
|
|
cmd, err = btcjson.UnmarshalCmd(&request)
|
|
if err != nil {
|
|
t.Errorf("UnmarshalCmd #%d (%s) unexpected error: %v", i,
|
|
test.name, err)
|
|
continue
|
|
}
|
|
|
|
if !reflect.DeepEqual(cmd, test.unmarshalled) {
|
|
t.Errorf("Test #%d (%s) unexpected unmarshalled command "+
|
|
"- got %s, want %s", i, test.name,
|
|
fmt.Sprintf("(%T) %+[1]v", cmd),
|
|
fmt.Sprintf("(%T) %+[1]v\n", test.unmarshalled))
|
|
continue
|
|
}
|
|
}
|
|
}
|