github.com/muhammedhassanm/blockchain@v0.0.0-20200120143007-697261defd4d/sawtooth-core-master/cli/tests/test_admin_keygen.py (about) 1 # Copyright 2017 Intel Corporation 2 # 3 # Licensed under the Apache License, Version 2.0 (the "License"); 4 # you may not use this file except in compliance with the License. 5 # You may obtain a copy of the License at 6 # 7 # http://www.apache.org/licenses/LICENSE-2.0 8 # 9 # Unless required by applicable law or agreed to in writing, software 10 # distributed under the License is distributed on an "AS IS" BASIS, 11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 # See the License for the specific language governing permissions and 13 # limitations under the License. 14 # ------------------------------------------------------------------------------ 15 16 import argparse 17 import os 18 import unittest 19 import sys 20 21 22 from sawtooth_signing.secp256k1 import Secp256k1PrivateKey 23 24 from sawtooth_cli.admin_command import keygen 25 from sawtooth_cli.admin_command.config import get_key_dir 26 27 28 class TestKeygen(unittest.TestCase): 29 30 @classmethod 31 def setUpClass(cls): 32 cls._parser = None 33 cls._key_dir = get_key_dir() 34 cls._key_name = 'test_key' 35 cls._priv_filename = os.path.join(cls._key_dir, 36 cls._key_name + '.priv') 37 cls._pub_filename = os.path.join(cls._key_dir, 38 cls._key_name + '.pub') 39 if not os.path.exists(cls._key_dir): 40 try: 41 os.makedirs(cls._key_dir, exist_ok=True) 42 except OSError as e: 43 print('Unable to create {}: {}'.format(cls._key_dir, e), 44 file=sys.stderr) 45 sys.exit(1) 46 47 def setUp(self): 48 self._parser = argparse.ArgumentParser(add_help=False) 49 50 parent_parser = argparse.ArgumentParser(prog='test_keygen', 51 add_help=False) 52 53 subparsers = self._parser.add_subparsers(title='subcommands', 54 dest='command') 55 56 keygen.add_keygen_parser(subparsers, parent_parser) 57 58 def tearDown(self): 59 self.remove_key_files() 60 61 def _parse_keygen_command(self, *args): 62 cmd_args = ['keygen'] 63 cmd_args += args 64 return self._parser.parse_args(cmd_args) 65 66 def test_writes_valid_key(self): 67 """Remove existing test files before creating new keys. 68 """ 69 self.remove_key_files() 70 71 args = self._parse_keygen_command(self._key_name) 72 keygen.do_keygen(args) 73 74 private_key = _read_signing_keys(self._priv_filename) 75 76 self.assertIsNotNone(private_key) 77 78 def test_force_write(self): 79 """Write key files to be overwritten by test of --force option. 80 """ 81 self.remove_key_files() 82 args = self._parse_keygen_command(self._key_name) 83 keygen.do_keygen(args) 84 85 args = self._parse_keygen_command('--force', self._key_name) 86 keygen.do_keygen(args) 87 88 private_key = _read_signing_keys(self._priv_filename) 89 90 self.assertIsNotNone(private_key) 91 92 def remove_key_files(self): 93 '''Removes the key files. 94 ''' 95 try: 96 os.remove(self._priv_filename) 97 os.remove(self._pub_filename) 98 except FileNotFoundError: 99 pass 100 101 102 def _read_signing_keys(key_filename): 103 """Reads the given file as a HEX formatted key. 104 105 Args: 106 key_filename: The filename where the key is stored. 107 108 Returns: 109 tuple (str, str): the public and private key pair 110 111 Raises: 112 CliException: If unable to read the file. 113 """ 114 115 filename = key_filename 116 117 with open(filename, 'r') as key_file: 118 signing_key = key_file.read().strip() 119 120 return Secp256k1PrivateKey.from_hex(signing_key)