aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorJameson Lopp <jameson.lopp@gmail.com>2023-09-30 15:06:36 -0400
committerJameson Lopp <jameson.lopp@gmail.com>2023-11-07 12:58:42 -0500
commit9ac114e5cd9d8ade3a1d9f3d76a08ff59a3f1658 (patch)
tree873a5a9d73b62a675ec357bd407117fb7f471e38 /test
parent3da69c464f16841a5c8d9fcc9c63238ab807d5ff (diff)
downloadbitcoin-9ac114e5cd9d8ade3a1d9f3d76a08ff59a3f1658.tar.xz
Throw error if invalid parameters passed to getnetworkhashps RPC endpoint
Diffstat (limited to 'test')
-rwxr-xr-xtest/functional/rpc_blockchain.py34
1 files changed, 31 insertions, 3 deletions
diff --git a/test/functional/rpc_blockchain.py b/test/functional/rpc_blockchain.py
index 8eb9f3aeb1..9b7743cafa 100755
--- a/test/functional/rpc_blockchain.py
+++ b/test/functional/rpc_blockchain.py
@@ -437,7 +437,6 @@ class BlockchainTest(BitcoinTestFramework):
def _test_getnetworkhashps(self):
self.log.info("Test getnetworkhashps")
- hashes_per_second = self.nodes[0].getnetworkhashps()
assert_raises_rpc_error(
-3,
textwrap.dedent("""
@@ -449,17 +448,46 @@ class BlockchainTest(BitcoinTestFramework):
""").strip(),
lambda: self.nodes[0].getnetworkhashps("a", []),
)
+ assert_raises_rpc_error(
+ -8,
+ "Block does not exist at specified height",
+ lambda: self.nodes[0].getnetworkhashps(100, self.nodes[0].getblockcount() + 1),
+ )
+ assert_raises_rpc_error(
+ -8,
+ "Block does not exist at specified height",
+ lambda: self.nodes[0].getnetworkhashps(100, -10),
+ )
+ assert_raises_rpc_error(
+ -8,
+ "Invalid nblocks. Must be a positive number or -1.",
+ lambda: self.nodes[0].getnetworkhashps(-100),
+ )
+ assert_raises_rpc_error(
+ -8,
+ "Invalid nblocks. Must be a positive number or -1.",
+ lambda: self.nodes[0].getnetworkhashps(0),
+ )
+
+ # Genesis block height estimate should return 0
+ hashes_per_second = self.nodes[0].getnetworkhashps(100, 0)
+ assert_equal(hashes_per_second, 0)
+
# This should be 2 hashes every 10 minutes or 1/300
+ hashes_per_second = self.nodes[0].getnetworkhashps()
assert abs(hashes_per_second * 300 - 1) < 0.0001
- # Test setting the first param of getnetworkhashps to negative value returns the average network
+ # Test setting the first param of getnetworkhashps to -1 returns the average network
# hashes per second from the last difficulty change.
current_block_height = self.nodes[0].getmininginfo()['blocks']
blocks_since_last_diff_change = current_block_height % DIFFICULTY_ADJUSTMENT_INTERVAL + 1
expected_hashes_per_second_since_diff_change = self.nodes[0].getnetworkhashps(blocks_since_last_diff_change)
assert_equal(self.nodes[0].getnetworkhashps(-1), expected_hashes_per_second_since_diff_change)
- assert_equal(self.nodes[0].getnetworkhashps(-2), expected_hashes_per_second_since_diff_change)
+
+ # Ensure long lookups get truncated to chain length
+ hashes_per_second = self.nodes[0].getnetworkhashps(self.nodes[0].getblockcount() + 1000)
+ assert hashes_per_second > 0.003
def _test_stopatheight(self):
self.log.info("Test stopping at height")