Commit graph

15848 commits

Author SHA1 Message Date
sean
3e1ee31043 [Tests] Adding unit tests for GetDifficulty in blockchain.cpp.
blockchain.cpp has low unit test coverage. This commit is intended
to start improving its code coverage to reasonable levels. One or more
follow up commits will complete the task that this commit is starting
(though the usefulness of this commit is not dependent upon later
commits).

Note that these tests were not written based upon a specification of how
GetDifficulty *should* work, but rather how it actually *does* work. As
a result, if there are any bugs in the current GetDifficulty
implementation, these unit tests serve to lock them in rather than
expose them.

-- Why has blockchain.cpp been modified if this is a unit testing change?

Since the existing GetDifficulty function relies on a global variable,
chainActive, it was not suitable for unit testing purposes. Both the
existing GetDifficulty function and the unit tests now call through to
a new, more modular version of GetDifficulty that can work on any chain,
not just chainActive.

-- Why does blockchain_tests.cpp directly include blockchain.cpp instead
of blockchain.h?

While the new GetDifficulty function's signature is arguably better than
the old one's, it still isn't great, and doesn't seem to warrant inclusion
as part of the blockchain.h API, especially since only test code is
directly using it. If a better way of exposing the new GetDifficulty
function to unit tests exists, please mention it and the commit will be
updated accordingly.

-- Why is the test fixture named blockchain_difficulty_tests rather than
blockchain_tests?

The Bitcoin Core policy for naming unit test files is to match the the
file under test ("blockchain" becomes "blockchain_tests"). While this
commit complies with that, blockchain.cpp is a massive file, such that
having all of the unit tests in one file will tend towards disorder.
Since there will be a lot more tests added to this file, the intention
is to divide up different types of tests into different test fixtures
within the same file.
2017-11-22 15:48:14 -08:00
John Newbery
ec59523c59 [tests] Remove rpc property from TestNode in p2p-segwit.py.
Change the helper methods to functions which take a node and a p2p
connection as arguments.
2017-11-22 18:08:37 -05:00
Gregory Sanders
8b2c7330d0 clarify abortrescan rpc use 2017-11-22 14:06:53 -05:00
MarcoFalke
3d6ad40777
Merge #11743: qa: Add multiwallet prefix test
fa61c6f6a qa: Add multiwallet prefix test (MarcoFalke)

Pull request description:

  Fixes https://github.com/bitcoin/bitcoin/pull/10849#discussion_r127847938

Tree-SHA512: 7967be04e76d935398b3bea60c864ffc9e38dbb4cfb55890bb146a6f16c28d81ca5d89736275e2d0b03642806f6f7093beeea979f5257c464f437c4e5a9684f1
2017-11-22 11:31:35 -05:00
Pieter Wuille
5ea932a510
Merge #11746: trivial: Fix unsuccessful typo
d2ea2bcb5 trivial: Fix unsuccessful typo (practicalswift)

Pull request description:

  Fix unsuccessful typo.

Tree-SHA512: 48dde6764603b91cdd698fd9b5ea200961009df07f5a024430aaf81c50d889ed72681d76ac0832cdafaa2fd2be32ef3637ba641308de5eea6146f3b1074e9b19
2017-11-21 18:05:30 -08:00
Andras Elso
e1a8ec56c5 Fix: Open files read only if requested 2017-11-21 20:35:06 +01:00
practicalswift
d2ea2bcb5c trivial: Fix unsuccessful typo 2017-11-21 19:14:35 +01:00
practicalswift
63f21d27ee net: Add missing locks in net.{cpp,h}
* writing variable 'nTotalBytesRecv' requires holding mutex 'cs_totalBytesRecv' exclusively
* writing variables 'nTotalBytesSent'/'nMaxOutboundTotalBytesSentInCycle'/'nMaxOutboundCycleStartTime' require holding mutex 'cs_totalBytesSent' exclusively
* writing variable 'nMaxOutboundTimeframe'/'nMaxOutboundLimit' require holding mutex 'cs_totalBytesSent' exclusively
* writing variable 'vAddedNodes' requires holding mutex 'cs_vAddedNodes' exclusively
2017-11-21 18:02:57 +01:00
Wladimir J. van der Laan
d4267a3ab2
Merge #11738: Fix sendrawtransaction hang when sending a tx already in mempool
d9340ce Fix sendrawtransaction hang when sending a tx already in mempool (Matt Corallo)

