From 821dd5e3e107b01a21e7e26b76ebef4ee49402b2 Mon Sep 17 00:00:00 2001
From: Jimmy Song <jaejoon@gmail.com>
Date: Tue, 18 Apr 2017 13:11:06 -0700
Subject: [PATCH] Tests: Add test for getdifficulty

Test added to blockchain.py as adding a new test to reduce test run time.
---
 test/functional/blockchain.py | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/test/functional/blockchain.py b/test/functional/blockchain.py
index 596aed50e..de5e01c2e 100755
--- a/test/functional/blockchain.py
+++ b/test/functional/blockchain.py
@@ -6,6 +6,10 @@
 
 Test the following RPCs:
     - gettxoutsetinfo
+    - getdifficulty
+    - getbestblockhash
+    - getblockhash
+    - getblockheader
     - verifychain
 
 Tests correspond to code in rpc/blockchain.cpp.
@@ -40,6 +44,7 @@ class BlockchainTest(BitcoinTestFramework):
     def run_test(self):
         self._test_gettxoutsetinfo()
         self._test_getblockheader()
+        self._test_getdifficulty()
         self.nodes[0].verifychain(4, 0)
 
     def _test_gettxoutsetinfo(self):
@@ -57,7 +62,8 @@ class BlockchainTest(BitcoinTestFramework):
     def _test_getblockheader(self):
         node = self.nodes[0]
 
-        assert_raises_jsonrpc(-5, "Block not found", node.getblockheader, "nonsense")
+        assert_raises_jsonrpc(-5, "Block not found",
+                              node.getblockheader, "nonsense")
 
         besthash = node.getbestblockhash()
         secondbesthash = node.getblockhash(199)
@@ -79,5 +85,11 @@ class BlockchainTest(BitcoinTestFramework):
         assert isinstance(int(header['versionHex'], 16), int)
         assert isinstance(header['difficulty'], Decimal)
 
+    def _test_getdifficulty(self):
+        difficulty = self.nodes[0].getdifficulty()
+        # 1 hash in 2 should be valid, so difficulty should be 1/2**31
+        # binary => decimal => binary math is why we do this check
+        assert abs(difficulty * 2**31 - 1) < 0.0001
+
 if __name__ == '__main__':
     BlockchainTest().main()