[wallet] [tests] Add tests for accounts/labels APIs

pull/12953/head
John Newbery 7 years ago
parent 109e05dcd1
commit 72c9575f7b

@ -6,25 +6,38 @@
RPCs tested are: RPCs tested are:
- getlabeladdress - getlabeladdress
- getaddressesbyaccount - getaddressesbyaccount/getaddressesbylabel
- listaddressgroupings - listaddressgroupings
- setlabel - setlabel
- sendfrom (with account arguments) - sendfrom (with account arguments)
- move (with account arguments) - move (with account arguments)
Run the test twice - once using the accounts API and once using the labels API.
The accounts API test can be removed in V0.18.
""" """
from collections import defaultdict from collections import defaultdict
from test_framework.test_framework import BitcoinTestFramework from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import assert_equal from test_framework.util import assert_equal, assert_raises_rpc_error
class WalletLabelsTest(BitcoinTestFramework): class WalletLabelsTest(BitcoinTestFramework):
def set_test_params(self): def set_test_params(self):
self.setup_clean_chain = True self.setup_clean_chain = True
self.num_nodes = 1 self.num_nodes = 2
self.extra_args = [['-deprecatedrpc=accounts']] self.extra_args = [['-deprecatedrpc=accounts'], []]
def setup_network(self):
"""Don't connect nodes."""
self.setup_nodes()
def run_test(self): def run_test(self):
node = self.nodes[0] """Run the test twice - once using the accounts API and once using the labels API."""
self.log.info("Test accounts API")
self._run_subtest(True, self.nodes[0])
self.log.info("Test labels API")
self._run_subtest(False, self.nodes[1])
def _run_subtest(self, accounts_api, node):
# Check that there's no UTXO on any of the nodes # Check that there's no UTXO on any of the nodes
assert_equal(len(node.listunspent()), 0) assert_equal(len(node.listunspent()), 0)
@ -77,7 +90,7 @@ class WalletLabelsTest(BitcoinTestFramework):
# Create labels and make sure subsequent label API calls # Create labels and make sure subsequent label API calls
# recognize the label/address associations. # recognize the label/address associations.
labels = [Label(name) for name in ("a", "b", "c", "d", "e")] labels = [Label(name, accounts_api) for name in ("a", "b", "c", "d", "e")]
for label in labels: for label in labels:
label.add_receive_address(node.getlabeladdress(label=label.name, force=True)) label.add_receive_address(node.getlabeladdress(label=label.name, force=True))
label.verify(node) label.verify(node)
@ -108,12 +121,14 @@ class WalletLabelsTest(BitcoinTestFramework):
label.add_receive_address(node.getlabeladdress(label.name)) label.add_receive_address(node.getlabeladdress(label.name))
label.verify(node) label.verify(node)
assert_equal(node.getreceivedbylabel(label.name), 2) assert_equal(node.getreceivedbylabel(label.name), 2)
if accounts_api:
node.move(label.name, "", node.getbalance(label.name)) node.move(label.name, "", node.getbalance(label.name))
label.verify(node) label.verify(node)
node.generate(101) node.generate(101)
expected_account_balances = {"": 5200} expected_account_balances = {"": 5200}
for label in labels: for label in labels:
expected_account_balances[label.name] = 0 expected_account_balances[label.name] = 0
if accounts_api:
assert_equal(node.listaccounts(), expected_account_balances) assert_equal(node.listaccounts(), expected_account_balances)
assert_equal(node.getbalance(""), 5200) assert_equal(node.getbalance(""), 5200)
@ -123,7 +138,10 @@ class WalletLabelsTest(BitcoinTestFramework):
node.setlabel(address, label.name) node.setlabel(address, label.name)
label.add_address(address) label.add_address(address)
label.verify(node) label.verify(node)
if accounts_api:
assert(address not in node.getaddressesbyaccount("")) assert(address not in node.getaddressesbyaccount(""))
else:
assert_raises_rpc_error(-11, "No addresses with label", node.getaddressesbylabel, "")
# Check that addmultisigaddress can assign labels. # Check that addmultisigaddress can assign labels.
for label in labels: for label in labels:
@ -136,6 +154,7 @@ class WalletLabelsTest(BitcoinTestFramework):
label.verify(node) label.verify(node)
node.sendfrom("", multisig_address, 50) node.sendfrom("", multisig_address, 50)
node.generate(101) node.generate(101)
if accounts_api:
for label in labels: for label in labels:
assert_equal(node.getbalance(label.name), 50) assert_equal(node.getbalance(label.name), 50)
@ -156,9 +175,10 @@ class WalletLabelsTest(BitcoinTestFramework):
change_label(node, labels[2].receive_address, labels[2], labels[2]) change_label(node, labels[2].receive_address, labels[2], labels[2])
class Label: class Label:
def __init__(self, name): def __init__(self, name, accounts_api):
# Label name # Label name
self.name = name self.name = name
self.accounts_api = accounts_api
# Current receiving address associated with this label. # Current receiving address associated with this label.
self.receive_address = None self.receive_address = None
# List of all addresses assigned with this label # List of all addresses assigned with this label
@ -184,13 +204,16 @@ class Label:
node.getaddressinfo(address)['labels'][0], node.getaddressinfo(address)['labels'][0],
{"name": self.name, {"name": self.name,
"purpose": self.purpose[address]}) "purpose": self.purpose[address]})
if self.accounts_api:
assert_equal(node.getaccount(address), self.name) assert_equal(node.getaccount(address), self.name)
else:
assert_equal(node.getaddressinfo(address)['label'], self.name)
assert_equal( assert_equal(
node.getaddressesbylabel(self.name), node.getaddressesbylabel(self.name),
{address: {"purpose": self.purpose[address]} for address in self.addresses}) {address: {"purpose": self.purpose[address]} for address in self.addresses})
assert_equal( if self.accounts_api:
set(node.getaddressesbyaccount(self.name)), set(self.addresses)) assert_equal(set(node.getaddressesbyaccount(self.name)), set(self.addresses))
def change_label(node, address, old_label, new_label): def change_label(node, address, old_label, new_label):

Loading…
Cancel
Save