diff options
author | Qasim Javed <qasimj@gmail.com> | 2018-04-23 00:39:12 -0700 |
---|---|---|
committer | Qasim Javed <qasimj@gmail.com> | 2018-04-24 11:41:20 -0700 |
commit | 6674a75bfbdf680d0a3648f44c6591ff5fc983cf (patch) | |
tree | 76fe134f57f4150f572c25246b0285389eb6d389 /test/util | |
parent | a0079d4b6dc67be3889af9a16eda89b3c4b33bc5 (diff) |
[tests] Make rpcauth.py testable and add unit tests
refs #12995
Diffstat (limited to 'test/util')
-rwxr-xr-x | test/util/rpcauth-test.py | 49 |
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() |