def test_setconfig_non_auth_boolean(self): self.assertEqual( True, Commands._setconfig_normalize_value('show_console_tab', "true")) self.assertEqual( True, Commands._setconfig_normalize_value('show_console_tab', "True"))
def test_setconfig_auth(self): self.assertEqual("7777", Commands._setconfig_normalize_value('rpcuser', "7777")) self.assertEqual("7777", Commands._setconfig_normalize_value('rpcuser', '7777')) self.assertEqual("7777", Commands._setconfig_normalize_value('rpcpassword', '7777')) self.assertEqual("2asd", Commands._setconfig_normalize_value('rpcpassword', '2asd')) self.assertEqual("['file:///var/www/','https://electrum.org']", Commands._setconfig_normalize_value('rpcpassword', "['file:///var/www/','https://electrum.org']"))
def test_export_private_key_imported(self, mock_write): wallet = restore_wallet_from_text( 'p2pkh:XGx8LpkmLRv9RiMvpYx965BCaQKQbeMVVqgAh7B5SQVdosQiKJ4i p2pkh:XEn9o6oayjsRmoEQwDbvkrWVvjRNqPj3xNskJJPAKraJTrWuutwd', path='if_this_exists_mocking_failed_648151893')['wallet'] cmds = Commands(config=None, wallet=wallet, network=None) # single address tests with self.assertRaises(Exception): cmds.getprivatekeys( "asdasd") # invalid addr, though might raise "not in wallet" with self.assertRaises(Exception): cmds.getprivatekeys( "XdDHzW6aTeuQsraNXeEsPy5gAv1nUz7Y7Q") # not in wallet self.assertEqual( "p2pkh:XEn9o6oayjsRmoEQwDbvkrWVvjRNqPj3xNskJJPAKraJTrWuutwd", cmds.getprivatekeys("PAcQeW6SqW8S1JpL6f53m9GnT6AeRFndWo")) # list of addresses tests with self.assertRaises(Exception): cmds.getprivatekeys(['PKJNnVq4Lu8iRqSiNtu249TjUX9qELpRmH', 'asd']) self.assertEqual([ 'p2pkh:XGx8LpkmLRv9RiMvpYx965BCaQKQbeMVVqgAh7B5SQVdosQiKJ4i', 'p2pkh:XEn9o6oayjsRmoEQwDbvkrWVvjRNqPj3xNskJJPAKraJTrWuutwd' ], cmds.getprivatekeys([ 'PKJNnVq4Lu8iRqSiNtu249TjUX9qELpRmH', 'PAcQeW6SqW8S1JpL6f53m9GnT6AeRFndWo' ]))
def test_export_private_key_deterministic(self, mock_write): wallet = restore_wallet_from_text( 'hint shock chair puzzle shock traffic drastic note dinosaur mention suggest sweet', gap_limit=2, path='if_this_exists_mocking_failed_648151893')['wallet'] cmds = Commands(config=None, wallet=wallet, network=None) # single address tests with self.assertRaises(Exception): cmds.getprivatekeys( "asdasd") # invalid addr, though might raise "not in wallet" with self.assertRaises(Exception): cmds.getprivatekeys( "XdDHzW6aTeuQsraNXeEsPy5gAv1nUz7Y7Q") # not in wallet self.assertEqual( "p2pkh:XE5VEmWKQRK5N7kQMfw6KqoRp3ExKWgaeCKsxsmDFBxJJBgdQdTH", cmds.getprivatekeys("PUfdKh9bDcnCkp5JRo1hCjFnTzPxq77fVk")) # list of addresses tests with self.assertRaises(Exception): cmds.getprivatekeys(['PUfdKh9bDcnCkp5JRo1hCjFnTzPxq77fVk', 'asd']) self.assertEqual([ 'p2pkh:XE5VEmWKQRK5N7kQMfw6KqoRp3ExKWgaeCKsxsmDFBxJJBgdQdTH', 'p2pkh:XGtpLmVGmaRnfvRvd4qxSeE7PqJoi9FUfkgPKD24PeoJsZCh1EXg' ], cmds.getprivatekeys([ 'PUfdKh9bDcnCkp5JRo1hCjFnTzPxq77fVk', 'PM8oe78fUSjGUuWFHbn6seYtoG93SynJy1' ]))
def test_setconfig_non_auth_number(self): self.assertEqual( 7777, Commands._setconfig_normalize_value('rpcport', "7777")) self.assertEqual( 7777, Commands._setconfig_normalize_value('rpcport', '7777')) self.assertAlmostEqual( Decimal(2.3), Commands._setconfig_normalize_value('somekey', '2.3'))
def test_encrypt_decrypt(self, mock_write): wallet = restore_wallet_from_text( 'p2pkh:XJvTzLoBy3jPMZFSTzK6KqTiNR3n5xbreSScEy7u9C8fEf1GZG3X', path='if_this_exists_mocking_failed_648151893')['wallet'] cmds = Commands(config=None, wallet=wallet, network=None) cleartext = "asdasd this is the message" pubkey = "021f110909ded653828a254515b58498a6bafc96799fb0851554463ed44ca7d9da" ciphertext = cmds.encrypt(pubkey, cleartext) self.assertEqual(cleartext, cmds.decrypt(pubkey, ciphertext))
def test_setconfig_non_auth_list(self): self.assertEqual(['file:///var/www/', 'https://electrum.org'], Commands._setconfig_normalize_value( 'url_rewrite', "['file:///var/www/','https://electrum.org']")) self.assertEqual(['file:///var/www/', 'https://electrum.org'], Commands._setconfig_normalize_value( 'url_rewrite', '["file:///var/www/","https://electrum.org"]'))
def test_convert_xkey(self): cmds = Commands(config=None, wallet=None, network=None) xpubs = { ("tpubD8p5qNfjczgTGbh9qgNxsbFgyhv8GgfVkmp3L88qtRm5ibUYiDVCrn6WYfnGey5XVVw6Bc5QNQUZW5B4jFQsHjmaenvkFUgWtKtgj5AdPm9", "standard"), } for xkey1, xtype1 in xpubs: for xkey2, xtype2 in xpubs: self.assertEqual(xkey2, cmds.convert_xkey(xkey1, xtype2)) xprvs = { ("tprv8c83gxdVUcznP8fMx2iNUBbaQgQC7MUbBUDG3c6YU9xgt7Dn5pfcgHUeNZTAvuYmNgVHjyTzYzGWwJr7GvKCm2FkPaaJipyipbfJeB3tdPW", "standard"), } for xkey1, xtype1 in xprvs: for xkey2, xtype2 in xprvs: self.assertEqual(xkey2, cmds.convert_xkey(xkey1, xtype2))
def test_convert_xkey(self): cmds = Commands(config=None, wallet=None, network=None) xpubs = { ("xpub6CCWFbvCbqF92kGwm9nV7t7RvVoQUKaq5USMdyVP6jvv1NgN52KAX6NNYCeE8Ca7JQC4K5tZcnQrubQcjJ6iixfPs4pwAQJAQgTt6hBjg11", "standard"), } for xkey1, xtype1 in xpubs: for xkey2, xtype2 in xpubs: self.assertEqual(xkey2, cmds.convert_xkey(xkey1, xtype2)) xprvs = { ("xprv9yD9r6PJmTgqpGCUf8FUkkAhNTxv4rryiFWkqb5mYQPw8aMDXUzuyJ3tgv5vUqYkdK1E6Q5jKxPss4HkMBYV4q8AfG8t7rxgyS4xQX4ndAm", "standard"), } for xkey1, xtype1 in xprvs: for xkey2, xtype2 in xprvs: self.assertEqual(xkey2, cmds.convert_xkey(xkey1, xtype2))
def test_serialize_command_with_extra_payload(self): cmds = Commands(config=None, wallet=None, network=None) test_json_tx = { 'inputs': [], 'outputs': [], } res = cmds.serialize(test_json_tx) assert res == { 'complete': True, 'final': True, 'hex': '02000000000000000000' } test_json_tx.update({'extra_payload': ''}) res = cmds.serialize(test_json_tx) assert res == { 'complete': True, 'final': True, 'hex': '02000000000000000000' } test_json_tx.update({'extra_payload': {'key': 'value'}}) res = cmds.serialize(test_json_tx) assert res == { 'error': 'Transactions with extra payload can not' ' be created from serialize command' } test_json_tx.update({'extra_payload': '0b0a'}) res = cmds.serialize(test_json_tx) assert res == { 'error': 'Transactions with extra payload can not' ' be created from serialize command' }
network = daemon.network assert network.asyncio_loop.is_running() # get wallet on disk wallet_dir = os.path.dirname(config.get_wallet_path()) wallet_path = os.path.join(wallet_dir, "test_wallet") if not os.path.exists(wallet_path): create_new_wallet(path=wallet_path) # open wallet storage = WalletStorage(wallet_path) wallet = Wallet(storage) wallet.start_network(network) # you can use ~CLI commands by accessing command_runner command_runner = Commands(config, wallet=None, network=network) command_runner.wallet = wallet print("balance", command_runner.getbalance()) print("addr", command_runner.getunusedaddress()) print( "gettx", command_runner.gettransaction( "d8ee577f6b864071c6ccbac1e30d0d19edd6fa9a171be02b85a73fd533f2734d")) # but you might as well interact with the underlying methods directly print("balance", wallet.get_balance()) print("addr", wallet.get_unused_address()) print( "gettx", network.run_from_another_thread( network.get_transaction(
def test_setconfig_non_auth_number_as_string(self): self.assertEqual("7777", Commands._setconfig_normalize_value('somekey', "'7777'"))
def test_deserialize_transaction_unknown_spec_tx(self): cmds = Commands(config=None, wallet=None, network=None) deser = cmds.deserialize(UNKNOWN_SPEC_TX) assert deser['extra_payload'] == UNKNOWN_SPEC_TX_EP_FOR_JSON
def test_deserialize_transaction_cbtx(self): cmds = Commands(config=None, wallet=None, network=None) deser = cmds.deserialize(CB_TX_V2) assert deser['extra_payload'] == CB_TX_V2_EP_FOR_JSON
def test_deserialize_transaction_v2(self): cmds = Commands(config=None, wallet=None, network=None) deser = cmds.deserialize(V2_TX) assert deser['extra_payload'] == ''
def test_deserialize_transaction_unknown_spec_tx(self): cmds = Commands(config=None, wallet=None, network=None) with self.assertRaises(AxeTxError): cmds.deserialize(UNKNOWN_SPEC_TX)