From 2700f09c4130af6167ce71f46960e92ca800e205 Mon Sep 17 00:00:00 2001 From: Sjors Provoost Date: Fri, 15 Feb 2019 12:54:29 +0100 Subject: rpc: signer: add enumeratesigners to list external signers --- test/functional/mocks/signer.py | 6 ++++++ test/functional/wallet_signer.py | 31 +++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) (limited to 'test') diff --git a/test/functional/mocks/signer.py b/test/functional/mocks/signer.py index 6b5c903886..cde85bcd73 100755 --- a/test/functional/mocks/signer.py +++ b/test/functional/mocks/signer.py @@ -17,10 +17,16 @@ def perform_pre_checks(): sys.stdout.write(mock_result[2:]) sys.exit(int(mock_result[0])) +def enumerate(args): + sys.stdout.write(json.dumps([{"fingerprint": "00000001", "type": "trezor", "model": "trezor_t"}, {"fingerprint": "00000002"}])) + parser = argparse.ArgumentParser(prog='./signer.py', description='External signer mock') subparsers = parser.add_subparsers(description='Commands', dest='command') subparsers.required = True +parser_enumerate = subparsers.add_parser('enumerate', help='list available signers') +parser_enumerate.set_defaults(func=enumerate) + args = parser.parse_args() perform_pre_checks() diff --git a/test/functional/wallet_signer.py b/test/functional/wallet_signer.py index 62d4db837e..295cdcf398 100755 --- a/test/functional/wallet_signer.py +++ b/test/functional/wallet_signer.py @@ -48,5 +48,36 @@ class SignerTest(BitcoinTestFramework): def run_test(self): self.log.debug(f"-signer={self.mock_signer_path()}") + assert_raises_rpc_error(-4, 'Error: restart bitcoind with -signer=', + self.nodes[0].enumeratesigners + ) + + # Handle script missing: + assert_raises_rpc_error(-1, 'execve failed: No such file or directory', + self.nodes[2].enumeratesigners + ) + + # Handle error thrown by script + self.set_mock_result(self.nodes[1], "2") + assert_raises_rpc_error(-1, 'RunCommandParseJSON error', + self.nodes[1].enumeratesigners + ) + self.clear_mock_result(self.nodes[1]) + + self.set_mock_result(self.nodes[1], '0 [{"type": "trezor", "model": "trezor_t", "error": "fingerprint not found"}]') + assert_raises_rpc_error(-4, 'fingerprint not found', + self.nodes[1].enumeratesigners + ) + self.clear_mock_result(self.nodes[1]) + + # Create new wallets with private keys disabled: + self.nodes[1].createwallet(wallet_name='hww', disable_private_keys=True, descriptors=True) + hww = self.nodes[1].get_wallet_rpc('hww') + + result = hww.enumeratesigners() + assert_equal(len(result['signers']), 2) + assert_equal(result['signers'][0]["fingerprint"], "00000001") + assert_equal(result['signers'][0]["name"], "trezor_t") + if __name__ == '__main__': SignerTest().main() -- cgit v1.2.3