ce48290169
This commit renames the notifyallnewtxs RPC to notifynewtransactions to be more consistent with the standard RPC names and to more accurately reflect its intention which is to register for new transactions as they are accepted to the memory pool. In addition, the notifications produced have been renamed to txaccepted and txacceptedverbose depending on whether or not the verbose flag was set when the client registered to receive the notifications via notifynewtransactions. This closes conformal/btcd#98.
359 lines
7.6 KiB
Go
359 lines
7.6 KiB
Go
// Copyright (c) 2013 Conformal Systems LLC.
|
|
// Use of this source code is governed by an ISC
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// this has to be in the real package so we can mock up structs
|
|
package btcws
|
|
|
|
import (
|
|
"github.com/conformal/btcdb"
|
|
"github.com/conformal/btcjson"
|
|
"github.com/davecgh/go-spew/spew"
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
var cmdtests = []struct {
|
|
name string
|
|
f func() (btcjson.Cmd, error)
|
|
result btcjson.Cmd // after marshal and unmarshal
|
|
}{
|
|
{
|
|
name: "createencryptedwallet",
|
|
f: func() (btcjson.Cmd, error) {
|
|
return NewCreateEncryptedWalletCmd(
|
|
float64(1),
|
|
"banana"), nil
|
|
},
|
|
result: &CreateEncryptedWalletCmd{
|
|
id: float64(1),
|
|
Passphrase: "banana",
|
|
},
|
|
},
|
|
{
|
|
name: "getaddressbalance no optargs",
|
|
f: func() (btcjson.Cmd, error) {
|
|
return NewGetAddressBalanceCmd(
|
|
float64(1),
|
|
"17XhEvq9Nahdj7Xe1nv6oRe1tEmaHUuynH")
|
|
},
|
|
result: &GetAddressBalanceCmd{
|
|
id: float64(1),
|
|
Address: "17XhEvq9Nahdj7Xe1nv6oRe1tEmaHUuynH",
|
|
Minconf: 1,
|
|
},
|
|
},
|
|
{
|
|
name: "getaddressbalance one optarg",
|
|
f: func() (btcjson.Cmd, error) {
|
|
return NewGetAddressBalanceCmd(
|
|
float64(1),
|
|
"17XhEvq9Nahdj7Xe1nv6oRe1tEmaHUuynH",
|
|
0)
|
|
},
|
|
result: &GetAddressBalanceCmd{
|
|
id: float64(1),
|
|
Address: "17XhEvq9Nahdj7Xe1nv6oRe1tEmaHUuynH",
|
|
Minconf: 0,
|
|
},
|
|
},
|
|
{
|
|
name: "getbestblock",
|
|
f: func() (btcjson.Cmd, error) {
|
|
return NewGetBestBlockCmd(float64(1)), nil
|
|
},
|
|
result: &GetBestBlockCmd{
|
|
id: float64(1),
|
|
},
|
|
},
|
|
{
|
|
name: "getcurrentnet",
|
|
f: func() (btcjson.Cmd, error) {
|
|
return NewGetCurrentNetCmd(float64(1)), nil
|
|
},
|
|
result: &GetCurrentNetCmd{
|
|
id: float64(1),
|
|
},
|
|
},
|
|
{
|
|
name: "getunconfirmedbalance no optargs",
|
|
f: func() (btcjson.Cmd, error) {
|
|
return NewGetUnconfirmedBalanceCmd(float64(1))
|
|
},
|
|
result: &GetUnconfirmedBalanceCmd{
|
|
id: float64(1),
|
|
Account: "",
|
|
},
|
|
},
|
|
{
|
|
name: "getunconfirmedbalance one optarg",
|
|
f: func() (btcjson.Cmd, error) {
|
|
return NewGetUnconfirmedBalanceCmd(float64(1),
|
|
"abcde")
|
|
},
|
|
result: &GetUnconfirmedBalanceCmd{
|
|
id: float64(1),
|
|
Account: "abcde",
|
|
},
|
|
},
|
|
{
|
|
name: "listaddresstransactions no optargs",
|
|
f: func() (btcjson.Cmd, error) {
|
|
addrs := []string{
|
|
"17XhEvq9Nahdj7Xe1nv6oRe1tEmaHUuynH",
|
|
}
|
|
return NewListAddressTransactionsCmd(
|
|
float64(1),
|
|
addrs)
|
|
},
|
|
result: &ListAddressTransactionsCmd{
|
|
id: float64(1),
|
|
Account: "",
|
|
Addresses: []string{
|
|
"17XhEvq9Nahdj7Xe1nv6oRe1tEmaHUuynH",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "listaddresstransactions one optarg",
|
|
f: func() (btcjson.Cmd, error) {
|
|
addrs := []string{
|
|
"17XhEvq9Nahdj7Xe1nv6oRe1tEmaHUuynH",
|
|
}
|
|
return NewListAddressTransactionsCmd(
|
|
float64(1),
|
|
addrs,
|
|
"abcde")
|
|
},
|
|
result: &ListAddressTransactionsCmd{
|
|
id: float64(1),
|
|
Account: "abcde",
|
|
Addresses: []string{
|
|
"17XhEvq9Nahdj7Xe1nv6oRe1tEmaHUuynH",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "listalltransactions no optargs",
|
|
f: func() (btcjson.Cmd, error) {
|
|
return NewListAllTransactionsCmd(float64(1))
|
|
},
|
|
result: &ListAllTransactionsCmd{
|
|
id: float64(1),
|
|
Account: "",
|
|
},
|
|
},
|
|
{
|
|
name: "listalltransactions one optarg",
|
|
f: func() (btcjson.Cmd, error) {
|
|
return NewListAllTransactionsCmd(
|
|
float64(1),
|
|
"abcde")
|
|
},
|
|
result: &ListAllTransactionsCmd{
|
|
id: float64(1),
|
|
Account: "abcde",
|
|
},
|
|
},
|
|
{
|
|
name: "notifyreceived",
|
|
f: func() (btcjson.Cmd, error) {
|
|
addrs := []string{
|
|
"17XhEvq9Nahdj7Xe1nv6oRe1tEmaHUuynH",
|
|
}
|
|
return NewNotifyReceivedCmd(
|
|
float64(1),
|
|
addrs), nil
|
|
},
|
|
result: &NotifyReceivedCmd{
|
|
id: float64(1),
|
|
Addresses: []string{
|
|
"17XhEvq9Nahdj7Xe1nv6oRe1tEmaHUuynH",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "notifynewtransactions",
|
|
f: func() (btcjson.Cmd, error) {
|
|
return NewNotifyNewTransactionsCmd(
|
|
float64(1),
|
|
true)
|
|
},
|
|
result: &NotifyNewTransactionsCmd{
|
|
id: float64(1),
|
|
Verbose: true,
|
|
},
|
|
},
|
|
{
|
|
name: "notifyspent",
|
|
f: func() (btcjson.Cmd, error) {
|
|
op := &OutPoint{
|
|
Hash: "000102030405060708091011121314" +
|
|
"1516171819202122232425262728" +
|
|
"293031",
|
|
Index: 1,
|
|
}
|
|
return NewNotifySpentCmd(float64(1), op), nil
|
|
},
|
|
result: &NotifySpentCmd{
|
|
id: float64(1),
|
|
OutPoint: &OutPoint{
|
|
Hash: "000102030405060708091011121314" +
|
|
"1516171819202122232425262728" +
|
|
"293031",
|
|
Index: 1,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "rescan no optargs",
|
|
f: func() (btcjson.Cmd, error) {
|
|
addrs := []string{"17XhEvq9Nahdj7Xe1nv6oRe1tEmaHUuynH"}
|
|
ops := []OutPoint{
|
|
{
|
|
Hash: "000102030405060708091011121314" +
|
|
"1516171819202122232425262728" +
|
|
"293031",
|
|
Index: 1,
|
|
},
|
|
}
|
|
return NewRescanCmd(
|
|
float64(1),
|
|
270000,
|
|
addrs,
|
|
ops)
|
|
},
|
|
result: &RescanCmd{
|
|
id: float64(1),
|
|
BeginBlock: 270000,
|
|
Addresses: []string{"17XhEvq9Nahdj7Xe1nv6oRe1tEmaHUuynH"},
|
|
OutPoints: []OutPoint{
|
|
{
|
|
Hash: "000102030405060708091011121314" +
|
|
"1516171819202122232425262728" +
|
|
"293031",
|
|
Index: 1,
|
|
},
|
|
},
|
|
EndBlock: btcdb.AllShas,
|
|
},
|
|
},
|
|
{
|
|
name: "rescan one optarg",
|
|
f: func() (btcjson.Cmd, error) {
|
|
addrs := []string{"17XhEvq9Nahdj7Xe1nv6oRe1tEmaHUuynH"}
|
|
ops := []OutPoint{
|
|
{
|
|
Hash: "000102030405060708091011121314" +
|
|
"1516171819202122232425262728" +
|
|
"293031",
|
|
Index: 1,
|
|
},
|
|
}
|
|
return NewRescanCmd(
|
|
float64(1),
|
|
270000,
|
|
addrs,
|
|
ops,
|
|
280000)
|
|
},
|
|
result: &RescanCmd{
|
|
id: float64(1),
|
|
BeginBlock: 270000,
|
|
Addresses: []string{"17XhEvq9Nahdj7Xe1nv6oRe1tEmaHUuynH"},
|
|
OutPoints: []OutPoint{
|
|
{
|
|
Hash: "000102030405060708091011121314" +
|
|
"1516171819202122232425262728" +
|
|
"293031",
|
|
Index: 1,
|
|
},
|
|
},
|
|
EndBlock: 280000,
|
|
},
|
|
},
|
|
{
|
|
name: "walletislocked no optargs",
|
|
f: func() (btcjson.Cmd, error) {
|
|
return NewWalletIsLockedCmd(float64(1))
|
|
},
|
|
result: &WalletIsLockedCmd{
|
|
id: float64(1),
|
|
Account: "",
|
|
},
|
|
},
|
|
{
|
|
name: "walletislocked one optarg",
|
|
f: func() (btcjson.Cmd, error) {
|
|
return NewWalletIsLockedCmd(
|
|
float64(1),
|
|
"abcde")
|
|
},
|
|
result: &WalletIsLockedCmd{
|
|
id: float64(1),
|
|
Account: "abcde",
|
|
},
|
|
},
|
|
}
|
|
|
|
func TestCmds(t *testing.T) {
|
|
for _, test := range cmdtests {
|
|
c, err := test.f()
|
|
if err != nil {
|
|
t.Errorf("%s: failed to run func: %v",
|
|
test.name, err)
|
|
continue
|
|
}
|
|
|
|
mc, err := c.MarshalJSON()
|
|
if err != nil {
|
|
t.Errorf("%s: failed to marshal cmd: %v",
|
|
test.name, err)
|
|
continue
|
|
}
|
|
|
|
c2, err := btcjson.ParseMarshaledCmd(mc)
|
|
if err != nil {
|
|
t.Errorf("%s: failed to ummarshal cmd: %v",
|
|
test.name, err)
|
|
continue
|
|
}
|
|
|
|
if !reflect.DeepEqual(test.result, c2) {
|
|
t.Errorf("%s: unmarshal not as expected. "+
|
|
"got %v wanted %v", test.name, spew.Sdump(c2),
|
|
spew.Sdump(test.result))
|
|
}
|
|
if !reflect.DeepEqual(c, c2) {
|
|
t.Errorf("%s: unmarshal not as we started with. "+
|
|
"got %v wanted %v", test.name, spew.Sdump(c2),
|
|
spew.Sdump(c))
|
|
}
|
|
|
|
// id from Id func must match result.
|
|
if c.Id() != test.result.Id() {
|
|
t.Errorf("%s: Id returned incorrect id. "+
|
|
"got %v wanted %v", test.name, c.Id(),
|
|
test.result.Id())
|
|
}
|
|
|
|
// method from Method func must match result.
|
|
if c.Method() != test.result.Method() {
|
|
t.Errorf("%s: Method returned incorrect method. "+
|
|
"got %v wanted %v", test.name, c.Method(),
|
|
test.result.Method())
|
|
}
|
|
|
|
// Read marshaled command back into c. Should still
|
|
// match result.
|
|
if err := c.UnmarshalJSON(mc); err != nil {
|
|
t.Errorf("%s: error while unmarshalling: %v", test.name,
|
|
err)
|
|
}
|
|
if !reflect.DeepEqual(test.result, c) {
|
|
t.Errorf("%s: unmarshal not as expected. "+
|
|
"got %v wanted %v", test.name, spew.Sdump(c),
|
|
spew.Sdump(test.result))
|
|
}
|
|
}
|
|
}
|