From b255ecdda1cd7923462060de2a9c2810c311f47e Mon Sep 17 00:00:00 2001 From: James Prestwich Date: Fri, 15 Sep 2017 15:19:33 -0600 Subject: [PATCH] start test for bitcoinRPC --- xcat/bitcoinRPC.py | 11 +++--- xcat/tests/unit/test_bitcoinRPC.py | 62 ++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 5 deletions(-) create mode 100644 xcat/tests/unit/test_bitcoinRPC.py diff --git a/xcat/bitcoinRPC.py b/xcat/bitcoinRPC.py index 094be07..be47a37 100644 --- a/xcat/bitcoinRPC.py +++ b/xcat/bitcoinRPC.py @@ -4,7 +4,6 @@ import sys import bitcoin import bitcoin.rpc from xcat.utils import x2s -# from bitcoin import SelectParams from bitcoin.core import b2x, lx, x, COIN, CMutableTxOut from bitcoin.core import CMutableTxIn, CMutableTransaction from bitcoin.core.script import CScript, OP_DUP, OP_IF, OP_ELSE, OP_ENDIF @@ -14,8 +13,6 @@ from bitcoin.core.script import OP_CHECKLOCKTIMEVERIFY, OP_SHA256, OP_TRUE from bitcoin.core.scripteval import VerifyScript, SCRIPT_VERIFY_P2SH from bitcoin.wallet import CBitcoinAddress, P2SHBitcoinAddress from bitcoin.wallet import P2PKHBitcoinAddress - -# import xcat.utils as utils import logging if sys.version_info.major < 3: @@ -27,9 +24,13 @@ FEE = 0.001 * COIN class bitcoinProxy(): def __init__(self, network='regtest', timeout=900): - if network is not 'testnet' and network is not 'mainnet': - network = 'regtest' + if network not in ['testnet', 'mainnet', 'regtest']: + raise ValueError('Allowed networks are regtest, testnet, mainnet.') + if not isinstance(timeout, int) or timeout < 1: + raise ValueError('Timeout should be a positive integer.') + logging.debug("NETWORK in proxy: {0}".format(network)) + self.network = network self.timeout = timeout diff --git a/xcat/tests/unit/test_bitcoinRPC.py b/xcat/tests/unit/test_bitcoinRPC.py new file mode 100644 index 0000000..5865832 --- /dev/null +++ b/xcat/tests/unit/test_bitcoinRPC.py @@ -0,0 +1,62 @@ +import unittest +import unittest.mock as mock +from xcat.bitcoinRPC import bitcoinProxy +import logging + + +@mock.patch('xcat.bitcoinRPC.bitcoin.rpc') +class TestBitcoinProxy(unittest.TestCase): + """Test case for the bitcoinProxy class.""" + + def setUp(self): + logging.disable(logging.CRITICAL) + + @mock.patch('xcat.bitcoinRPC.bitcoin.SelectParams') + def test_init_with_testnet(self, mock_SP, mock_rpc): + """Test bitcoinProxy.__init__""" + + proxy = bitcoinProxy(network='testnet') + + mock_rpc.Proxy.assert_called_with(timeout=900) + mock_SP.assert_called_with('testnet') + self.assertIsInstance(proxy, bitcoinProxy) + + @mock.patch('xcat.bitcoinRPC.bitcoin.SelectParams') + def test_init_with_no_network(self, mock_SP, mock_rpc): + """Test bitcoinProxy.__init__""" + + proxy = bitcoinProxy() + + mock_rpc.Proxy.assert_called_with(timeout=900) + mock_SP.assert_called_with('regtest') + self.assertIsInstance(proxy, bitcoinProxy) + + def test_init_with_invalid(self, mock_rpc): + """Test bitcoinProxy.__init__""" + + with self.assertRaises(ValueError) as context: + proxy = bitcoinProxy(network='invalid input') + self.assertIsNone(proxy) + + self.assertTrue( + 'Allowed networks are regtest, testnet, mainnet.' + in str(context.exception)) + + def test_init_with_invalid_timeout(self, mock_rpc): + """Test bitcoinProxy.__init__""" + + with self.assertRaises(ValueError) as context: + proxy = bitcoinProxy(timeout='invalid input') + self.assertIsNone(proxy) + + self.assertTrue( + 'Timeout should be a positive integer.' + in str(context.exception)) + + with self.assertRaises(ValueError) as context_two: + proxy = bitcoinProxy(timeout=-381) + self.assertIsNone(proxy) + + self.assertTrue( + 'Timeout should be a positive integer.' + in str(context_two.exception))