aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2018-04-25 15:56:33 +0200
committerWladimir J. van der Laan <laanwj@gmail.com>2018-04-25 15:56:47 +0200
commit106d9297801c8d63a961d36ed03f2efb20ff65f7 (patch)
treea51daa1c0aae9b22799d0503e3f0eac588b414b9 /test
parente074097c1ba334e5ecefa734fe0da28f42b5afb0 (diff)
parent6674a75bfbdf680d0a3648f44c6591ff5fc983cf (diff)
downloadbitcoin-106d9297801c8d63a961d36ed03f2efb20ff65f7.tar.xz
Merge #13056: [tests] Make rpcauth.py testable and add unit tests
6674a75 [tests] Make rpcauth.py testable and add unit tests (Qasim Javed) Pull request description: refs #12995 Tree-SHA512: 609a85a75dafe46723f050db1e96098f6859519afd5e1b141a332f34ab715144d32fdd8f10d245d6dc0765e77f82158fe7b8aa2e4317f0e893de491d2e0acf1f
Diffstat (limited to 'test')
-rwxr-xr-xtest/util/rpcauth-test.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/test/util/rpcauth-test.py b/test/util/rpcauth-test.py
new file mode 100755
index 0000000000..dfbb5ea3a7
--- /dev/null
+++ b/test/util/rpcauth-test.py
@@ -0,0 +1,49 @@
+#!/usr/bin/env python3
+# Copyright (c) 2015-2018 The Bitcoin Core developers
+# Distributed under the MIT software license, see the accompanying
+# file COPYING or http://www.opensource.org/licenses/mit-license.php.
+"""Test share/rpcauth/rpcauth.py
+"""
+import base64
+import configparser
+import hmac
+import importlib
+import os
+import sys
+import unittest
+
+class TestRPCAuth(unittest.TestCase):
+ def setUp(self):
+ config = configparser.ConfigParser()
+ config_path = os.path.abspath(
+ os.path.join(os.sep, os.path.abspath(os.path.dirname(__file__)),
+ "../config.ini"))
+ with open(config_path) as config_file:
+ config.read_file(config_file)
+ sys.path.insert(0, os.path.dirname(config['environment']['RPCAUTH']))
+ self.rpcauth = importlib.import_module('rpcauth')
+
+ def test_generate_salt(self):
+ self.assertLessEqual(len(self.rpcauth.generate_salt()), 32)
+ self.assertGreaterEqual(len(self.rpcauth.generate_salt()), 16)
+
+ def test_generate_password(self):
+ salt = self.rpcauth.generate_salt()
+ password, password_hmac = self.rpcauth.generate_password(salt)
+
+ expected_password = base64.urlsafe_b64encode(
+ base64.urlsafe_b64decode(password)).decode('utf-8')
+ self.assertEqual(expected_password, password)
+
+ def test_check_password_hmac(self):
+ salt = self.rpcauth.generate_salt()
+ password, password_hmac = self.rpcauth.generate_password(salt)
+
+ m = hmac.new(bytearray(salt, 'utf-8'),
+ bytearray(password, 'utf-8'), 'SHA256')
+ expected_password_hmac = m.hexdigest()
+
+ self.assertEqual(expected_password_hmac, password_hmac)
+
+if __name__ == '__main__':
+ unittest.main()