|
3 | 3 | # Distributed under the MIT software license, see the accompanying
|
4 | 4 | # file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
5 | 5 | """Test the listreceivedbyaddress RPC."""
|
| 6 | +from decimal import Decimal |
6 | 7 |
|
7 | 8 | from test_framework.test_framework import BitcoinTestFramework
|
8 |
| -from test_framework.util import * |
9 |
| - |
10 |
| -def get_sub_array_from_array(object_array, to_match): |
11 |
| - ''' |
12 |
| - Finds and returns a sub array from an array of arrays. |
13 |
| - to_match should be a unique idetifier of a sub array |
14 |
| - ''' |
15 |
| - for item in object_array: |
16 |
| - all_match = True |
17 |
| - for key,value in to_match.items(): |
18 |
| - if item[key] != value: |
19 |
| - all_match = False |
20 |
| - if not all_match: |
21 |
| - continue |
22 |
| - return item |
23 |
| - return [] |
| 9 | +from test_framework.util import (assert_array_result, |
| 10 | + assert_equal, |
| 11 | + assert_raises_rpc_error, |
| 12 | + ) |
24 | 13 |
|
25 | 14 | class ReceivedByTest(BitcoinTestFramework):
|
26 | 15 | def set_test_params(self):
|
27 | 16 | self.num_nodes = 2
|
28 |
| - self.enable_mocktime() |
29 | 17 |
|
30 | 18 | def run_test(self):
|
31 |
| - ''' |
32 |
| - listreceivedbyaddress Test |
33 |
| - ''' |
| 19 | + # Generate block to get out of IBD |
| 20 | + self.nodes[0].generate(1) |
| 21 | + |
| 22 | + self.log.info("listreceivedbyaddress Test") |
| 23 | + |
34 | 24 | # Send from node 0 to 1
|
35 | 25 | addr = self.nodes[1].getnewaddress()
|
36 | 26 | txid = self.nodes[0].sendtoaddress(addr, 0.1)
|
37 | 27 | self.sync_all()
|
38 | 28 |
|
39 |
| - #Check not listed in listreceivedbyaddress because has 0 confirmations |
| 29 | + # Check not listed in listreceivedbyaddress because has 0 confirmations |
40 | 30 | assert_array_result(self.nodes[1].listreceivedbyaddress(),
|
41 |
| - {"address":addr}, |
42 |
| - { }, |
43 |
| - True) |
44 |
| - #Bury Tx under 10 block so it will be returned by listreceivedbyaddress |
| 31 | + {"address": addr}, |
| 32 | + {}, |
| 33 | + True) |
| 34 | + # Bury Tx under 10 block so it will be returned by listreceivedbyaddress |
45 | 35 | self.nodes[1].generate(10)
|
46 | 36 | self.sync_all()
|
47 | 37 | assert_array_result(self.nodes[1].listreceivedbyaddress(),
|
48 |
| - {"address":addr}, |
49 |
| - {"address":addr, "account":"", "amount":Decimal("0.1"), "confirmations":10, "txids":[txid,]}) |
50 |
| - #With min confidence < 10 |
| 38 | + {"address": addr}, |
| 39 | + {"address": addr, "account": "", "amount": Decimal("0.1"), "confirmations": 10, "txids": [txid, ]}) |
| 40 | + # With min confidence < 10 |
51 | 41 | assert_array_result(self.nodes[1].listreceivedbyaddress(5),
|
52 |
| - {"address":addr}, |
53 |
| - {"address":addr, "account":"", "amount":Decimal("0.1"), "confirmations":10, "txids":[txid,]}) |
54 |
| - #With min confidence > 10, should not find Tx |
55 |
| - assert_array_result(self.nodes[1].listreceivedbyaddress(11),{"address":addr},{ },True) |
| 42 | + {"address": addr}, |
| 43 | + {"address": addr, "account": "", "amount": Decimal("0.1"), "confirmations": 10, "txids": [txid, ]}) |
| 44 | + # With min confidence > 10, should not find Tx |
| 45 | + assert_array_result(self.nodes[1].listreceivedbyaddress(11), {"address": addr}, {}, True) |
56 | 46 |
|
57 |
| - #Empty Tx |
| 47 | + # Empty Tx |
58 | 48 | addr = self.nodes[1].getnewaddress()
|
59 |
| - assert_array_result(self.nodes[1].listreceivedbyaddress(0,True), |
60 |
| - {"address":addr}, |
61 |
| - {"address":addr, "account":"", "amount":0, "confirmations":0, "txids":[]}) |
| 49 | + assert_array_result(self.nodes[1].listreceivedbyaddress(0, True), |
| 50 | + {"address": addr}, |
| 51 | + {"address": addr, "account": "", "amount": 0, "confirmations": 0, "txids": []}) |
| 52 | + |
| 53 | + self.log.info("getreceivedbyaddress Test") |
62 | 54 |
|
63 |
| - ''' |
64 |
| - getreceivedbyaddress Test |
65 |
| - ''' |
66 | 55 | # Send from node 0 to 1
|
67 | 56 | addr = self.nodes[1].getnewaddress()
|
68 | 57 | txid = self.nodes[0].sendtoaddress(addr, 0.1)
|
69 | 58 | self.sync_all()
|
70 | 59 |
|
71 |
| - #Check balance is 0 because of 0 confirmations |
| 60 | + # Check balance is 0 because of 0 confirmations |
72 | 61 | balance = self.nodes[1].getreceivedbyaddress(addr)
|
73 |
| - if balance != Decimal("0.0"): |
74 |
| - raise AssertionError("Wrong balance returned by getreceivedbyaddress, %0.2f"%(balance)) |
| 62 | + assert_equal(balance, Decimal("0.0")) |
75 | 63 |
|
76 |
| - #Check balance is 0.1 |
77 |
| - balance = self.nodes[1].getreceivedbyaddress(addr,0) |
78 |
| - if balance != Decimal("0.1"): |
79 |
| - raise AssertionError("Wrong balance returned by getreceivedbyaddress, %0.2f"%(balance)) |
| 64 | + # Check balance is 0.1 |
| 65 | + balance = self.nodes[1].getreceivedbyaddress(addr, 0) |
| 66 | + assert_equal(balance, Decimal("0.1")) |
80 | 67 |
|
81 |
| - #Bury Tx under 10 block so it will be returned by the default getreceivedbyaddress |
| 68 | + # Bury Tx under 10 block so it will be returned by the default getreceivedbyaddress |
82 | 69 | self.nodes[1].generate(10)
|
83 | 70 | self.sync_all()
|
84 | 71 | balance = self.nodes[1].getreceivedbyaddress(addr)
|
85 |
| - if balance != Decimal("0.1"): |
86 |
| - raise AssertionError("Wrong balance returned by getreceivedbyaddress, %0.2f"%(balance)) |
| 72 | + assert_equal(balance, Decimal("0.1")) |
| 73 | + |
| 74 | + # Trying to getreceivedby for an address the wallet doesn't own should return an error |
| 75 | + assert_raises_rpc_error(-4, "Address not found in wallet", self.nodes[0].getreceivedbyaddress, addr) |
| 76 | + |
| 77 | + self.log.info("listreceivedbyaccount + getreceivedbyaccount Test") |
87 | 78 |
|
88 |
| - ''' |
89 |
| - listreceivedbyaccount + getreceivedbyaccount Test |
90 |
| - ''' |
91 |
| - #set pre-state |
| 79 | + # set pre-state |
92 | 80 | addrArr = self.nodes[1].getnewaddress()
|
93 | 81 | account = self.nodes[1].getaccount(addrArr)
|
94 |
| - received_by_account_json = get_sub_array_from_array(self.nodes[1].listreceivedbyaccount(),{"account":account}) |
95 |
| - if len(received_by_account_json) == 0: |
96 |
| - raise AssertionError("No accounts found in node") |
| 82 | + received_by_account_json = [r for r in self.nodes[1].listreceivedbyaccount() if r["account"] == account][0] |
97 | 83 | balance_by_account = self.nodes[1].getreceivedbyaccount(account)
|
98 | 84 |
|
99 | 85 | txid = self.nodes[0].sendtoaddress(addr, 0.1)
|
100 | 86 | self.sync_all()
|
101 | 87 |
|
102 | 88 | # listreceivedbyaccount should return received_by_account_json because of 0 confirmations
|
103 | 89 | assert_array_result(self.nodes[1].listreceivedbyaccount(),
|
104 |
| - {"account":account}, |
105 |
| - received_by_account_json) |
| 90 | + {"account": account}, |
| 91 | + received_by_account_json) |
106 | 92 |
|
107 | 93 | # getreceivedbyaddress should return same balance because of 0 confirmations
|
108 | 94 | balance = self.nodes[1].getreceivedbyaccount(account)
|
109 |
| - if balance != balance_by_account: |
110 |
| - raise AssertionError("Wrong balance returned by getreceivedbyaccount, %0.2f"%(balance)) |
| 95 | + assert_equal(balance, balance_by_account) |
111 | 96 |
|
112 | 97 | self.nodes[1].generate(10)
|
113 | 98 | self.sync_all()
|
114 | 99 | # listreceivedbyaccount should return updated account balance
|
115 | 100 | assert_array_result(self.nodes[1].listreceivedbyaccount(),
|
116 |
| - {"account":account}, |
117 |
| - {"account":received_by_account_json["account"], "amount":(received_by_account_json["amount"] + Decimal("0.1"))}) |
| 101 | + {"account": account}, |
| 102 | + {"account": received_by_account_json["account"], "amount": (received_by_account_json["amount"] + Decimal("0.1"))}) |
118 | 103 |
|
119 | 104 | # getreceivedbyaddress should return updates balance
|
120 | 105 | balance = self.nodes[1].getreceivedbyaccount(account)
|
121 |
| - if balance != balance_by_account + Decimal("0.1"): |
122 |
| - raise AssertionError("Wrong balance returned by getreceivedbyaccount, %0.2f"%(balance)) |
| 106 | + assert_equal(balance, balance_by_account + Decimal("0.1")) |
123 | 107 |
|
124 |
| - #Create a new account named "mynewaccount" that has a 0 balance |
| 108 | + # Create a new account named "mynewaccount" that has a 0 balance |
125 | 109 | self.nodes[1].getaccountaddress("mynewaccount")
|
126 |
| - received_by_account_json = get_sub_array_from_array(self.nodes[1].listreceivedbyaccount(0,True),{"account":"mynewaccount"}) |
127 |
| - if len(received_by_account_json) == 0: |
128 |
| - raise AssertionError("No accounts found in node") |
| 110 | + received_by_account_json = [r for r in self.nodes[1].listreceivedbyaccount(0, True) if r["account"] == "mynewaccount"][0] |
129 | 111 |
|
130 | 112 | # Test includeempty of listreceivedbyaccount
|
131 |
| - if received_by_account_json["amount"] != Decimal("0.0"): |
132 |
| - raise AssertionError("Wrong balance returned by listreceivedbyaccount, %0.2f"%(received_by_account_json["amount"])) |
| 113 | + assert_equal(received_by_account_json["amount"], Decimal("0.0")) |
133 | 114 |
|
134 | 115 | # Test getreceivedbyaccount for 0 amount accounts
|
135 | 116 | balance = self.nodes[1].getreceivedbyaccount("mynewaccount")
|
136 |
| - if balance != Decimal("0.0"): |
137 |
| - raise AssertionError("Wrong balance returned by getreceivedbyaccount, %0.2f"%(balance)) |
| 117 | + assert_equal(balance, Decimal("0.0")) |
138 | 118 |
|
139 | 119 | if __name__ == '__main__':
|
140 | 120 | ReceivedByTest().main()
|
0 commit comments