Pull request description:

  I assume this is what #11721 actually hit.

Tree-SHA512: 1da4088bbda64c5527233de9ec4d03f9e0c1eacddb2ed3deab3cb99eac0293ee6fb846830f97b5e10e230307b6d7fd18013043173aa4f27ef171d9da626e2c88
2017-11-21 08:51:19 +01:00
MarcoFalke
901ba3e381
Merge #11714: [tests] Test that mempool rejects coinbase transactions
65e91f5ed [tests] Test that mempool rejects coinbase transactions (James O'Beirne)

Pull request description:

  ![selection_063](https://user-images.githubusercontent.com/73197/32978622-b0fa9d70-cbfa-11e7-9a72-1997409e5ba8.png)

  Neither the unit nor functional tests appear to cover rejecting a transaction from acceptance to the mempool on the basis of it being a coinbase. Seems like a decent thing to have a test for.

Tree-SHA512: 53af53c975cad5d7a21c443d71a1c0ced5c70a7799b75bb44d9b7dd6ab2afbcdcaab14571540efeb848f3a1daee5e1dd856530d8f2b50582595219a1c17555ff
2017-11-20 15:19:24 -05:00
Matt Corallo
d9340ce912 Fix sendrawtransaction hang when sending a tx already in mempool 2017-11-20 12:18:52 -08:00
MarcoFalke
7a43fbb959
Merge #11729: [docs] links to code style guides
fe27a7236 [docs] links to code style guides (Sjors Provoost)

Pull request description:

  I always have difficulty finding these, probably because they're not actually called "code style guideline".

Tree-SHA512: a2716c5e7e6778ce71b4451091e3899c0f9e04d07e95d1a0bdb07eb0319c083e3d9aa94bc2e33fc8546f82a1441e73c37218fdc7f228ee8273c7a87466958973
2017-11-20 15:15:32 -05:00
Suhas Daftuar
9d811dc18b Document partial validation in ConnectBlock()
ConnectBlock() relies on validation that happens in ContextualCheckBlock() and
ContextualCheckBlockHeader(). This has implications for implementing consensus
changes and handling software upgrade to ensure that nodes upgrading their
software end up enforcing all the consensus rules.
2017-11-20 14:31:15 -05:00
Sjors Provoost
fe27a72362
[docs] links to code style guides 2017-11-20 13:47:01 +01:00
Akio Nakamura
c60c49b679 Improve help text and behavior of RPC-logging
A) The changes in behavior are as follows:
1. Introduce logging category "none" as alias of "0" for
   both RPC-logging and bitcoind "-debug" parameter.
2. Same as "0" is given to argument of "-debug",
   if "none" or "0" is given to <include>, all other given logging
   categories are ignored. The same is true for <exclude>.
   (Before this PR, "0" was accepted but just be ignored itself.)

B) The changes in the help text are as follows:
1. Add a descrption about the evaluation order of <include> and
   <exclude> to clarify how debug loggig categories to be set.
2. Delete text that describe restriction about libevent because
   it's already allowed libevent logging to be updated during runtime.
3. Add a description for category "all", "1", "none" and "0".
4. Add "optional" to the help text of <include> and <exclude>.
5. Add missing new lines before "Argument:".
6. This RPC always returns all logging categories with status.
   Fix the help text to match this behavior.
2017-11-20 17:48:39 +09:00
Jonas Schnelli
57ac471a29
Call BannedListChanged outside of cs_setBanned lock 2017-11-19 12:51:44 -10:00
Wladimir J. van der Laan
7293d06413
Merge #11698: [Docs] [Qt] RPC-Console nested commands documentation
c3055bb Add help-console command to Qt debug console (Luke Mlsna)

