wallet_import_rescan
test, among other cleanups.
test: Test p2sh-witness and bech32 in wallet_import_rescan #16465
pull MarcoFalke wants to merge 4 commits into bitcoin:master from MarcoFalke:1907-testAllAddressTypesImport changing 5 files +113 −28-
MarcoFalke commented at 9:05 pm on July 25, 2019: memberThis adds test coverage for segwit in the
-
MarcoFalke force-pushed on Jul 25, 2019
-
MarcoFalke force-pushed on Jul 25, 2019
-
MarcoFalke force-pushed on Jul 25, 2019
-
MarcoFalke force-pushed on Jul 25, 2019
-
MarcoFalke force-pushed on Jul 25, 2019
-
MarcoFalke commented at 9:46 pm on July 25, 2019: memberFixed linter by adding the false-positive to a whitelist 😬
-
DrahtBot added the label Tests on Jul 25, 2019
-
MarcoFalke force-pushed on Jul 25, 2019
-
DrahtBot commented at 0:13 am on July 26, 2019: member
The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.
Conflicts
Reviewers, this pull request conflicts with the following ones:
- #16597 ([WIP] Travis: run full test suite on native macOS by Sjors)
- #15845 (wallet: Fast rescan with BIP157 block filters by MarcoFalke)
- #15257 (Scripts and tools: Bump flake8 to 3.7.8 by Empact)
- #13728 (lint: Run the CI lint stage on mac by Empact)
If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first.
Coverage
Coverage Change (pull 16465, ba118a39c84bb79e5ed12db0050ff18d1595544c) Reference (master, e5fdda68c6d2313edb74443f0d1e6d2ce2d97f5e) Lines +0.0337 % 89.2260 % Functions -0.0157 % 82.1944 % Branches +0.0175 % 46.6152 % Updated at: 2019-08-07T11:47:01.569823.
-
Sjors commented at 6:20 pm on July 26, 2019: member
More dead code hits? https://gist.github.com/Sjors/e2704ff54fdc85b2b5833242a1d1e3e3
Tests pass on top of #16301.
-
MarcoFalke commented at 7:17 pm on July 26, 2019: member
Tests pass on top of #16301
Thanks, was about to test this.
-
Sjors commented at 7:09 pm on August 6, 2019: memberACK fa2a2bab0ffef281940c5383f2f4528145707ee6
-
MarcoFalke closed this on Aug 7, 2019
-
MarcoFalke reopened this on Aug 7, 2019
-
practicalswift commented at 12:16 pm on August 7, 2019: contributor@Sjors Regarding your posted gist: according to
lint-python-dead-code.sh
vulture
should only look at files returned bygit ls-files
. Really weird that it checks.git/logs/
anddepends/
. Files under these directories should never be returned bygit ls-files
, right? -
in test/functional/wallet_import_rescan.py:180 in fa2a2bab0f outdated
180+ variant.timestamp = self.nodes[0].getblockheader(self.nodes[0].getbestblockhash())["time"] 181 182- # Generate a block containing the initial transactions, then another 183- # block further in the future (past the rescan window). 184- self.nodes[0].generate(1) 185+ # Genrate a block further in the future (past the rescan window).
jnewbery commented at 4:07 pm on August 14, 2019:Typo introduced: ‘Genrate’ -> ‘Generate’
MarcoFalke commented at 8:27 pm on August 14, 2019:fixed typoin test/functional/wallet_import_rescan.py:164 in fa2a2bab0f outdated
160@@ -143,21 +161,28 @@ def setup_network(self): 161 connect_nodes(self.nodes[i], 0) 162 163 def run_test(self): 164+ self.random_gen = random.Random(123456)
jnewbery commented at 6:36 pm on August 14, 2019:No need to reset the seed here. It should be left as set by the test_framework (where it can be set deterministically).
MarcoFalke commented at 8:27 pm on August 14, 2019:Good point. I didn’t recall this.in test/functional/wallet_import_rescan.py:174 in fa2a2bab0f outdated
171+ label=variant.label, 172+ address_type=variant.address_type.value, 173+ )) 174 variant.key = self.nodes[1].dumpprivkey(variant.address["address"]) 175- variant.initial_amount = 1 - (i + 1) / 64 176+ variant.initial_amount = Decimal(str(self.random_gen.random())[:10]) # random amount with 8 decimal places
jnewbery commented at 6:38 pm on August 14, 2019:nit: preferround(random.random(), 8)
over string slicing.
MarcoFalke commented at 7:55 pm on August 14, 2019:Can you explain how this is supposed to work? Be reminded that floating point has no fixed number of decimal places.
0Decimal(round(random.random(), 8)) 1Decimal('0.5843940499999999982350118443719111382961273193359375')
jnewbery commented at 7:57 pm on August 14, 2019:sorry,Decimal(str(round(random.random(), 8)))
MarcoFalke commented at 8:26 pm on August 14, 2019:Changedin test/functional/wallet_import_rescan.py:146 in fa2a2bab0f outdated
142@@ -125,12 +143,12 @@ def skip_test_if_missing_module(self): 143 self.skip_if_no_wallet() 144 145 def setup_network(self): 146- extra_args = [["-addresstype=legacy"] for _ in range(self.num_nodes)] 147+ self.extra_args = [[] for _ in range(self.num_nodes)]
jnewbery commented at 6:46 pm on August 14, 2019:nit: I think[[]] * self.num_nodes
is slightly clearer (and also matches L154 below)
MarcoFalke commented at 8:26 pm on August 14, 2019:Done
ryanofsky commented at 5:55 pm on August 15, 2019:No big deal, but reason it was written the other way is so you could say args[1].append(“something”) without unintentionally adding “something” to args[0], [2], [3], and so on. Weirdness of list expressions in python.in test/functional/wallet_import_rescan.py:181 in fa2a2bab0f outdated
172+ address_type=variant.address_type.value, 173+ )) 174 variant.key = self.nodes[1].dumpprivkey(variant.address["address"]) 175- variant.initial_amount = 1 - (i + 1) / 64 176+ variant.initial_amount = Decimal(str(self.random_gen.random())[:10]) # random amount with 8 decimal places 177 variant.initial_txid = self.nodes[0].sendtoaddress(variant.address["address"], variant.initial_amount)
jnewbery commented at 6:52 pm on August 14, 2019:This will fail if the value to send is too low. Because you set the seed, the ‘randomly’ picked number will not actually fail here, but if this test is changed (eg to support more address types) it could start failing here. I suggest you but a lower bound on the random amount.
MarcoFalke commented at 8:26 pm on August 14, 2019:With “too low” you mean “dust”? Good catch! Fixed.in test/functional/test_framework/address.py:20 in fa2a2bab0f outdated
15 16+ 17+class AddressType(enum.Enum): 18+ bech32 = 'bech32' 19+ p2sh_segwit = 'p2sh-segwit' 20+ legacy = 'legacy'
jnewbery commented at 6:54 pm on August 14, 2019:nit: add a comment here that this refers to P2PKH (P2SH is also a legacy address type)
MarcoFalke commented at 8:26 pm on August 14, 2019:Added a commentin test/lint/lint-python-dead-code-whitelist:1 in fa2a2bab0f outdated
0@@ -0,0 +1,93 @@ 1+_.posix_path # unused attribute (contrib/macdeploy/custom_dsstore.py:45)
jnewbery commented at 7:04 pm on August 14, 2019:Please remove comments with line numbers (which are not stable and will not be updated when those files are changed), and deduplicate this list.
jnewbery commented at 7:21 pm on August 14, 2019::+1: for moving these to one per line. I think you can keep the original
vulture
invocation by making this a list and then running:vulture --ignore-names=$(cat lint-python-dead-code-whitelist | tr '\n' ',')
or similar.
MarcoFalke commented at 8:25 pm on August 14, 2019:I think it wastes less time if we just keep the autogenerated file as is
MarcoFalke commented at 8:25 pm on August 14, 2019:I think it wastes less time if we just keep the autogenerated file as is
jnewbery commented at 8:59 pm on August 14, 2019:I don’t understand. Why add comments here that will be wrong almost instantly?
MarcoFalke commented at 9:25 pm on August 14, 2019:Only the line number will be wrong. The rest should still be valid and might even be useful. I don’t see a reason to manually fix the line number every time this file is autogenerated.
Edit: To obtain such a whitelist automatically, pass –make-whitelist to Vulture.
jnewbery commented at 10:25 pm on August 14, 2019:I don’t get it. Every time a new function that triggers a false positive in vulture is added, this should be regenerated? That’ll create a huge diff. How is that supposed to be reviewed?
In general, I don’t think it’s good practice to use the output of a tool to generate its own whitelist. The whitelist should be generated (and reviewed) by someone outside the tool declaring that these functions should be ignored.
MarcoFalke commented at 12:08 pm on August 15, 2019:Ok, reviewed and manually fixed up the output of the tooljnewbery commented at 7:22 pm on August 14, 2019: memberA few nits inline. Also, in commit test: Generate one block for each send in wallet_import_rescan, can you add a motivation to the commit log. I can see what it’s doing, but I don’t understand why.test: Generate one block for each send in wallet_import_rescan
This ... * ensures that enough coins are available/spendable, even when more variants are added * ensures that all mempool txs are mined, even when more variants are added * makes the test more specific to test that the confirmation height is properly reported and timestamps are correctly handled in the test logic * prepares the test for a future, where blocks are skipped for rescan if they are deemed irrelevant by a filter (c.f. BIP157)
in test/functional/wallet_import_rescan.py:31 in fa2a2bab0f outdated
26 assert_equal, 27 set_node_times, 28 ) 29 30 import collections 31+from decimal import Decimal
jnewbery commented at 7:58 pm on August 14, 2019:this import is added in the wrong commit. It needs to be added in test: Replace fragile “rng” with call to random()
MarcoFalke commented at 8:25 pm on August 14, 2019:FixedMarcoFalke force-pushed on Aug 14, 2019MarcoFalke commented at 8:24 pm on August 14, 2019: memberA few nits inline. Also, in commit test: Generate one block for each send in wallet_import_rescan, can you add a motivation to the commit log. I can see what it’s doing, but I don’t understand why.
Added a few bullet points why generating a block each makes sense.
Thanks for the review @jnewbery. I think I addressed all feedback
MarcoFalke force-pushed on Aug 14, 2019in test/functional/wallet_import_rescan.py:140 in fa2db1044a outdated
133@@ -116,6 +134,14 @@ def check(self, txid=None, amount=None, confirmations=None): 134 # Rescans start at the earliest block up to 2 hours before the key timestamp. 135 TIMESTAMP_WINDOW = 2 * 60 * 60 136 137+AMOUNT_DUST = Decimal('0.00000546') 138+ 139+ 140+def get_rand_amount():
jnewbery commented at 9:08 pm on August 14, 2019:This returns
None
if the random value returned is less thanAMOUNT_DUST
.Why not use
random.uniform(AMOUNT_DUST,1)
rather than define this function?
MarcoFalke commented at 9:23 pm on August 14, 2019:Switched to uniformin test/functional/wallet_import_rescan.py:153 in fa2db1044a outdated
150@@ -125,12 +151,12 @@ def skip_test_if_missing_module(self): 151 self.skip_if_no_wallet() 152 153 def setup_network(self): 154- extra_args = [["-addresstype=legacy"] for _ in range(self.num_nodes)] 155+ self.extra_args = [[]] * self.num_nodes
jnewbery commented at 9:09 pm on August 14, 2019:is changing this toself.extra_args
necessary? Does that member get used again? (I think not, since the nodes are not restarted)
MarcoFalke commented at 9:13 pm on August 14, 2019:No, not necessary, but will make the code robust in case a restart is necessary.jnewbery commented at 9:11 pm on August 14, 2019: memberLooks good. Couple more comments inline.test: Replace fragile "rng" with call to random() fa79af2989test: Test p2sh-witness and bech32 in wallet_import_rescan fa25668e1cMarcoFalke force-pushed on Aug 14, 2019in test/lint/lint-python-dead-code.sh:19 in faea9125ea outdated
14@@ -15,5 +15,5 @@ fi 15 16 vulture \ 17 --min-confidence 60 \ 18- --ignore-names "argtypes,connection_lost,connection_made,converter,data_received,daemon,errcheck,is_compressed,is_valid,verify_ecdsa,msg_generic,on_*,optionxform,restype,profile_with_perf" \ 19- $(git ls-files -- "*.py" ":(exclude)contrib/" ":(exclude)test/functional/data/invalid_txs.py") 20+ $(git rev-parse --show-toplevel) \ 21+ $(dirname "${BASH_SOURCE[0]}")/lint-python-dead-code-whitelist
practicalswift commented at 7:36 am on August 15, 2019:Won’t this runvulture
on thelint-python-dead-code-whitelist
file? The intention was to uselint-python-dead-code-whitelist
to build--exclude
? :-)
MarcoFalke commented at 12:09 pm on August 15, 2019:according to the vulture documentation this is the correct invocation
practicalswift commented at 12:30 pm on August 15, 2019:TIL! Thanks!MarcoFalke force-pushed on Aug 15, 2019MarcoFalke force-pushed on Aug 15, 2019MarcoFalke force-pushed on Aug 15, 2019lint: Add false positive to python dead code linter fa3c6575caMarcoFalke force-pushed on Aug 15, 2019MarcoFalke commented at 12:08 pm on August 15, 2019: memberReworked the whitelist, as requested by @jnewberyin test/lint/lint-python-dead-code-whitelist:1 in fa3c6575ca
0@@ -0,0 +1,45 @@ 1+BadInputOutpointIndex # unused class (test/functional/data/invalid_txs.py)
jnewbery commented at 2:21 pm on August 15, 2019:nit: sort
MarcoFalke commented at 2:28 pm on August 15, 2019:It is sorted, according tocat ./*whitelist|sort
on my system
jnewbery commented at 2:43 pm on August 15, 2019:Fascinating:
0→ cat test/lint/lint-python-dead-code-whitelist | LC_ALL=en_US.UTF-8 sort 1BadInputOutpointIndex # unused class (test/functional/data/invalid_txs.py) 2_.carbon_path # unused attribute (contrib/macdeploy/custom_dsstore.py) 3connection_lost # unused function (test/functional/test_framework/mininode.py) 4connection_made # unused function (test/functional/test_framework/mininode.py) 5[...] 6→ cat test/lint/lint-python-dead-code-whitelist | LC_ALL=C sort 7BadInputOutpointIndex # unused class (test/functional/data/invalid_txs.py) 8DuplicateInput # unused class (test/functional/data/invalid_txs.py) 9InvalidOPIFConstruction # unused class (test/functional/data/invalid_txs.py) 10NonexistentInput # unused class (test/functional/data/invalid_txs.py) 11OutputMissing # unused class (test/functional/data/invalid_txs.py) 12SizeTooSmall # unused class (test/functional/data/invalid_txs.py) 13SpendNegative # unused class (test/functional/data/invalid_txs.py) 14SpendTooMuch # unused class (test/functional/data/invalid_txs.py) 15TooManySigops # unused class (test/functional/data/invalid_txs.py) 16_.carbon_path # unused attribute (contrib/macdeploy/custom_dsstore.py) 17_.converter # unused attribute (test/functional/test_framework/test_framework.py) 18[...]
jnewbery commented at 2:21 pm on August 15, 2019: memberACK fa3c6575cac5e3841797980fe60b8368ae579dbaMarcoFalke merged this on Aug 15, 2019MarcoFalke closed this on Aug 15, 2019
MarcoFalke referenced this in commit 8bd5e0af99 on Aug 15, 2019MarcoFalke deleted the branch on Aug 15, 2019ryanofsky commented at 5:57 pm on August 15, 2019: memberpost-merge utACK fa3c6575cac5e3841797980fe60b8368ae579dba. Sorry for not getting to this. I looked a while ago but was thrown off by the first commit, because it seemed to be making the test slower and more complicated for no reason, but it’s very well explained now, and in general all the new improvements and suggestions are really nice.sidhujag referenced this in commit fc7329cb00 on Aug 17, 2019jasonbcox referenced this in commit f5766026ab on Oct 22, 2020jasonbcox referenced this in commit 08d16701b5 on Oct 22, 2020jasonbcox referenced this in commit 881ae3dd22 on Oct 22, 2020UdjinM6 referenced this in commit 8e5db79c32 on Sep 10, 2021UdjinM6 referenced this in commit 8c15e14def on Sep 24, 2021UdjinM6 referenced this in commit da7979ef0c on Oct 4, 2021UdjinM6 referenced this in commit 7aefec8de0 on Oct 5, 2021kittywhiskers referenced this in commit 9d9fc51623 on Oct 12, 2021pravblockc referenced this in commit ea25e79ee9 on Nov 18, 2021DrahtBot locked this on Dec 16, 2021
github-metadata-mirror
This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2024-12-04 06:12 UTC
This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me