Pull request description:

  This PR would close issue #9195 by adding documentation for the debug console features (mainly nested commands) which were added in [PR #7783](https://github.com/bitcoin/bitcoin/pull/7783).

  The following changes were made to QT debug console code:
  - Added a line to the initial message text at the top of the debug console:

  > For more information on using this console type **help-console**.

  - Added a pseudo-command `help-console` which is hooked after parsing the request, but before actually executing the RPC thread. It prints the following text to the console as if it were a valid RPC response.

  > This console accepts RPC commands using the standard syntax.
  >    example:    getblockhash 8
  > This console can also accept RPC commands using bracketed syntax.
  >    example:    getblockhash(8)
  > A space or a comma can be used to separate arguments for either syntax.
  >    example:    sendtoaddress \<address\> \<amount\>
  >                    sendtoaddress,\<address\>,\<amount\>
  > Commands may be nested when specified with the bracketed syntax.
  >    example:    getblockinfo(getblockhash(0),true).
  > Result values can be queried with a non-quoted string in brackets.
  >    example:    getblock(getblockhash(0) true)[height]

  This seemed like a reasonably sane way to introduce a fake RPC help command, but

Tree-SHA512: 35d73dcef9c4936b8be99e80978169f117c22b94f4400c91097bf7e0e1489060202dcd738d9debdf4c8a7bd10709e2c19d4f625f19e47c4a034f1d6019c0e0f2
2017-11-19 13:04:43 +01:00
Wladimir J. van der Laan
9cdd2bcf67
Merge #11718: tests: move pwalletMain to wallet test fixture
49bd659 tests: move pwalletMain to wallet test fixture (Wladimir J. van der Laan)

Pull request description:

  Scope the variable instead of using an external global; this is how test fixtures are intended to be used.

  Followup to #11713.

Tree-SHA512: 7d5bda93cdfe1329c8fe39bd72965906e36dad72fbb5d344ebedf26e66b1857510d01a3c2872d7f718fdeb23365e6ba71991aafe68e82781c6767a086b6d1590
2017-11-19 11:21:51 +01:00
MarcoFalke
0d89fa0877
Merge #11707: [tests] Fix sendheaders
9d42cc333 [tests] address review comments (John Newbery)
f0c4ab9a7 [tests] fix flakiness in sendheaders.py (John Newbery)
25fd6e2c2 [tests] refactor check_last_announcement() in sendheaders.py (John Newbery)
f39d4bbd1 [tests] tidy up BaseNode in sendheaders.py (John Newbery)
2613c545f [tests] fix flake8 warnings in sendheaders.py (John Newbery)

Pull request description:

  This PR should fix the intermittent failure of sendheaders.py described in #11673. The first three commits are tidying up and refactoring the file. The final commit _fix flakiness in sendheaders.py_ fixes the intermittent failures. The commit message for that commit describes the problems that are being fixed.

  I think @laanwj @MeshCollider @MarcoFalke have seen these failures.

  fixes #11673

Tree-SHA512: 278e1af85f2eae00f970f2d8ef33686dd52b4f62180dea4cfdaff7bcf3287c6f1c2930355d99461a12f0c51c4d42cc3b1cb3275174134028ca4d06ffc24c18dd
2017-11-18 17:30:24 -05:00
Thomas Snider
bba9bd0d9d Switched sync.{cpp,h} to std threading primitives. 2017-11-18 11:35:14 -08:00
Wladimir J. van der Laan
d080a7d503
Merge #11466: Specify custom wallet directory with -walletdir param
c1e5d40 Make debugging test crash easier (MeshCollider)
8263f6a Create walletdir if datadir doesn't exist and fix tests (MeshCollider)
9587a9c Default walletdir is wallets/ if it exists (MeshCollider)
d987889 Add release notes for -walletdir and wallets/ dir (MeshCollider)
80c5cbc Add test for -walletdir (MeshCollider)
0530ba0 Add -walletdir parameter to specify custom wallet dir (MeshCollider)

Pull request description:

  Closes #11348

  Adds a `-walletdir` parameter which specifies a directory to use for wallets, allowing them to be stored separately from the 'main' data directory. Creates a new `wallets/` directory in datadir if this is the first time running, and defaults to using it if it exists.

  Includes tests and release notes. Things which might need to be considered more:
  - there is no 'lock' on the wallets directory, which might be needed?
  - because this uses a new wallets/ directory by default, downgrading to an earlier version won't see the wallets in that directory (not a big deal though, users can just copy them up to the main dir)
  - jnewbery suggested putting each wallet in its own directory, which is a good idea, but out of scope for this PR IMO. EDIT: this is being done in https://github.com/bitcoin/bitcoin/pull/11687
  - doc/files.md needs updating (will do soon)

  I also considered including  a cleanup by removing caching of data directory paths and instead just initialise them once on startup (c.f. #3073), but decided it wasn't super relevant here will just complicate review.

Tree-SHA512: c8ac04bfe9a810c32055f2c8b8fa0d535e56125ceb8d96f12447dd3538bf3e5ee992b60b1cd2173bf5f3fa023a9feab12c9963593bf27ed419df929bb413398d
2017-11-18 14:41:15 +01:00
Wladimir J. van der Laan
49bd6590fe tests: move pwalletMain to wallet test fixture
Scope the variable instead of using an external global; this is how test
fixtures are intended to be used.

Followup to #11713.
2017-11-18 14:16:38 +01:00
Wladimir J. van der Laan
49667a77e7
Merge #11713: Fix for mismatched extern definition in wallet tests
f94c2ec Fix for mismatched extern definition in wallet test classes which was breaking msvc linking. (Aaron Clauson)

Pull request description:

  The extern declarations are using a raw pointer which doesn't match the source variable's std::unqiue_ptr.

Tree-SHA512: 1500ffa1282ee6565741bf2f8f9def68a355346c8e4a667e1167d3d550eb0b732e8cba52fbef380a92c860e686d36da877d800ee5f2fc1e4dd8fd88fbe170644
2017-11-18 14:03:12 +01:00
Sjors Provoost
db0b7373fc
[Qt] Improved copy: RBF checkbox, tooltip and confirmation screen
Opt-in RBF checkbox uses less technical jargon and emphasises
the fee bump functionality (at the expense of not mentioning
other uses of RBF).

The transaction confirmation screen uses copy consistent with this.
2017-11-18 13:12:07 +01:00
Wladimir J. van der Laan
938863965f
Merge #11710: cli: Reject arguments to -getinfo
dcfef27 cli: Reject arguments to -getinfo (Wladimir J. van der Laan)

Pull request description:

  Currently it's possible to accidentally type e.g.

      bitcoin-cli -getinfo getbalance

  and get an answer which can be confusing; the trailing arguments are just ignored.

  To avoid this, throw an error if the user provides arguments to
  `-getinfo`.

Tree-SHA512: 3603e8fa852b884d1dd3b7462db40b092fe8b3390fd4384b4ee330315d797aff711e9f62990012fd4b5a55c8678734ba8497a5488a09ee6b65cf8a99017d6eb4
2017-11-18 12:05:31 +01:00
James O'Beirne
65e91f5edf [tests] Test that mempool rejects coinbase transactions 2017-11-18 00:48:34 -08:00
Aaron Clauson
f94c2ecb48 Fix for mismatched extern definition in wallet test classes which was breaking msvc linking. 2017-11-18 18:55:45 +11:00
Luke Mlsna
c3055bbea1
Add help-console command to Qt debug console
- Added `help-console` to the list of autocompletion strings
     - Implemented requested changes to help message:
       - Added an example that uses access-by-index `getblock(getblockhash(0) true)[tx][0]`
       - Replace "bracketed syntax" to "parenthesized syntax" where applicable
       - Replace "separate" with "delimit"
       - Removed `<br>` and `<b>help/help-console</b>` from translation strings, since these parts don't change between languages
       - Changed examples to be based off `getblock 0` so they will work even with pruned/no blockchain and `disablewallet` if copied and pasted
       - Clarified syntax for queries of named/unnamed result objects.
2017-11-17 23:28:11 -06:00
John Newbery
9d42cc3331 [tests] address review comments 2017-11-17 17:15:28 -05:00
practicalswift
f522fb7c9c tests: Remove unused mininode functions deser_int_vector(f) and ser_int_vector(l) 2017-11-17 15:35:15 +01:00
Wladimir J. van der Laan
142913296f
Merge #11140: Trivial: Improve #endif comments
ac1cf8d Trivial: Improve #endif comments (danra)

Pull request description:

  Improve the #endif comments for the '#if HAVE_DECL_BSWAP_XX == 0' preprocessor conditions, so each shows the full condition which it closes.

Tree-SHA512: f533311fa48cb2f46f6490b6c965ad5f8861dcfad70c56d70e31fa989b422880c78b2dd6f24f648b19d3a22f767606e0de5cf1cb71445012b42c97ac2149295e
2017-11-17 15:34:51 +01:00
practicalswift
0f3b752ec7 Remove unused imports 2017-11-17 15:34:28 +01:00
Wladimir J. van der Laan
dcfef277b4 cli: Reject arguments to -getinfo
Currently it's possible to accidentally type e.g.

    bitcoin-cli -getinfo getbalance

and get an answer which can be confusing; the trialing arguments are
just ignored.

To avoid this, throw an error if the user provides arguments to
`-getinfo`.
2017-11-17 15:11:50 +01:00
Wladimir J. van der Laan
5197100704
Merge #11706: Make default issue text all comments to make issues more readable
e89adba Make default issue text all comments to make issues more readable (Matt Corallo)

Pull request description:

Tree-SHA512: d0a657664e3defd9ace6ce167d593affce6f881f9ae547d53af36a90caa5cf206b00a2cc2e3622ba2c69c71302ec4a29b84612fc91d4ebd94907b4e4926de44d
2017-11-17 15:00:52 +01:00
Wladimir J. van der Laan
ea68190132
Merge #11704: Windows build doc update
1cecea7 doc: Specify required source location for Windows WSL builds (Aaron Clauson)

Tree-SHA512: 6c5bb7f953a4399e1f99da865086a3d5196e7eb0df226f1ec08bde5b9a68bfe8934f45a5dc011623adb607aab7ac79fa8b48ed09f6fec4494179938d9951080e
2017-11-17 14:32:00 +01:00
Aaron Clauson
1cecea71ad doc: Specify required source location for Windows WSL builds
- Added steps to specify required source location for Windows WSL
  builds.
- Attempted to make the introduction and options for building on Windows
  clearer.
2017-11-17 14:31:05 +01:00
Wladimir J. van der Laan
595ec11d80
Merge #11700: Add gitian PGP key: willyko
f88d900 Add gitian PGP key: willyko (Willy Ko)

Pull request description:

  First gitian sig: [https://github.com/bitcoin-core/gitian.sigs/pull/619](url)

Tree-SHA512: 3e6b017bd982a05d9a966948292b2d9a95e1bff6f28139a6a7545d63d7320f77d257fa0628c4fe28b39b8ae844be521dfb6224b1611e1e9d0fa49e7bceacb27c
2017-11-17 14:19:41 +01:00
Wladimir J. van der Laan
1f7695b419
Merge #11621: [build] Add temp_bitcoin_locale_qrc to CLEAN_QT to fix make distcheck
a7c949f [build] Add temp_bitcoin_locale_qrc to CLEAN_QT to fix make distcheck (fanquake)

Pull request description:

  Fixes #11302

  Tested on OS X 10.12.6 with 0e707919f5

  Was failing like:
  ```
  make distclean
  ....
  rm -f config.status config.cache config.log configure.lineno config.status.lineno
  rm -f Makefile
  ERROR: files left in build directory after distclean:
  ./src/qt/temp_bitcoin_locale.qrc
  make[1]: *** [distcleancheck] Error 1
  make: *** [distcheck] Error 1
  ```

Tree-SHA512: 291c786f20a82e648fdee2bcbc654d93d9abeb7d996ae7706d304697d4952709a0ec5d3aa88d1214f22cfe81ced88f10c187929904eecd60f2165b696727dd88
2017-11-17 14:04:02 +01:00
Wladimir J. van der Laan
ccc70a295f
Merge #11648: [tests] Add messages.py
1135c79 [tests] Tidy up mininode.py module (John Newbery)
f9cd9b1 [tests] Move test_framework Bitcoin primitives into separate module (John Newbery)

Pull request description:

  Second part of #11518.

  Moves the primitive Bitcoin datastructures and message classes into their own module, and tidies up the mininode.py module.

  - First commit is almost entirely move-only
  - Second commit is mostly move-only, but also does a little tidying.

Tree-SHA512: 5d74802677f1ab788e43188653106a96fffd9ab1fe3aa6a4eb94e5807de5dd5c8ee212296f45e8d16c7e3d95cfc4891677e812b7944bd3ab604e04b3b88aa06e
2017-11-17 13:16:40 +01:00
Wladimir J. van der Laan
f6f8d54aff
Merge #10920: [qt] Fix potential memory leak in newPossibleKey(ChangeCWallet *wallet)
446e261 [qt] Fix potential memory leak in newPossibleKey(ChangeCWallet *wallet) (practicalswift)

Pull request description:

  Fix potential memory leak in `newPossibleKey(ChangeCWallet *wallet)`.

Tree-SHA512: 252d3828133a0d241cc649aed1280e14a5d5ea47b7b2989039cfa5061a8e35183c7f36d7320aa0ac1b4dcab31e584b358dbbb2fe645a412371d0a460878e2b58
2017-11-17 13:07:37 +01:00
MeshCollider
c1e5d40e16 Make debugging test crash easier 2017-11-18 00:51:00 +13:00
MeshCollider
8263f6a5ac Create walletdir if datadir doesn't exist and fix tests 2017-11-18 00:50:59 +13:00
MeshCollider
9587a9c12b Default walletdir is wallets/ if it exists 2017-11-18 00:50:59 +13:00
MeshCollider
d9878890e4 Add release notes for -walletdir and wallets/ dir 2017-11-18 00:50:58 +13:00
MeshCollider
80c5cbc14f Add test for -walletdir 2017-11-18 00:50:58 +13:00
MeshCollider
0530ba0eae Add -walletdir parameter to specify custom wallet dir 2017-11-18 00:50:58 +13:00
Wladimir J. van der Laan
41221126c8
Merge #11702: [build] Add a script for installing db4
6e4cdd6 [docs] Add reference to install_db4.sh in OS X build instructions (James O'Beirne)
af9103e [build] Add a script for installing db4 (James O'Beirne)

Pull request description:

  Instead of maintaining rote instructions for building BerkeleyDB in `doc/build-{unix,openbsd}.md`, reference a script that does the same thing and can be called from unanticipated contexts, e.g. Docker builds.

  The script was written with portability in mind, though I haven't tested it on openbsd.

  I wasn't sure if we wanted to create a separate directory for this sort of thing (e.g. `contrib/install`) so I just stuck it in `contrib/`; happy to move it around if anyone has another preference.

Tree-SHA512: d2fc83c065d083458c448e6041e5e9ef67f8165974925560a83881d22d1e9448ea3dd4f7a38196800a8cd6dcf206208a2d6d12417bfe094902d4754e4ca67f18
2017-11-17 12:45:00 +01:00
practicalswift
a720b928c8 Remove includes in .cpp files for things the corresponding .h file already included 2017-11-16 22:26:34 +01:00
James O'Beirne
6e4cdd67b1 [docs] Add reference to install_db4.sh in OS X build instructions 2017-11-16 11:49:34 -08:00
James O'Beirne
af9103eb75 [build] Add a script for installing db4
Instead of maintaining not-easily-tested instructions for building BerkeleyDB
in doc/build-unix.md, package the installation as a script in contrib/. This
allows shared usage from a number of contexts, e.g. Docker.

Thanks to @jonasschnelli, @laanwj for feedback.
2017-11-16 11:49:19 -08:00